osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Script pour effacer les images non utilisé
CyberSpiritual
posté 20 Aug 2009, 03:18
Message #1


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 91
Inscrit : 9-May 03
Lieu : Quebec CANADA
Membre no 1137



Hello a tous,

J'essaye d'ecrire un petit script qui m'indiquerait le nom des fichiers image non utiliser par ma boutique.

J'ai donc une base ou se trouve les infos de mes 3000 items.

Jutilise 2 images par item.
Les 2 images que chaque produits son appeler par le numero d'item suivi de -01_S.gif et l'autre -01_L.gif


Voici donc ce que j'ai ecrit:
Code
code supprimé


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
Raison de l'édition : code supprimé


--------------------
Will - oscommerce-2.2rc2a
Go to the top of the page
 
Gnidhal
posté 20 Aug 2009, 08:57
Message #2


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



je ne sais pas comment est constitué ta bdd ni ton dossier images mais je pense que la méthode n'est pas bonne.

Perso je ferai un array de tous les fichiers image du dossier = $files_image
puis un array de toutes les images contenues dans la table products = $products_image
et une comparaison des deux avec un foreach :
foreach ($files_image as $image){
if ($image !in_array($products_image)) echo $image.'<br>';
}
tu pourrais même te permettre de vérifier que toutes les images des produits sont bien des fichiers en faisant l'inverse.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
greuter
posté 20 Aug 2009, 09:18
Message #3


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1034
Inscrit : 16-December 02
Lieu : Est
Membre no 669



Bonjour,

Il existe aussi des contribs,
notamment
arrow.gif Remove Unused Images
Go to the top of the page
 
Gnidhal
posté 20 Aug 2009, 09:39
Message #4


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Cool ça Greuter, je ne la connaissais pas ! smile.gif
elle marche très bien !


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
med
posté 20 Aug 2009, 15:16
Message #5


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 69
Inscrit : 4-March 08
Lieu : Everywhere
Membre no 21032



je confirme ca marche du tonnerre
Go to the top of the page
 
audioshop
posté 20 Aug 2009, 19:20
Message #6


Ceinture bleue OSC
Icône de groupe

Groupe : Membres
Messages : 983
Inscrit : 8-April 08
Lieu : strasbourg
Membre no 21429



Pourriez-vous nous dire quel version avez-vous utilisé s'il vous plais?

cordialement
Go to the top of the page
 
CyberSpiritual
posté 20 Aug 2009, 22:26
Message #7


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 91
Inscrit : 9-May 03
Lieu : Quebec CANADA
Membre no 1137



J'ai une question est ce que cette contrib efface automatiquement les fichiers ou donne t-elle un choix?


--------------------
Will - oscommerce-2.2rc2a
Go to the top of the page
 
Gnidhal
posté 20 Aug 2009, 22:43
Message #8


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Elle efface toute ta base de données et va s'auto-détruire après.
L'as-tu téléchargée ? Au passage pour audioshop55 j'ai pris la dernière version, au hasard.
Ouvert le fichier et regardé ce qu'elle faisait puis copié le script en local dans admin. (c'est la seule chose à faire pour tester)
Ce que chacun devrait faire lors de la découverte d'une nouvelle contribution surtout quand elle est aussi light que ça.
Le read-me rédigé par l'auteur, Azer, est assez clair :
Citation
Scenario: I have 9000 image files. 2400 of them are not being used.
How to find them and remove them quickly and safely.
This script does just that.

Here is the full script, read it for more details.
Just copy it and run it in the admin root

What this script does:
* Read the database and report back a list of installed images
* Mark (in RED) any DB listed image which does not exist on the server
* Read the server images and report back a list
* Compare the lists for missing data
* Offer you the ability to check or uncheck listed images controlling what gets renamed
* Rename the USER checked listed images from myimage.jpg to #UNUSED_myimage.jpg
* Allow you to ftp and delete ALL renamed #UNUSED_myimage.jpg images

Dites les gars, vous voulez quoi en plus du lien vers cette contrib ?
Qu'on la teste pour vous ? Qu'on vous traduise le read-me ?
faudrait peut-être revenir dans le monde où vous vivez ! Pour la traduc, c'est par là : http://translate.google.com/translate_t?hl...l=en&tl=fr#
Allez, au boulot!


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
greuter
posté 21 Aug 2009, 06:43
Message #9


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1034
Inscrit : 16-December 02
Lieu : Est
Membre no 669



Bonjour,

Citation
Scénario: vous avez 9000 images, 2400 d'entre elles ne sont plus utilisées.
Comment déceler celles qui ne sont pas utilisées et les supprimer de façon sûre et rapide?

Gestion, détermination et effacement des images inutilisées
Remove Unused Images

Que fait cette contribution:
* Elle lit la base de données et établit une liste des images installées.
* Elle marque alors (en ROUGE) les images de cette liste qui sont inexistantes sur le serveur.
* Elle fait ensuite une liste des images/fichiers présents sur le serveur.
* Elle compare les deux listes et détermine les élément supplémentaires ou manquants.
* Elle offre la possibilité de choisir et cocher les éléments qui seront renommés par la suite.
* Elle renomme ensuite les fichiers CHOISIS PAR l'UTILISATEUR (monimage.jpg devient UNUSED_monimage.jpg).
* Elle vous permet par ce biais d'effacer en UNE FOIS (par FTP) toutes les images choisies et inutilisées commençant par UNUSED_monimage.jpg.


arrow.gif Les Contributions
Go to the top of the page
 
xaglo
posté 21 Aug 2009, 09:29
Message #10


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 14913
Inscrit : 22-November 02
Membre no 610



je confirme que ce script est super...[edit: pas si super que ça... voir messages ci dessous]
Il est simple, efficace et facile à adapter à sa configuration perso (contributions multi images)
Avant de le lancer donc, j'ai modifié deux choses dans les "ADDITIONAL OPTIONS" en début de script:
j'ai ajouté le nom de la table products_bimage pour la contribution big_image que j'utilise:
Code
// to add more tables use ex: $table_array = array("products_image","products_image_med");
// see below for possible image names
  $table_array = array("products_image", "products_bimage");


Et j'ai commenté la ligne supprimant les images des aticles désactivées!!! Pour mon utilisation, ce n'est pas parce qu'un article est désactivé momentanément qu'il faut supprimer son image!
Citation
get image info if the product status is on only example query:
$optional_sql = " where p.products_status = '1'";
*/
$optional_sql = ""; // supprimé " where p.products_status = '1'"


A part ça, rien à dire, c'est propre, sécure, simplissime... bref c'est adopté


--------------------
Ni Hot-line ni Service Après Vente, ces forums sont un lieu d'échanges.
Une Question? Rechercher / FAQ / docV1.pdf / docV2.pdf / contributions
Go to the top of the page
 
xaglo
posté 21 Aug 2009, 09:52
Message #11


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 14913
Inscrit : 22-November 02
Membre no 610



oops, un petit défaut pour mon install... les images des catégories sont supprimées!!! je creuse et vous dis...


--------------------
Ni Hot-line ni Service Après Vente, ces forums sont un lieu d'échanges.
Une Question? Rechercher / FAQ / docV1.pdf / docV2.pdf / contributions
Go to the top of the page
 
xaglo
posté 21 Aug 2009, 10:50
Message #12


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 14913
Inscrit : 22-November 02
Membre no 610



Après mon engouement trop rapide du premier test, il me semble pas super bien fini ce script
sans parler de son langage peu "OsC" et utilisant peu les fonctions d'OsC existantes, rendant les modifications lourdes et un peu complexes, j'ai du mal à comprendre toutes ses logiques:
1- c'est clair qu'il faudrait prendre en compte les images des catégories
2- pourquoi avoir limité son action sur les jpg... on n'a plus le droit de travailler avec des gifs ou des png???

Bref, je crois qu'il peut y avoir un peu beaucoup de boulot pour l'adapter chacun à ses besoins spécifiques... L'idée est super bonne, mais il faudrait le réécrire complètement pour nettoyer les ajouts de chacun et le rendre plus accessible à tous

je ne sais si j'aurai le courage blush.gif


--------------------
Ni Hot-line ni Service Après Vente, ces forums sont un lieu d'échanges.
Une Question? Rechercher / FAQ / docV1.pdf / docV2.pdf / contributions
Go to the top of the page
 
xaglo
posté 21 Aug 2009, 11:55
Message #13


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 14913
Inscrit : 22-November 02
Membre no 610



Bon, ben je confirme que je laisse tomber... En fait, le dossier "images" est plein d'images sans rapport avec les produits (stars_, store_logo, ...) et différents pictos... Sans compter tous les ajouts que chacun à pu faire dans ce dossier foutoir
C'est peut-être pour cela que azer n'avait pas pris en compte les gif et les png... pour contourner le problème unsure.gif

C'est clair qu'osc a un défaut de structure même de ses répertoires. Les images de fonctionnement des pages ne devraient pas être mélangées aux images produits. Il faudrait donc modifier ce fonctionnement structurel pour que cette contribution devienne intéressante... perso, sauf idée géniale de l'un d'entre vous, je laisse tomber, à vous les studios.

PS. Je vous laisse là où j'en étais du travail de nettoyage de ce script ici (clic droit, save as puis renommer en .php) des fois que ça puisse servir à quelqu'un.

Au boulot wink.gif

Ce message a été modifié par xaglo - 21 Aug 2009, 13:23.
Raison de l'édition : modification du lien


--------------------
Ni Hot-line ni Service Après Vente, ces forums sont un lieu d'échanges.
Une Question? Rechercher / FAQ / docV1.pdf / docV2.pdf / contributions
Go to the top of the page
 
audioshop
posté 21 Aug 2009, 12:07
Message #14


Ceinture bleue OSC
Icône de groupe

Groupe : Membres
Messages : 983
Inscrit : 8-April 08
Lieu : strasbourg
Membre no 21429



Pareil pour moi après avoir testé l'install et fais la traduction cette contrib n'est pas du tout adapté à mon installation d'oscommerce.

xaglo=> Concernant la structure et la gestion des images d'oscommerce, pense tu qu'il serais difficile de mettre un peut d'ordre la dedans et qu'il faudrais modifier beaucoup de fichier?

Parce que c'est vrai que c'est le bordel dans ce dossier et que ranger tous sa ne ferais pas de mal.

PS: ton fichier fais 0 octets chez moi huh.gif huh.gif

Ce message a été modifié par audioshop55 - 21 Aug 2009, 12:17.
Go to the top of the page
 
xaglo
posté 21 Aug 2009, 12:32
Message #15


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 14913
Inscrit : 22-November 02
Membre no 610



pas forcement très complexe en code, mais ça obligerait à toucher la structure même de fonctionnement du logiciel. il faut donc prendre le temps de réfléchir pour le faire intelligemment!!! Et alors ta boutique s'apparenterait à un fork, tout ajout de contributions serait à adapter et complexifié... à voir... mrgreen.gif
Est-ce bien grave que ce soit le bordel dans le dossier images??? laugh.gif

pour le lien, c'est corrigé, le site n'autorise pas à télécharger un fichier php (heureusement!!!!) je l'ai passé en .txt


--------------------
Ni Hot-line ni Service Après Vente, ces forums sont un lieu d'échanges.
Une Question? Rechercher / FAQ / docV1.pdf / docV2.pdf / contributions
Go to the top of the page
 
CyberSpiritual
posté 21 Aug 2009, 18:43
Message #16


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 91
Inscrit : 9-May 03
Lieu : Quebec CANADA
Membre no 1137



Parreil pour moi...l'idee est bonne, mais ce n'est pas complet et je crois que tant qu'a la modifier, vaudrait mieux recommencer du debut.

Aillant une boutique assez modifier, je crains que je puisse en faire une contrib si jamais je me decide a vouloir faire de quelques choses..

En tout cas..bonne chance!


--------------------
Will - oscommerce-2.2rc2a
Go to the top of the page
 
Gnidhal
posté 22 Aug 2009, 11:08
Message #17


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Donc,
en partant de l'idée, voici les rudiments d'un script qui liste toutes les images non utilisées dans la bdd.
Il faudra l'aménager et éventuellement le compléter selon vos images et bdd (notamment si vous avez plusieurs images par produit).
Ce script est rudimentaire et se contente de faire une liste, il n'y a donc aucune action destructive de quelque ordre que ce soit.
à placer dans le dossier admin .
Code
<?php

/*
  $Id: list_images.php,v 0.1 22/08/2009 10:58:30 gnidhal Exp $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2003 osCommerce

  Released under the GNU General Public License
*/

  require('includes/application_top.php');
  
  
    $contents = array();
    function list_existents_files($dir){
      global $contents;
      // on liste les images de structure pour les écarter de la liste des images produit et catégories.
      //Compléter la liste si nécessaire avec le début du nom de fichier (y compris le sous-dossier depuis images/)
      $images_system_array = array("pixel_", // pixel_trans etc.
                                   "stars_", // les étoiles
                                   "table_background_", // les imagettes table_background
                                   "icons/", // le dossier icons
                                   "infobox/", //le dossier infobox avec ses pictos
                                   "default/", //le dossier default
                                   "account_", // les picto de account_history
                                   "arrow_",  // les flèches de direction
                                   "box_", // les éléments de box
                                   "header_", // les éléments de header
                                   "store_logo", // le logo par défaut
                                   "mail/", // le dossier mail
                                   "checkout_bullet", // la puce de suivi de conclusion de commande
                                   "_thumbs/" // le dossier de miniatures si vous utilisez  auto_thumbnailers
                                   );
      $read_dir = opendir($dir);
      while ($file = readdir($read_dir)) {
        if ( ($file != '.') && ($file != 'CVS') &&  ($file != '..')  ) { // on élimine les sous dossiers et éventuellement tout ce qui est CVS
           $full_dir_file = preg_replace('@//@', '/',$dir . '/' . $file); // on élimine les / en double dans les chemins image
           if (is_dir($full_dir_file)) { //si c'est un sous-dossier
            list_existents_files($full_dir_file); // on ajoute son contenu
           }else{
             $short_dir_file = preg_replace('@'.DIR_FS_CATALOG_IMAGES.'@', '', $full_dir_file ); // nettoyage du chemin complet pour ne garder que l'image avec son chemin propre
             $masque ='';
             foreach($images_system_array as $prefix){ // pour chaque occurence  des images à écarter
               $masque .= '('.str_replace('/','\/',$prefix).')|';// concatenation des exception dans le masque
             }
             $masque ='^('.trim($masque,'|').')(.*)$'; //mise en forme du masque d'exception
             if (!preg_match("/$masque/", $short_dir_file)&& preg_match("/(gif|jpg|png|jpeg)$/i", $short_dir_file))$contents[] = $short_dir_file; //on ajoute le nom de l'image qui correspond aux masques dans la liste
           }
        }
      }// fin while
      return $contents;
    }
    
    
    $list_images_files = list_existents_files(DIR_FS_CATALOG_IMAGES);
    
    echo count($list_images_files) . " fichiers images trouvés<br>";
    
    // liste des images en bdd
    $list_images_bdd = array();
    $categories_images_query = tep_db_query("select categories_image as img from ".TABLE_CATEGORIES." ");
    $products_images_query = tep_db_query("select products_image as img from ".TABLE_PRODUCTS." ");
    $manufacturers_images_query = tep_db_query("select manufacturers_image as img from ".TABLE_MANUFACTURERS." ");
    $banners_images_query = tep_db_query("select banners_image as img from ".TABLE_BANNERS." ");
    
    while ($imgs = tep_db_fetch_array($categories_images_query)){
      if(tep_not_null($imgs['img'])) {
       $list_images_bdd[] = $imgs['img'];
      }
    }
    while ($imgs = tep_db_fetch_array($products_images_query)){
      if(tep_not_null($imgs['img'])) {
       $list_images_bdd[] = $imgs['img'];
      }
    }
    while ($imgs = tep_db_fetch_array($manufacturers_images_query)){
      if(tep_not_null($imgs['img'])) {
       $list_images_bdd[] = $imgs['img'];
      }
    }
    while ($imgs = tep_db_fetch_array($banners_images_query)){
      if(tep_not_null($imgs['img'])) {
       $list_images_bdd[] = $imgs['img'];
      }
    }
    echo count($list_images_bdd) . " images trouvées en bdd<br>";
    
    // vérification des images sur disque en bdd
    $unused_img = array();
    foreach($list_images_files as $img_file){
      if (!in_array($img_file,$list_images_bdd)) $unused_img[]=$img_file;
    }
    echo count($unused_img) . " images non utilisées<br>";
    
echo '<pre>';
    var_dump($unused_img);
echo '</pre>';


  require('includes/application_bottom.php');
?>

ce script permet de filtrer les dossiers ou images à ne pas prendre en compte dans la liste et ne liste que les fichiers avec les extensions jpg, gif,png et jpeg
Regardez les commentaires dans le code wink.gif
il ne tient pas compte non plus des images absentes (dans la bdd mais pas sur le disque) ça pourrait être une extension.

La liste est affichée en fin avec un var_dump. A vous de voir si ce procédé peut vous être utile pour poursuivre le développement.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
sykaflex
posté 22 Aug 2009, 14:29
Message #18


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1333
Inscrit : 12-July 08
Lieu : La Graciosa, Canarias
Membre no 22434



Citation (xaglo @ 21 Aug 2009, 13:32) *
Est-ce bien grave que ce soit le bordel dans le dossier images??? laugh.gif
"petit scarabée Xaglo", apprend que Chuck Norris n'abandonne jamais ! il frotte sa lampe magique et son "Gnidhal" apparait et fait le script wink.gif


--------------------
entre chats : chat affamé cherche chat pelure pour faire sauter chat perché dans poil de chat (allergiques s'abstenir)

ah oui ... osCommerce v2.2 RC1 french by Delaballe "merci à lui" - PHP version 4.4.8 - mysql5-41 - OVH 240Plan - contribs : (entre autre) AJAX-AttributeManager-V2.8.2 - Limit_Countries - Multi-Product Update v1.00 - Quick Updates 2.7 - Individual Product Shipping Prices - v1_0 - Attribute Qty Product Info - user_tracking_1 - Visitor Web Stats 3.2.1 - Sort Order - image_subdirectories - master password v1.4 - virementbancaire1.4 - Welcome_Email_password ...
"et grand merci à tous les contributionneurs"
Go to the top of the page
 
Gnidhal
posté 22 Aug 2009, 17:14
Message #19


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Citation (sykaflex @ 22 Aug 2009, 15:29) *
il frotte sa lampe magique et son "Gnidhal" apparait et fait le script wink.gif

Wai bin faut arrêter de frotter, ça va fumer!
script incomplet mais compatible partie admin avec la mise en page :
Code
<?php

/*
  $Id: list_images.php,v 0.1 22/08/2009 10:58:30 gnidhal Exp $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2003 osCommerce

  Released under the GNU General Public License
*/

  require('includes/application_top.php');
  
  
    $contents = array();
    function list_existents_files($dir){
      global $contents;
      // on liste les images de structure pour les écarter de la liste des images produit et catégories.
      //Compléter la liste si nécessaire avec le début du nom de fichier (y compris le sous-dossier depuis images/)
      $images_system_array = array("pixel_", // pixel_trans etc.
                                   "stars_", // les étoiles
                                   "table_background_", // les imagettes table_background
                                   "icons/", // le dossier icons
                                   "infobox/", //le dossier infobox avec ses pictos
                                   "default/", //le dossier default
                                   "account_", // les picto de account_history
                                   "arrow_",  // les flèches de direction
                                   "box_", // les éléments de box
                                   "header_", // les éléments de header
                                   "store_logo", // le logo par défaut
                                   "mail/", // le dossier mail
                                   "checkout_bullet", // la puce de suivi de conclusion de commande
                                   "_thumbs/" // le dossier de miniatures si vous utilisez  auto_thumbnailers
                                   );
      $read_dir = opendir($dir);
      while ($file = readdir($read_dir)) {
        if ( ($file != '.') && ($file != 'CVS') &&  ($file != '..')  ) { // on élimine les sous dossiers et éventuellement tout ce qui est CVS
           $full_dir_file = preg_replace('@//@', '/',$dir . '/' . $file); // on élimine les / en double dans les chemins image
           if (is_dir($full_dir_file)) { //si c'est un sous-dossier
            list_existents_files($full_dir_file); // on ajoute son contenu
           }else{
             $short_dir_file = preg_replace('@'.DIR_FS_CATALOG_IMAGES.'@', '', $full_dir_file ); // nettoyage du chemin complet pour ne garder que l'image avec son chemin propre
             $masque ='';
             foreach($images_system_array as $prefix){ // pour chaque occurence  des images à écarter
               $masque .= '('.str_replace('/','\/',$prefix).')|';// concatenation des exception dans le masque
             }
             $masque ='^('.trim($masque,'|').')(.*)$'; //mise en forme du masque d'exception
             if (!preg_match("/$masque/", $short_dir_file)&& preg_match("/(gif|jpg|png|jpeg)$/i", $short_dir_file))$contents[] = $short_dir_file; //on ajoute le nom de l'image qui correspond aux masques dans la liste
           }
        }
      }// fin while
      return $contents;
    }
    
    
    $list_images_files = list_existents_files(DIR_FS_CATALOG_IMAGES);
    
    
    // liste des images en bdd
    $list_images_bdd = array();
    $categories_images_query = tep_db_query("select categories_image as img from ".TABLE_CATEGORIES." ");
    $products_images_query = tep_db_query("select products_image as img from ".TABLE_PRODUCTS." ");
    $manufacturers_images_query = tep_db_query("select manufacturers_image as img from ".TABLE_MANUFACTURERS." ");
    $banners_images_query = tep_db_query("select banners_image as img from ".TABLE_BANNERS." ");
    
    while ($imgs = tep_db_fetch_array($categories_images_query)){
      if(tep_not_null($imgs['img'])) {
       $list_images_bdd[] = $imgs['img'];
      }
    }
    while ($imgs = tep_db_fetch_array($products_images_query)){
      if(tep_not_null($imgs['img'])) {
       $list_images_bdd[] = $imgs['img'];
      }
    }
    while ($imgs = tep_db_fetch_array($manufacturers_images_query)){
      if(tep_not_null($imgs['img'])) {
       $list_images_bdd[] = $imgs['img'];
      }
    }
    while ($imgs = tep_db_fetch_array($banners_images_query)){
      if(tep_not_null($imgs['img'])) {
       $list_images_bdd[] = $imgs['img'];
      }
    }
    
    
    // vérification des images sur disque en bdd
    $unused_img = array();
    foreach($list_images_files as $img_file){
      if (!in_array($img_file,$list_images_bdd)) $unused_img[]=$img_file;
    }
    
//echo '<pre>';
//    var_dump($unused_img);
//echo '</pre>';
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<script type="text/javascript" src="includes/general.js"></script>
<script type="text/javascript" LANGUAGE="JavaScript">
function PopupImage(img,larg,haut) {
    var largeur = 30+larg
    var hauteur = haut + 30
    w=open("",'image','weigth=toolbar=no,scrollbars=yes,resizable=yes, width='+largeur+', height='+hauteur+',screenX=150,screenY=150,top=150,left=150 ')    
    w.document.write("<HTML><BODY onblur=\"window.close();\"><IMG src='<?php echo DIR_WS_CATALOG_IMAGES;?>"+img+"'>")
    
    w.document.write("</BODY></HTML>")
    w.document.close()
}
</script>
</head>
<body>
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" summary="" width="100%" cellspacing="2" cellpadding="2">
  <tr>
    <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" summary="" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
    </table></td>
<!-- body_text //-->
    <td width="100%" valign="top">
      <table border="0" summary="" width="100%" cellspacing="0" cellpadding="2">
      <tr>
        <td><table border="0" summary="" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td class="pageHeading"><?php echo 'suppression des images inutilisées'; ?></td>
            <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><table border="0" summary="" width="100%" cellspacing="0" cellpadding="0">
          <tr>
           <td class="main"><?php echo count($list_images_files) . " fichiers images trouvés";?></td>
          </tr>
          <tr>
           <td class="main"><?php echo count($list_images_bdd) . " images trouvées en bdd";?></td>
          </tr>
          <tr>
           <td class="main"><?php echo count($unused_img) . " images non utilisées";?></td>
          <tr>
          </table>
        </td>
        </tr>
        <tr>
        <td><table border="0" summary="" width="100%" cellspacing="0" cellpadding="2">
          <tr class="dataTableHeadingRow">
                <td class="dataTableHeadingContent">&nbsp;</td>
                <td class="dataTableHeadingContent">Nom de l'image</td>
                <td class="dataTableHeadingContent">chemin complet</td>
                <td class="dataTableHeadingContent">Afficher</td>
                <td class="dataTableHeadingContent">Supprimer</td>
          </tr>
          <?php
          $count = 0;
            foreach($unused_img as $filename){
              $count++;
              echo '<tr class="dataTableRow" >' . "\n";
              echo '<td class="dataTableContent" align="right" ><a name="'.$count.'">'.$count.'</a></td>';
              echo '<td class="dataTableContent">'.$filename.'</td>';
              echo '<td class="dataTableContent">'.DIR_FS_CATALOG_IMAGES.$filename.'</td>';
              $size = getimagesize(DIR_FS_CATALOG_IMAGES.$filename);
  //            echo '<td class="dataTableContent">'.tep_image(DIR_WS_CATALOG_IMAGES . $filename, DIR_WS_CATALOG_IMAGES . $filename, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT).'</td>';
              echo '<td class="dataTableContent"><a href="java script:PopupImage(\''. $filename.'\','.$size[0].','.$size[1].')">'.tep_image(DIR_WS_IMAGES.'icon_info.gif', 'Voir').'</a></td>';
              echo '<td class="dataTableContent"><a href="#'.$count.'">'.tep_image(DIR_WS_ICONS.'cross.gif', 'supprimer').'</a></td>';
              echo '</tr>';
            }
          
          
          ?>
          </table>
        </tr>
      </tr>
      </table>
    </td>
<?php
  if ( (tep_not_null($heading)) && (tep_not_null($contents)) ) {
    echo '            <td width="25%" valign="top">' . "\n";

    $box = new box;
    echo $box->infoBox($heading, $contents);

    echo '            </td>' . "\n";
  }
?>
          </tr>
        </table></td>
      </tr>
    </table></td>
<!-- body_text_eof //-->
  </tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

reste plus qu'à faire un script pour dégager les images mais là j'hésite entre popup et ajax.
Pour rester full compatible, ça sera peut-être un popup wink.gif
attention j'ai testé en local avec 4000 images trouvées sur disque dont 2000 images non référencées en bdd. C'est lourdingue mais ça tourne.
Faudra penser à optimiser le code wink.gif

(au passage, je développe pour moi et je partage wink.gif )


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
Gnidhal
posté 22 Aug 2009, 20:27
Message #20


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Tiens, je vais arrêter là pour le moment.
Il se trouve que ce script ne prend pas en compte les images insérées dans les descriptions produit.
Mais là, ça devient très lourd de scanner toutes les descriptions à la recherche d'images dans les textes surtout si le catalogue contient plus d'un milliers d'articles.
il faut une requête sql pour chaque image trouvée sans correspondance dans un champ image.
Si ça peut marcher pour un petit catalogue, il faut que j'optimise pour les grosses boutiques.

ça se réfléchit donc.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
demoalt
posté 24 Aug 2009, 10:04
Message #21


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 131
Inscrit : 10-April 05
Membre no 5450



en effet, faudrait extraire pratiquement du site toutes les images utilisées + celles indiquées dans les descriptifs et les différents modules... (à la fois texte + sql) bref faudrait pratiquement scanner tout les fichiers d'oscommerce + qqs tables de la BD + contribs pour s'assurer qu'on ne détruit pas un fichier utilisé.

si vous trouvez la solution, partagez! curieux d'en connaitre les tenants et aboutissants!

Ce message a été modifié par demoalt - 24 Aug 2009, 10:05.
Go to the top of the page
 
xaglo
posté 24 Aug 2009, 20:12
Message #22


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 14913
Inscrit : 22-November 02
Membre no 610



perso je n'utilise pas d'image supplémentaire dans les descriptions articles, je me contente donc d'utiliser le script que je laissais ici
et je pense y ajouter à terme un petit array() des images présentes de façon définitive (icones, logos...) pourquoi se compliquer la vie wink.gif


--------------------
Ni Hot-line ni Service Après Vente, ces forums sont un lieu d'échanges.
Une Question? Rechercher / FAQ / docV1.pdf / docV2.pdf / contributions
Go to the top of the page
 
xaglo
posté 24 Aug 2009, 20:57
Message #23


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 14913
Inscrit : 22-November 02
Membre no 610



Citation (xaglo @ 24 Aug 2009, 21:12) *
je pense y ajouter à terme un petit array() des images présentes de façon définitive (icones, logos...)
D'ailleurs, Gnidhal l'a déjà fait dans son script...
Code
      $images_system_array = array("pixel_", // pixel_trans etc.
                                   "stars_", // les étoiles
                                   "table_background_", // les imagettes table_background
                                   "icons/", // le dossier icons
                                   "infobox/", //le dossier infobox avec ses pictos
                                   "default/", //le dossier default
                                   "account_", // les picto de account_history
                                   "arrow_",  // les flèches de direction
                                   "box_", // les éléments de box
                                   "header_", // les éléments de header
                                   "store_logo", // le logo par défaut
                                   "mail/", // le dossier mail
                                   "checkout_bullet", // la puce de suivi de conclusion de commande
                                   "_thumbs/" // le dossier de miniatures si vous utilisez  auto_thumbnailers
                                   );

et hop!

j'ai regardé rapidement ton script Gnidhal. Il ne fonctionne pas parfaitement pour moi: j'ai dû y ajouter mes "big_images", ce qui normal, c'est propre à ma contribution, mais beaucoup d'images utilisées sont encore proposées à la suppression (!!!???) Je n'ai pas creusé plus que ça pour comprendre le pourquoi du comment, probablement à cause de mes scripts trop bricolés. Et il reste à ajouter la fonction de renommage ou suppression des fichiers inutiles!

en tous cas, merci pour le partage wink.gif

Je vais voir à faire mon petit melting-pot de tout cela wink.gif


--------------------
Ni Hot-line ni Service Après Vente, ces forums sont un lieu d'échanges.
Une Question? Rechercher / FAQ / docV1.pdf / docV2.pdf / contributions
Go to the top of the page
 
Gnidhal
posté 24 Aug 2009, 22:11
Message #24


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Oui, et finalement la recherche dans les descriptions n'est pas si lourde que je le craignais.
en fait il suffit de modifier la recherche des images dans le tableau en ajoutant une requête pour chaque image ce qui donne :
Code
    foreach($list_images_files as $img_file){
      if (!in_array($img_file,$images_bdd)) {
        $c_description_query = tep_db_query("select * from categories_description where categories_description LIKE '%".$img_file."%'");
        $p_description_query = tep_db_query("select * from products_description  where products_description LIKE '%".$img_file."%'");
        if (!tep_db_num_rows($c_description_query) && !tep_db_num_rows($p_description_query))
            $unused_img[]=$img_file;
      }
    }
A noter au passage que ça cherche aussi dans les descriptions des catégories, une option qui n'existe pas dans la version de base.
l'ancien code était :
Code
    $unused_img = array();
    foreach($list_images_files as $img_file){
      if (!in_array($img_file,$list_images_bdd)) $unused_img[]=$img_file;
    }

Mais cela ne me convient pas non plus.
Sur la boutique que j'utilise en test j'ai :
4454 fichiers images trouvés
2689 images trouvées en bdd
1818 images non utilisées sans la recherche en descriptions
et
1205 images non utilisées en cherchant dans les descriptions. C'est encore trop!

Je constate entre autres que les noms d'image comportant un espace ne sont pas correctement comptabilisées : l'espace stocké en bdd est remplacé par un %20 sur le nom de fichier ... Oui, je sais, il ne devrait pas y avoir d'espace dans les noms images, c'est justement un des buts de cet outil, wink.gif


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 19th November 2017 - 14:56
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)