PHP Trouver les fichier non utiliser par ma base de donnee
8 messages
• Page 1 sur 1
- willpower
- WRInaute discret

- Messages: 208
- Inscription: 15 Mar 2007
PHP Trouver les fichier non utiliser par ma base de donnee
Hello a tous,
J'essaye d'ecrire un petit script qui m'indiquerait le nom des fichiers image non utiliser par mon site.
J'ai donc une base ou se trouve les infos de mes 3000 items.
Les 2 images que chaque produits devrait avoir son appeler par le numero d'item suivi -01_S.gif et l'autre -01_L.gif
J'ai un dossier images qui lui contients les images. (WOW c'est logiques ca..
)
Voici donc ce que j'ai ecrit:
Mais bon ca maffiche pratiquement tout les fichiers et pourtant certains sont bien dans ma base de donnee.
J'ai surement fait une petite erreur, mais je ne suis pas cappable de la trouver.
Si vous pouvez aider...
Merci
J'essaye d'ecrire un petit script qui m'indiquerait le nom des fichiers image non utiliser par mon site.
J'ai donc une base ou se trouve les infos de mes 3000 items.
Les 2 images que chaque produits devrait avoir son appeler par le numero d'item suivi -01_S.gif et l'autre -01_L.gif
J'ai un dossier images qui lui contients les images. (WOW c'est logiques ca..
Voici donc ce que j'ai ecrit:
- Code: Tout sélectionner
<?php
$resource = mysql_connect(localhost, XXXXXXX, XXXXXXX);
$db = mysql_select_db(XXXXXXXX, $resource)
or die ("Couldn't select database.");
$db;
// open the current directory by opendir
$handle=opendir(".");
while (($file = readdir($handle))!==false) {
$compteS = 0;
$compteL = 0;
$sqqql="SELECT * FROM products";
$answer = mysql_query($sqqql);
while ($answer_data = mysql_fetch_array($answer) )
{
$model = $answer_data['products_model'];
$imageS = "$model-01_S.gif";
$imageL = "$model-01_L.gif";
if ($file!=$imageS)
echo"";
else
$compteS=$compteS+1;
if ($file!=$imageL)
echo"";
else
$compteL=$compteL+1;
}
if ($compteS==0)
echo"Le fichier $file devrait etre supprimer.<br>";
if ($compteL==0)
echo"Le fichier $file devrait etre supprimer.<br>";
}
closedir($handle);
mysql_close($resource2);
echo"fini";
?>
Mais bon ca maffiche pratiquement tout les fichiers et pourtant certains sont bien dans ma base de donnee.
J'ai surement fait une petite erreur, mais je ne suis pas cappable de la trouver.
Si vous pouvez aider...
Merci
- dmathieu
- Modérateur

- Messages: 7244
- Inscription: 9 Jan 2004
Re: PHP Trouver les fichier non utiliser par ma base de donnee
Je n'ai pas regardé en détail ton code. Mais voici comment je procèderai :
La variable unavailable files devrait contenir tous tes fichiers.
Que fait-on ?
On crée un premier tableau contenant tous les tableaux (pour n'avoir besoin de faire qu'un seul accès à la bdd).
Puis on parcours tous les fichiers qui existent et si le fichier n'est pas présent dans le premier tableau, on le place dans le tableau unavailable_files, qui contient alors tous les fichiers non représentés dans la base.
Un NOT IN ne fonctionnera pas car si l'élément n'existe pas en bas, il n'y a de toute façon rien à afficher.
- Code: Tout sélectionner
$query = mysql_query('SELECT product_name FROM product');
$files = array();
$unavailable_files = array();
while ($fetch = mysql_fetch_array($query)) {
$files[] = $fetch['product_name'];
}
if ($handle = opendir('/path/to/files')) {
while (false !== ($file = readdir($handle))) {
if (!in_array($file, $files) $unavailable_files[] = $file;
}
print_r($unavailable_files);
La variable unavailable files devrait contenir tous tes fichiers.
Que fait-on ?
On crée un premier tableau contenant tous les tableaux (pour n'avoir besoin de faire qu'un seul accès à la bdd).
Puis on parcours tous les fichiers qui existent et si le fichier n'est pas présent dans le premier tableau, on le place dans le tableau unavailable_files, qui contient alors tous les fichiers non représentés dans la base.
Un NOT IN ne fonctionnera pas car si l'élément n'existe pas en bas, il n'y a de toute façon rien à afficher.
-

UsagiYojimbo - WRInaute accro

- Messages: 8576
- Inscription: 23 Nov 2005
Re: PHP Trouver les fichier non utiliser par ma base de donnee
Et on pourrait optimiser ça en utilisant glob pour le listage des fichiers contenus dans le répertoire.
- willpower
- WRInaute discret

- Messages: 208
- Inscription: 15 Mar 2007
Re: PHP Trouver les fichier non utiliser par ma base de donnee
kazhar a écrit:Je n'ai pas regardé en détail ton code. Mais voici comment je procèderai :
- Code: Tout sélectionner
$query = mysql_query('SELECT product_name FROM product');
$files = array();
$unavailable_files = array();
while ($fetch = mysql_fetch_array($query)) {
$files[] = $fetch['product_name'];
}
if ($handle = opendir('/path/to/files')) {
while (false !== ($file = readdir($handle))) {
if (!in_array($file, $files) $unavailable_files[] = $file;
}
print_r($unavailable_files);
La variable unavailable files devrait contenir tous tes fichiers.
Que fait-on ?
On crée un premier tableau contenant tous les tableaux (pour n'avoir besoin de faire qu'un seul accès à la bdd).
Puis on parcours tous les fichiers qui existent et si le fichier n'est pas présent dans le premier tableau, on le place dans le tableau unavailable_files, qui contient alors tous les fichiers non représentés dans la base.
Un NOT IN ne fonctionnera pas car si l'élément n'existe pas en bas, il n'y a de toute façon rien à afficher.
Merci...mais...ca ne fonctionne pas..et je ne sais trop pourquoi...
Voici donc le code:
- Code: Tout sélectionner
<?php
$resource2 = mysql_connect(localhost, xxxxx, xxxx);
$db = mysql_select_db(kvd, $resource2)
or die ("Couldn't select database2.");
$db;
$query = mysql_query('SELECT products_model FROM kvd.products');
$files = array();
$unavailable_files = array();
while ($fetch = mysql_fetch_array($query)) {
$files[] = $fetch['products_model'];
}
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
if (!in_array($file, $files)) $unavailable_files[] = $file;
}}
print_r($unavailable_files);
echo "fini";
?>
Ca me liste tout les fichier(meme ceux qui existe dans la bd) en voici une partie:
- Code: Tout sélectionner
Array ( [0] => . [1] => .. [2] => 49SP2.txt [3] => acu.ini [4] => ApolloSQL6.cnt [5] => bbl_upc.dbf [6] => black.gif [7] => bout2.gif [8] => bout3.gif [9] => bout4.gif [10] => boutAER.gif [11] => boutajout.bmp [12] => boutajout.gif [13] => boutCATA.GIF [14] => boutcom.bmp [15] => boutCOM.GIF [16] => boutINFO.GIF [17] => boutleft.bmp [18] => boutleft.gif [19] => boutLOG.GIF [20] => boutmain.bmp [21] => bouton.bmp [22] => boutop.gif [23] => boutop2.gif [24] => bouTPOL.gif [25] => boutPP.gif [26] => bouTRAN.gif [27] => boutSOU.gif [28] => bouTTEK.gif [29] => CD-ROM.txt [30] => ClosedFolder.gif [31] => C_Readme.txt [32] => d13c12.gif [33] => email9c.gif [34] => garan.gif [35] => garant.gif [36] => hiero1.gif [37] => hiero2.gif [38] => hiero3.gif [39] => INST_LOG.TXT [40] => left.gif [41] => License.txt [42] => logo.jpg [43] => mail.gif [44] => mainback.gif [45] => MATUPC.DBF [46] => menularg.bmp [47] => menumed.bmp [48] => menutop.GIF [49] => menutopl.GIF [50] => menutopr.GIF [51] => Minus.gif [52] => OEMSort.txt [53] => OpenFolder.gif [54] => p12c05.gif [55] => p12c13.gif [56] => Page.gif [57] => pageprbu.bmp [58] => pilier.gif [59] => Plus.gif [60] => Sample.jpg [61] => smart.gif [62] => sql.txt [63] => tekbar.gif [64] => TGIFImgB.gif [65] => top.gif [66] => TreeBlank.gif [67] => untitled.bmp [68] => 0101110-01_L.gif [69] => 8725113-01_S.gif [70] => 8725113-01_L.gif [71] => 8720129-01_S.gif [72] => 8720129-01_L.gif [73] => 8709129-01_S.gif [74] => 8709129-01_L.gif [75] => 8709114-01_S.gif [76] => 8709114-01_L.gif [77] => 8707114-01_S.gif [78] => 8707114-01_L.gif [79] => 8702128-01_S.gif [80] => 8702128-01_L.gif [81] => 870060-01_S.gif [82] => 870060-01_L.gif [83] => 72302-01_S.gif [84] => 72302-01_L.gif [85] => 5120129-01_S.gif [86] => 5120129-01_L.gif [87] => 51160-01_S.gif [88] => 51160-01_L.gif [89] => 51150-01_S.gif [90] => 51150-01_L.gif [91] => 0103110-01_L.gif [92] => 0103110-01_S.gif [93] => 0103204-01_L.gif [94] => 0103204-01_S.gif [95] => 0103205-01_L.gif [96] => 0103205-01_S.gif [97] => 0103309-01_L.gif [98] => 0103309-01_S.gif [99] => 0103317-01_L.gif [100] => 0103317-01_S.gif [101] => 0103320-01_L.gif [102] => 0103320-01_S.gif [103] => 0103382-01_L.gif [104] => 0103382-01_S.gif [105] => 0104205-01_L.gif [106] => 0104206-01_L.gif [107] => 0104212-01_L.gif [108] => 0104318-01_L.gif [109] => 0104321-01_L.gif [110] => 0104322-01_L.gif [111] => 0105110-01_L.gif [112] => 0105217-01_L.gif [113] =>
Autre suggestions?
-

KOogar - WRInaute accro

- Messages: 3974
- Inscription: 16 Nov 2004
Re: PHP Trouver les fichier non utiliser par ma base de donnee
donne une limite pour voir ce qui se passe sur quelques elements
$query = mysql_query('SELECT products_model FROM kvd.products LIMIT 50');
ensuite fait un print de tes 2 tableaux et compare les
print_r($unavailable_files);
print_r($files);
ca peut venir d'une probleme de majuscule, ou tu as peut-etre oublié un caractere, un espace en trop...
$query = mysql_query('SELECT products_model FROM kvd.products LIMIT 50');
ensuite fait un print de tes 2 tableaux et compare les
print_r($unavailable_files);
print_r($files);
ca peut venir d'une probleme de majuscule, ou tu as peut-etre oublié un caractere, un espace en trop...
-

ortolojf - WRInaute passionné

- Messages: 1674
- Inscription: 14 Aoû 2002
Re: PHP Trouver les fichier non utiliser par ma base de donnee
Bonjour
Je pense... que manifestement le point faible du code, est le procédé utilisé pour identifier les fichiers, en comparant leur noms les uns aux autres.
En d'autres termes, il semblerait que l'instruction if(!in_array($files, $file)) rende toujours true, ce qui indique que les éléments comparés ( == les noms des deux fichiers comparés ) ne sont jamais égaux.
Je serais toi, je ferais une trace du code, en affichant chacuns des noms des deux fichiers comparés en réel, histoire de savoir exactement quels sont les éléments comparés, et où cloche la comparaison.
Problème classique en matière de débuggage de programme...
Peut-être, que le problème serait résolu, en passant chacun des deux noms des fichiers comparés, par la fonction basename() qui rend le nom du fichier sans son chemin, et puis aussi, pour les éléments rendus par la base de données, de bonnes fonctions stripslashes(), car le passage dans la base de données rajoute peut-être des caractère backslash ( \ ) sans que tu le sache.
Evidemment, celà donnerait un problème de ce type:
Au moment de l'affectation de l'array $files :
$files[] = basename(stripslashes($fetch['products_mode']));
Au moment de la lecture du répertoire :
while (false !== ($file = basename(readdir($handle)))) {
}
Il n'y a pas besoin de stripslashes pour la lecture du répertoire, ce n'est pas une bdd.
Bien à vous.
Amicalement.
Jean-François Ortolo
Je pense... que manifestement le point faible du code, est le procédé utilisé pour identifier les fichiers, en comparant leur noms les uns aux autres.
En d'autres termes, il semblerait que l'instruction if(!in_array($files, $file)) rende toujours true, ce qui indique que les éléments comparés ( == les noms des deux fichiers comparés ) ne sont jamais égaux.
Je serais toi, je ferais une trace du code, en affichant chacuns des noms des deux fichiers comparés en réel, histoire de savoir exactement quels sont les éléments comparés, et où cloche la comparaison.
Problème classique en matière de débuggage de programme...
Peut-être, que le problème serait résolu, en passant chacun des deux noms des fichiers comparés, par la fonction basename() qui rend le nom du fichier sans son chemin, et puis aussi, pour les éléments rendus par la base de données, de bonnes fonctions stripslashes(), car le passage dans la base de données rajoute peut-être des caractère backslash ( \ ) sans que tu le sache.
Evidemment, celà donnerait un problème de ce type:
Au moment de l'affectation de l'array $files :
$files[] = basename(stripslashes($fetch['products_mode']));
Au moment de la lecture du répertoire :
while (false !== ($file = basename(readdir($handle)))) {
}
Il n'y a pas besoin de stripslashes pour la lecture du répertoire, ce n'est pas une bdd.
Bien à vous.
Amicalement.
Jean-François Ortolo
Dernière édition par ortolojf le Mer Juil 15, 2009 10:45, édité 1 fois.
-

ortolojf - WRInaute passionné

- Messages: 1674
- Inscription: 14 Aoû 2002
Re: PHP Trouver les fichier non utiliser par ma base de donnee
J'ajoute...
que le code initial est meilleur que celui suggéré après, qui implique une mémorisation dans deux arrays au lieu d'une, donc deux fois plus d'occupation mémoire ( à peu près ).
Le code initial est aussi plus simple, ce qui a ma préférence, heu heu...
Bien à vous.
Amicalement.
Jean-François Ortolo
que le code initial est meilleur que celui suggéré après, qui implique une mémorisation dans deux arrays au lieu d'une, donc deux fois plus d'occupation mémoire ( à peu près ).
Le code initial est aussi plus simple, ce qui a ma préférence, heu heu...
Bien à vous.
Amicalement.
Jean-François Ortolo
8 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- transfert fichier csv vers base de donnée.
- convertir un fichier excel vers base de donnée mysql
- Transformer une base de donnée excel en base de donnée mysql
- Communication PHP <-> base de donnée
- Blinder sa base de donnée en php...
- Question PHP et base de donnée
- Page profil PHP base de donnée
- Php : fonction glob() ou base de donnée ou...
- Base de donnée et vidage de panier en php ;-)
- probleme recuparation resultat base de donnee avec php
- Importer tout son blog dans Google Base - 21-11-2005
- Yahoo Audio Search - 05-08-2005
- Article sur le fichier .htaccess - 11-01-2003
- Redirection (PHP, JavaScript, serveur...) - 04-07-2003
- Google indexe le Flash - 28-04-2004
- Chercher des fichiers KML dans Google Earth - 15-02-2007
- Déclarer son fichier sitemap dans le fichier robots.txt - 16-04-2007
- Google API : guide de développement de l'API Google - 20-09-2002
Consultez la description détaillée des produits ou services de Google suivants : Google Base, Google Ride Finder
- Suggestions de mots-clés
Cet outil vous fournit une liste de mots sémantiquement proches du mot que vous fournissez en entrée. Il peut servir à vous donner des idées de mots à utiliser sur vos pages, voire de contenus à ajouter. - Test du code HTTP d'une page
Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée. - Suggestions Google Suggest
Cet outil vous permet d'obtenir une liste de 10 mots ou expressions suggérés par Google sur la base d'un mot que vous fournissez.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

