PEEL Shopping
Open source ecommerce : PEEL Shopping
check-integrity.php
Go to the documentation of this file.
1 <?php
2 // +----------------------------------------------------------------------+
3 // | Copyright (c) 2004-2015 Advisto SAS, service PEEL - contact@peel.fr |
4 // +----------------------------------------------------------------------+
5 // | This file is part of PEEL Shopping 8.0.0, which is subject to an |
6 // | opensource GPL license: you are allowed to customize the code |
7 // | for your own needs, but must keep your changes under GPL |
8 // | More information: https://www.peel.fr/lire/licence-gpl-70.html |
9 // +----------------------------------------------------------------------+
10 // | Author: Advisto SAS, RCS 479 205 452, France, https://www.peel.fr/ |
11 // +----------------------------------------------------------------------+
12 // $Id: check-integrity.php 46935 2015-09-18 08:49:48Z gboussin $
13 define('IN_PEEL_ADMIN', true);
14 include("../configuration.inc.php");
16 necessite_priv("admin");
17 
18 $GLOBALS['DOC_TITLE'] = 'Véfication de l\'existence de fichiers dans upload/ et suppression de la base de données si absents';
19 $menu_selected='index-various.php';
20 
21 $output = '';
22 
23 $dir_array = vb($GLOBALS['site_parameters']['check_integrity_directories_by_type_array'], array('products' => 'upload/'));
24 $fields_to_check_array['products'] = array('photo1', 'photo2', 'photo3', 'photo4', 'photo5', 'photo6', 'photo7', 'photo8', 'photo9', 'photo10');
25 
26 $hook_result = call_module_hook('check_integrity_get_configuration_array', array(), 'array');
27 $fields_to_check_array = array_merge_recursive($fields_to_check_array, $hook_result['fields_to_check_array']);
28 $dir_array = array_merge_recursive($dir_array, $hook_result['dir_array']);
29 
30 $photos_to_keep_array = vb($GLOBALS['site_parameters']['photos_to_keep_array'], array());
31 
32 if (!empty($_GET['delete'])) {
33  if (strlen($_GET['delete']) < 255 && in_array(substr($_GET['delete'], strlen($_GET['delete'])-4), array('.gif', '.jpg', 'jpeg', '.png', '.avi', 'mpeg', '.mpg', '.wmv', '.asf')) && file_exists($GLOBALS['dirroot'] . '/' . $_GET['delete'])) {
34  $file_size_ko = (round((filesize($GLOBALS['dirroot'] . '/' . $_GET['delete']) / 1024) * 1000) / 1000);
35  $output .= $_GET['delete'] . ' supprimé' . $file_size_ko . ' ko)<br />';
36  //unlink($GLOBALS['dirroot'] . '/' . $_GET['delete']);
37  }
38 }
39 // , 'avatars/mini/'=>'avatars'
40 if (!empty($_GET['force_delete_bad'])) {
41  $output .= '<br /><b><a href="check-integrity.php">Revenir en mode normal</a></b><br /><br />';
42 }
43 
44 foreach($dir_array as $type => $dir) {
45  unset($file_in_db);
46  unset($file_not_normal);
47  unset($file_bad_size);
48  unset($file_nok);
49  unset($file_bad);
50  unset($sql_delete_link);
51  $not_found = 0;
52  if ($type == 'products') {
53  $table_name = 'peel_produits';
54  $sql_select = "SELECT id, " . nohtml_real_escape_string(implode(', ', $fields_to_check_array)) . "
55  FROM " . word_real_escape_string($table_name) . "
56  WHERE 1";
57  } elseif ($type == 'ads' && check_if_module_active('annonces')) {
58  $table_name = 'peel_lot_vente';
59  $sql_select = "SELECT ref, " . nohtml_real_escape_string(implode(', ', $fields_to_check_array)) . "
60  FROM " . word_real_escape_string($table_name) . "
61  WHERE 1";
62  } else {
63  continue;
64  }
65  /*elseif(false) {
66  $q = query('SELECT id_photo
67  FROM photos
68  WHERE active="TRUE" OR active="DESACTIVER" OR (active!="TRUE" AND date>"' . date('Y-m-d H:i:s', time()-3600 * 24 * 31) . '")');
69  while ($res = fetch_assoc($q)) {
70  $file_in_db[$res['id_photo'] . '.jpg'] = true;
71  }
72  $sql_delete_link[] = 'DELETE FROM photos WHERE id_photo="[ID]"';
73  } elseif ($type == 'videos') {
74  $min_file_size = "100000";
75  $q = query('SELECT id_user, extension
76  FROM videos
77  WHERE active="TRUE" OR active="FALSE"');
78  while ($res = fetch_assoc($q)) {
79  $file_in_db[$res['id_user'] . '.' . $res['extension']] = true;
80  }
81  $sql_delete_link[] = 'DELETE FROM videos WHERE id_user="[ID]"';
82  } else {
83  //Gestion d'avatars
84  $min_file_size = "600";
85  $q = query('SELECT avatar
86  FROM peel_utilisateurs
87  WHERE 1');
88  while ($res = fetch_assoc($q)) {
89  if (substr($res['avatar'], 0, 7) == 'defaut/') {
90  continue;
91  }
92  if (is_numeric($res['avatar'])) {
93  $res['avatar'] .= '.jpg';
94  }
95  $file_in_db[$res['avatar']] = true;
96  }
97  $sql_delete_link[] = 'UPDATE users SET avatar="defaut/avatar-boy.gif" WHERE (avatar="[ID]" OR avatar="[ID].jpg") AND sexe="1"';
98  $sql_delete_link[] = 'UPDATE users SET avatar="defaut/avatar-girl.gif" WHERE (avatar="[ID]" OR avatar="[ID].jpg") AND sexe="2"';
99  } */
100  if ($type == 'products' || $type == 'ads') {
101  // Préparation du SQL générique à utiliser si on veut supprimer une donnée pour laquelle aucun fichier n'a été trouvé sur le disque
102  unset($this_sql_set);
103  unset($this_sql_where);
104  foreach($fields_to_check_array as $this_item) {
105  $this_sql_set[] = word_real_escape_string(($this_item)) . '=IF(' . word_real_escape_string(($this_item)) . '="[ID]","",' . word_real_escape_string($this_item) . ')';
106  $this_sql_where[] = word_real_escape_string($this_item) . '="[ID]"';
107  }
108  $sql_delete_link[] = "UPDATE " . word_real_escape_string($table_name) . "
109  SET " . nohtml_real_escape_string(implode(', ', $this_sql_set)) . ' WHERE ' . nohtml_real_escape_string(implode(', ', $this_sql_set)) . '';
110  }
111  $min_file_size = "1000";
112  $q = query($sql_select);
113  $j = 0;
114  while ($res = fetch_assoc($q)) {
115  $j++;
116  foreach($fields_to_check_array as $this_item) {
117  if(!empty($res[$this_item])) {
118  $file_in_db[$res[$this_item]] = true;
119  }
120  }
121  }
122  $output .= '<br /><b>Images en BDD : '.$found.' avec fichiers OK, '.$not_found.' sans fichier correspondant</b><br /><br />';
123  if (!empty($_GET['force_delete_bad']) && $_GET['force_delete_bad'] == $dir && !empty($_GET['type']) && $_GET['type'] == 'file_in_db') {
124  $output .= '<br /><b>Liens dans la BDD supprimés : ' . $not_found . ' liens</b><br /><br />';
125  } else {
126  $output .= '<br /><b>Option à manipuler avec précaution : <a href="check-integrity.php?force_delete_bad=' . String::str_form_value(rawurlencode($dir)) . '&type=file_in_db">Effacer de la BDD les liens vers les fichiers "ABSENTS DE LA BDD" (' . $not_found . ' liens)</a></b><br /><br />';
127  }
128  $output .= '<hr />';
129  $output .= '<h2>Dossier : ' . $dir . '</h2>';
130 
131  $i = 0;
132  $file_nok = array();
133  echo 'Fichiers appelés en BDD : ' .count($file_in_db).'<br />';
134  // On récupère la liste des fichiers qui sont dans $dir de manière récursive
135  unset($GLOBALS['files_found_in_folder']);
136  nettoyer_dir($GLOBALS['dirroot'] . '/' . $dir, null, null, true);
137  foreach($GLOBALS['files_found_in_folder'] as $this_file_relative_path_to_dir) {
138  $file = basename($this_file_relative_path_to_dir);
139  if (String::strlen($file) > 4 && in_array(String::substr($file, String::strlen($file)-4), array('.gif', '.jpg', 'jpeg', '.png', '.avi', 'mpeg', '.mpg', '.wmv', '.asf', '.bmp', '.JPG'))) {
140  if (!is_file($GLOBALS['dirroot'] . '/' . $dir . '/' . $this_file_relative_path_to_dir)) {
141  $file_bad[] = $dir . '/' . $this_file_relative_path_to_dir;
142  } elseif (filesize($GLOBALS['dirroot'] . '/' . $dir . '/' . $this_file_relative_path_to_dir) < $min_file_size && !in_array(substr($file, 0, strlen($file)-4), $photos_to_keep_array)) {
143  $file_bad_size[] = $dir . '/' . $this_file_relative_path_to_dir;
144  } elseif ((preg_match('advisto.com', $GLOBALS['wwwroot']) != false && is_numeric(substr($file, 0, 1))) || is_numeric(substr($file, 0, strlen($file)-4)) || (in_array(substr($file, 0, strlen($file)-4), $photos_to_keep_array))) {
145  if (!empty($file_in_db[$file])) {
146  unset($file_in_db[$file]);
147  } elseif (!in_array(substr($file, 0, strlen($file)-4), $photos_to_keep_array)) {
148  $file_nok[] = $dir . '/' . $this_file_relative_path_to_dir;
149  }
150  } else {
151  $file_not_normal[] = $dir . '/' . $this_file_relative_path_to_dir;
152  }
153  }
154  }
155  echo 'Fichiers appelés en BDD non trouvés sur disque : ' .count($file_in_db).'<br />';
156  foreach(array('file_bad' => 'Mauvais fichiers', 'file_not_normal' => 'Fichiers aux noms anormaux', 'file_bad_size' => 'Fichiers de taille anormale', 'file_nok' => 'Fichiers présents sur le disque mais pas dans la BDD') as $this_file_problem => $this_file_problem_name) {
157  if (!empty($$this_file_problem)) {
158  $total_files_size_ko = 0;
159  $not_found = 0;
160  $output .= '<h2>'.$this_file_problem_name.'</h2>';
161  foreach($$this_file_problem as $file) {
162  $file_size_ko = (round((filesize($GLOBALS['dirroot'] . '/' . $file) / 1024) * 1000) / 1000);
163  $total_files_size_ko += $file_size_ko;
164  $not_found++;
165  if (!empty($_GET['force_delete_bad']) && $_GET['force_delete_bad'] == $dir && !empty($_GET['type']) && $_GET['type'] == $this_file_problem) {
166  $output .= $file . ' supprimé' . $file_size_ko . ' ko)<br />';
167  unlink($GLOBALS['dirroot'] . '/' . $file);
168  $output .= 'UNLINK de ' . $file . '<br />';
169  // Suppression du thumb
170  unlink($GLOBALS['dirroot'] . '/' . str_replace(array('0/', '1/', '2/', '3/', '4/', '5/', '6/', '7/', '8/', '9/', '.jpg'), array('0/th_', '1/th_', '2/th_', '3/th_', '4/th_', '5/th_', '6/th_', '7/th_', '8/th_', '9/th_', '.png'), $file));
171  continue;
172  }
173  if(empty($_SESSION['session_admin_multisite']) || $_SESSION['session_admin_multisite'] != $GLOBALS['site_id']) {
174  $this_wwwroot = get_site_wwwroot($_SESSION['session_admin_multisite']);
175  } else {
176  $this_wwwroot = $GLOBALS['wwwroot'];
177  }
178  $output .= '<a href="' . $this_wwwroot . '/' . $file . '" target="_blank">' . $this_wwwroot . '/' . $file . '</a> (' . $file_size_ko . ' ko) &nbsp; &nbsp; <a href="check-integrity.php?delete=' . String::str_form_value(rawurlencode($file)) . '" style="color:#FF0000">Supprimer ' . $file . '</a><br />';
179  // if(!empty($_GET['delete'])) {
180  // $output .= '<br /><b>Mode succint : affichage seulement des premiers fichiers trouvé - <a href="check-integrity.php">Afficher tout</a></b><br /><br />';
181  // break;
182  // }
183  if ($not_found % 100 == 0) {
184  echo $output;
185  $output ='';
186  // Force l'envoi du HTML juste généré au navigateur, pour que l'utilisateur suive en temps réel l'avancée
187  flush();
188  }
189  }
190  if (!empty($_GET['force_delete_bad']) && $_GET['force_delete_bad'] == $dir && !empty($_GET['type']) && $_GET['type'] == $this_file_problem) {
191  $output .= '<br /><b>'.$this_file_problem_name.' supprimés : ' . $not_found . ' fichiers - ' . $total_files_size_ko . ' ko</b><br /><br />';
192  } else {
193  $output .= '<br /><b>Option à manipuler avec précaution : <a href="check-integrity.php?force_delete_bad=' . String::str_form_value(rawurlencode($dir)) . '&type='. String::str_form_value($this_file_problem) .'">Effacer automatiquement tous les fichiers "MAUVAIS" (' . $not_found . ' fichiers - ' . $total_files_size_ko . ' ko)</a></b><br /><br />';
194  }
195  } else {
196  $output .= '<h2>Pas de '.$this_file_problem_name.'</h2>';
197  }
198  }
199  if (!empty($file_in_db)) {
200  $not_found = 0;
201  $output .= '<h2>Fichiers présents dans la bdd mais pas physiquement</h2>';
202  foreach(array_keys($file_in_db) as $file) {
203  $not_found++;
204  if (!empty($_GET['force_delete_bad']) && $_GET['force_delete_bad'] == $dir && !empty($_GET['type']) && $_GET['type'] == 'file_in_db') {
205  foreach($sql_delete_link as $sql) {
206  if (strpos($file, '.')) {
207  if (preg_match('destockplus', $GLOBALS['wwwroot']) != false) {
208  $value_for_query = $file;
209  } elseif (preg_match('ame-soeur.com', $GLOBALS['wwwroot']) != false) {
210  $temp_array = explode('.', $file);
211  $value_for_query = $temp_array[0];
212  }
213  query(nohtml_real_escape_string(str_replace('[ID]', $value_for_query, $sql)));
214  $output .= str_replace('[ID]', $value_for_query, $sql) . '<br />';
215  }
216  }
217  $output .= 'Lien vers ' . $file . ' supprimé />';
218  continue;
219  }
220  $output .= $file . '<br />';
221  // if(!empty($_GET['delete'])) {
222  // $output .= '<br /><b>Mode succint : affichage seulement des premiers fichiers trouvé - <a href="check-integrity.php">Afficher tout</a></b><br /><br />';
223  // break;
224  // }
225  // }
226  }
227  if (!empty($_GET['force_delete_bad']) && $_GET['force_delete_bad'] == $dir && !empty($_GET['type']) && $_GET['type'] == 'file_in_db') {
228  $output .= '<br /><b>Liens dans la BDD supprimé: ' . $not_found . ' liens</b><br /><br />';
229  } else {
230  $output .= '<br /><b>Option à manipuler avec précaution : <a href="check-integrity.php?force_delete_bad=' . String::str_form_value(rawurlencode($dir)) . '&type=file_in_db">Effacer de la BDD les liens vers les fichiers "ABSENTS DE LA BDD" (' . $not_found . ' liens)</a></b><br /><br />';
231  }
232  } else {
233  $output .= '<h2>Aucun fichier présent dans la bdd mais pas physiquement</h2>';
234  }
235  $output .= '<hr />';
236 }
237 
238 include($GLOBALS['repertoire_modele'] . "/admin_haut.php");
239 echo $output;
240 include($GLOBALS['repertoire_modele'] . "/admin_bas.php");
241 
$photos_to_keep_array
word_real_escape_string($value)
Applique real_escape_string dans le cas où on n'insère qu'un seul mot, de moins de 30 caractères...
Definition: database.php:424
$menu_selected
static strlen($string)
Returns the length of the given string.
Definition: String.php:36
nohtml_real_escape_string($value, $allowed_tags=null)
Protège les données pour insertion dans MySQL ET supprime les tags HTML pour protéger de toute sorte ...
Definition: database.php:400
necessite_priv($priv, $demo_allowed=true, $configuration_modification=false)
Cette fonction vérifie si l'utilisateur a les privilèges de $priv.
Definition: fonctions.php:1575
$fields_to_check_array['products']
query($query, $die_if_error=false, $database_object=null, $silent_if_error=false, $security_sql_filter=true)
The query() function is meant to be called anywhere you want to make a query.
Definition: database.php:158
static str_form_value($value, $flags=ENT_COMPAT)
Encode une chaine de caractères pour affichage dans un value="".
Definition: String.php:480
vb(&$var, $default=null)
Variable blanche if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:97
if(strlen($date2)== '10') if($type== 'users-by-age'&&a_priv('admin_users', true)) elseif($type== 'forums-count'&&a_priv('admin_content', true)) elseif($type== 'forums-categories'&&a_priv('admin_content', true)) elseif($type== 'users-count'&&a_priv('admin_users', true)) elseif($type== 'product-categories'&&a_priv('admin_products', true)) elseif($type== 'users-by-sex'&&a_priv('admin_users', true)) elseif($type== 'users-by-country'&&a_priv('admin_users', true)) elseif($type== 'sales'&&a_priv('admin_sales', true))
Definition: chart-data.php:160
necessite_identification()
Si l'utilisateur n'est pas connecté à un compte, on affiche une page d'identification et arrête le sc...
Definition: fonctions.php:1596
fetch_assoc($query_result)
fetch_assoc()
Definition: database.php:283
call_module_hook($hook, $params, $mode= 'boolean')
Appelle la fonction correspondant au $hook pour chaque module installé La fonction doit s'appeler : [...
get_site_wwwroot($site_id, $lang=null)
Renvoie l'URL d'un site donné
Definition: fonctions.php:4873
nettoyer_dir($dir, $older_than_seconds=3, $filename_beginning=null, $create_files_array_found_instead_of_delete=false)
Effacement des fichiers trouvés répondant aux critères en argument, en effaçant récusivement le conte...
Definition: fonctions.php:3934
$hook_result
$dir_array
static substr($string, $start, $length=null)
Returns the portion of string specified by the start and length parameters.
Definition: String.php:112
check_if_module_active($module_name, $specific_file_name=null)
Renvoie si un module est présent et activé ou non - Peut être appelé avant ou après le chargement d'u...
$GLOBALS['DOC_TITLE']
if(defined('IN_PEEL_ADMIN')||IN_INSTALLATION) $_SESSION['session_langue']

This documentation for Open ecommerce PEEL Shopping and PEEL.fr has been generated by Doxygen on Thu Oct 15 2015 14:29:00 - Peel ecommerce is a product of Agence web Advisto SAS. All rights reserved.