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);
}
?>