File "debug_version01.php"

Full Path: /home/analogde/www/Four/Monsta-FTP-master/tmp/debug_version01.php
File size: 7.5 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/*
Je veux ajouter successivement dans un tableau la même chaîne qui correspond  au nom d'un fichier
Le nom est le suivant : $s = capture_IC.jpg
Avant de l'insèrer pour la première fois, on vérifie qu'il n'existe pas dans le tableau.
Sachant qu'il n'existe pas, il est stocké sans aucun changement, à l'identique.
Si on veux l’insérer $s pour la deuxième fois, il faut vérifier si la version  $s existe déjà. Dans ce cas, on va crée 
une sous chaine qui correspondra à l'indice de la nouvelle version.
Le format correspond a la chaine qui représente la version est la suivante :  _vx  
Sachant que x représente le numéro de la version, nous aurons donc _v1
il faudra l'intégrer au nom du fichier $s de la façon suivante : on récupére  l'extension du fichier avec le point qui 
se trouve avant, dans une chaine temporaire on enléve l'extension, puis on concataine $s et _v1 puis on rajoute à la fin 
l'extension. 
Cela nous donne la chaine compléte qui sera stockée qui vaudra capture_IC_v1.jpg 
Maintenant, si on veux rajoute une nouvelle fois la chaine $, il faut vérifié s'il existe une ou plusieurs version 
qui on la forme  capture_IC_vx.jpg, dans ce cas on va rechercher dans tous les chaines présentes dans le tableau l'élément 
_vx avec le x qui est le plus grand. On incrémentera sa valeur  puis on la rajoutera dans le tableau. 
Cela ainsi de suite
Je veux faire un essai en insérant la chaine $s 20 fois
*/

function insertFileVersion($fichier, $chemin) //, &$fileList) 
{

   
    $recherche = $chemin ."/" .$fichier;

    //echo "<pre>";
    //print_r(listeFichiersRepertoire($path)); 
    //echo "</pre>";

    $liste_fichier_repertoire = [];
    $liste_fichier_repertoire = listeFichiersRepertoire($chemin);
   
    if( is_dir($chemin) )
    {

        if( !file_exists($recherche) )
        {
            echo " Non trouvé" ."<br>";
            // Generer un fichier texte aleatoire
            $minSizeKb = 1; // Taille minimale en Ko
            $maxSizeKb = 5; // Taille maximale en Ko
            generateRandomTextFile($fichier, $minSizeKb, $maxSizeKb);
        }
        else
        {
            list($nom, $ext) = Fichier_separation_nom_extension($fichier); 
           
            $fichiersFiltres = array_filter($liste_fichier_repertoire, function($fichier) use ($nom) 
            {
                return strpos($fichier, $nom) !== false;  
            });

            $liste_base_commune = [];

            //echo "Fichiers contenant '$nom':<br>";
            foreach ($fichiersFiltres as $fichier) 
            {
                $liste_base_commune[] = $fichier;
            }

           
            
            $pathInfo = pathinfo($fichier);
            $baseName = $pathInfo['filename'];
            $extension = $pathInfo['extension'];

            if(count($liste_base_commune) == 1)
            {
                $elementUnique = reset($liste_base_commune);
                if( $elementUnique === $fichier)
                {
                    $increment_nom_version = $baseName ."_v1" ."." .$extension;
                    echo "Nouvelle version : " .$increment_nom_version;

                    $minSizeKb = 1; // Taille minimale en Ko
                    $maxSizeKb = 5; // Taille maximale en Ko
                    generateRandomTextFile($increment_nom_version, $minSizeKb, $maxSizeKb);
                }
            }
            else
            {
                echo "blabla";

                 // Afficher le résultat
                echo "<pre>";
                print_r($liste_base_commune);
                echo "</pre>";


                $sousChaine = "_v";
                $tableauFiltre = array_filter($liste_base_commune, function($valeur) use ($sousChaine) {
                        return strpos($valeur, $sousChaine) !== false; // Vérifie si "_v" est dans la chaîne
                });

                // Réinitialiser les clés (optionnel)
                $tableauFiltre = array_values($tableauFiltre);

                // Afficher le tableau filtré
                echo "Chaînes contenant '_v' :\n";
                print_r($tableauFiltre);

               
                list($nom, $valeur_max_version) = detection_derniere_version($tableauFiltre);
                $nouvel_indice_version = $valeur_max_version + 1;


                // Supprimer l'entier après "_v"
                $sansEntier = preg_replace('/_v\d+/', '_v', $nom);

                $pathInfo = pathinfo($sansEntier);
                $baseName = $pathInfo['filename'];
                $extension = $pathInfo['extension'];


                $increment_nom_version = $baseName .$nouvel_indice_version ."." .$extension;
                echo "Nouvelle version : " .$increment_nom_version;

                $minSizeKb = 1; // Taille minimale en Ko
                $maxSizeKb = 5; // Taille maximale en Ko
                generateRandomTextFile($increment_nom_version, $minSizeKb, $maxSizeKb);

            }

        }

    }

}

function detection_derniere_version($tableau)
{
    // Initialiser les variables pour garder la chaîne et la valeur maximale
    $chaineMax = null;
    $valeurMax = -1;

    // Parcourir chaque chaîne
    foreach ($tableau as $chaine) 
    {
        // Extraire l'entier après "_v" (si existant)
        if (preg_match('/_v(\d+)/', $chaine, $matches)) 
        {
            $valeur = (int) $matches[1]; // Convertir la correspondance en entier
            // Vérifier si c'est la plus grande valeur
            if ($valeur > $valeurMax)   
            {
                $valeurMax = $valeur;
                $chaineMax = $chaine;
            }
        }
    }

    // Afficher la chaîne avec la valeur maximale
    //echo "La chaîne avec la plus grande valeur est : $chaineMax (valeur : $valeurMax)";

    return [$chaineMax,  $valeurMax];
}

function Fichier_separation_nom_extension($fichier) 
{
    $pathInfo = pathinfo($fichier);
    $base = $pathInfo['filename'];
    $extension = $pathInfo['extension'];
    //echo "Nom du fichier : $baseName\n";
    //echo "Extension : $extension\n";
    return [$base, $extension];
}

function listeFichiersRepertoire($repertoire) 
{
    $liste_fichier_repertoire = [];

    if (is_dir($repertoire)) 
    {
        $fichiers = scandir($repertoire);
        foreach ($fichiers as $fichier) 
        {
            if ($fichier !== '.' && $fichier !== '..') 
            {
                $liste_fichier_repertoire[] = $fichier;
            }
        }
    } 

    return($liste_fichier_repertoire);

}

function generateRandomTextFile($fileName, $minSizeKb, $maxSizeKb) 
{
    // Générer une taille aléatoire entre les limites spécifiées (en octets)
    $fileSize = rand($minSizeKb * 1024, $maxSizeKb * 1024);

    // Caractères possibles pour le contenu aléatoire
    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $charactersLength = strlen($characters);

    // Générer un contenu aléatoire
    $content = '';
    for ($i = 0; $i < $fileSize; $i++) {
        $content .= $characters[rand(0, $charactersLength - 1)];
    }

    // Écrire le contenu dans un fichier
    file_put_contents($fileName, $content);
   
}




$fichier = "capture_IC.txt";
$chemin = "/home/analogde/www/2024_PHP/2024_PHP_25_12_2024/FTP/Monsta-FTP-master/tmp";

// Insérer la chaîne 20 fois
for ($i = 0; $i < 20; $i++) 
{
    insertFileVersion($fichier, $chemin); 
}






?>