Completed
Push — master ( 92f140...7db589 )
by cam
05:28 queued 21s
created
ecrire/req/mysql.php 2 patches
Indentation   +789 added lines, -789 removed lines patch added patch discarded remove patch
@@ -20,11 +20,11 @@  discard block
 block discarded – undo
20 20
  */
21 21
 
22 22
 if (!defined('_ECRIRE_INC_VERSION')) {
23
-	return;
23
+    return;
24 24
 }
25 25
 
26 26
 if (!defined('_MYSQL_NOPLANES')) {
27
-	define('_MYSQL_NOPLANES', true);
27
+    define('_MYSQL_NOPLANES', true);
28 28
 }
29 29
 
30 30
 /**
@@ -41,104 +41,104 @@  discard block
 block discarded – undo
41 41
  *     - tableau décrivant la connexion sinon
42 42
  */
43 43
 function req_mysql_dist($host, $port, $login, $pass, $db = '', $prefixe = '') {
44
-	if (!extension_loaded('mysqli')) {
45
-		return false;
46
-	}
47
-
48
-	// si port est fourni mais pas host, c'est un socket -> compat avec vieille syntaxe de mysql_connect() et anciens fichiers connect.php
49
-	if (
50
-		$port and !is_numeric($socket = $port)
51
-		and (!$host or $host=='localhost')) {
52
-		$link = @mysqli_connect($host, $login, $pass, '', null, $socket);
53
-	}
54
-	elseif ($port) {
55
-		$link = @mysqli_connect($host, $login, $pass, '', $port);
56
-	}
57
-	else {
58
-		$link = @mysqli_connect($host, $login, $pass);
59
-	}
60
-
61
-	if (!$link) {
62
-		spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
63
-
64
-		return false;
65
-	}
66
-	$last = '';
67
-	if (!$db) {
68
-		$ok = $link;
69
-		$db = 'spip';
70
-	} else {
71
-		$ok = mysqli_select_db($link, $db);
72
-		if (defined('_MYSQL_SET_SQL_MODE')
73
-			or defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
74
-		) {
75
-			mysqli_query($link, $last = "set sql_mode=''");
76
-		}
77
-	}
78
-
79
-	spip_log("Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? "operationnelle" : 'impossible'),
80
-		_LOG_DEBUG);
81
-
82
-	return !$ok ? false : array(
83
-		'db' => $db,
84
-		'last' => $last,
85
-		'prefixe' => $prefixe ? $prefixe : $db,
86
-		'link' => $link,
87
-		'total_requetes' => 0,
88
-	);
44
+    if (!extension_loaded('mysqli')) {
45
+        return false;
46
+    }
47
+
48
+    // si port est fourni mais pas host, c'est un socket -> compat avec vieille syntaxe de mysql_connect() et anciens fichiers connect.php
49
+    if (
50
+        $port and !is_numeric($socket = $port)
51
+        and (!$host or $host=='localhost')) {
52
+        $link = @mysqli_connect($host, $login, $pass, '', null, $socket);
53
+    }
54
+    elseif ($port) {
55
+        $link = @mysqli_connect($host, $login, $pass, '', $port);
56
+    }
57
+    else {
58
+        $link = @mysqli_connect($host, $login, $pass);
59
+    }
60
+
61
+    if (!$link) {
62
+        spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
63
+
64
+        return false;
65
+    }
66
+    $last = '';
67
+    if (!$db) {
68
+        $ok = $link;
69
+        $db = 'spip';
70
+    } else {
71
+        $ok = mysqli_select_db($link, $db);
72
+        if (defined('_MYSQL_SET_SQL_MODE')
73
+            or defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
74
+        ) {
75
+            mysqli_query($link, $last = "set sql_mode=''");
76
+        }
77
+    }
78
+
79
+    spip_log("Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? "operationnelle" : 'impossible'),
80
+        _LOG_DEBUG);
81
+
82
+    return !$ok ? false : array(
83
+        'db' => $db,
84
+        'last' => $last,
85
+        'prefixe' => $prefixe ? $prefixe : $db,
86
+        'link' => $link,
87
+        'total_requetes' => 0,
88
+    );
89 89
 }
90 90
 
91 91
 
92 92
 $GLOBALS['spip_mysql_functions_1'] = array(
93
-	'alter' => 'spip_mysql_alter',
94
-	'count' => 'spip_mysql_count',
95
-	'countsel' => 'spip_mysql_countsel',
96
-	'create' => 'spip_mysql_create',
97
-	'create_base' => 'spip_mysql_create_base',
98
-	'create_view' => 'spip_mysql_create_view',
99
-	'date_proche' => 'spip_mysql_date_proche',
100
-	'delete' => 'spip_mysql_delete',
101
-	'drop_table' => 'spip_mysql_drop_table',
102
-	'drop_view' => 'spip_mysql_drop_view',
103
-	'errno' => 'spip_mysql_errno',
104
-	'error' => 'spip_mysql_error',
105
-	'explain' => 'spip_mysql_explain',
106
-	'fetch' => 'spip_mysql_fetch',
107
-	'seek' => 'spip_mysql_seek',
108
-	'free' => 'spip_mysql_free',
109
-	'hex' => 'spip_mysql_hex',
110
-	'in' => 'spip_mysql_in',
111
-	'insert' => 'spip_mysql_insert',
112
-	'insertq' => 'spip_mysql_insertq',
113
-	'insertq_multi' => 'spip_mysql_insertq_multi',
114
-	'listdbs' => 'spip_mysql_listdbs',
115
-	'multi' => 'spip_mysql_multi',
116
-	'optimize' => 'spip_mysql_optimize',
117
-	'query' => 'spip_mysql_query',
118
-	'quote' => 'spip_mysql_quote',
119
-	'replace' => 'spip_mysql_replace',
120
-	'replace_multi' => 'spip_mysql_replace_multi',
121
-	'repair' => 'spip_mysql_repair',
122
-	'select' => 'spip_mysql_select',
123
-	'selectdb' => 'spip_mysql_selectdb',
124
-	'set_charset' => 'spip_mysql_set_charset',
125
-	'get_charset' => 'spip_mysql_get_charset',
126
-	'showbase' => 'spip_mysql_showbase',
127
-	'showtable' => 'spip_mysql_showtable',
128
-	'update' => 'spip_mysql_update',
129
-	'updateq' => 'spip_mysql_updateq',
130
-
131
-	// association de chaque nom http d'un charset aux couples MySQL
132
-	'charsets' => array(
133
-		'cp1250' => array('charset' => 'cp1250', 'collation' => 'cp1250_general_ci'),
134
-		'cp1251' => array('charset' => 'cp1251', 'collation' => 'cp1251_general_ci'),
135
-		'cp1256' => array('charset' => 'cp1256', 'collation' => 'cp1256_general_ci'),
136
-		'iso-8859-1' => array('charset' => 'latin1', 'collation' => 'latin1_swedish_ci'),
93
+    'alter' => 'spip_mysql_alter',
94
+    'count' => 'spip_mysql_count',
95
+    'countsel' => 'spip_mysql_countsel',
96
+    'create' => 'spip_mysql_create',
97
+    'create_base' => 'spip_mysql_create_base',
98
+    'create_view' => 'spip_mysql_create_view',
99
+    'date_proche' => 'spip_mysql_date_proche',
100
+    'delete' => 'spip_mysql_delete',
101
+    'drop_table' => 'spip_mysql_drop_table',
102
+    'drop_view' => 'spip_mysql_drop_view',
103
+    'errno' => 'spip_mysql_errno',
104
+    'error' => 'spip_mysql_error',
105
+    'explain' => 'spip_mysql_explain',
106
+    'fetch' => 'spip_mysql_fetch',
107
+    'seek' => 'spip_mysql_seek',
108
+    'free' => 'spip_mysql_free',
109
+    'hex' => 'spip_mysql_hex',
110
+    'in' => 'spip_mysql_in',
111
+    'insert' => 'spip_mysql_insert',
112
+    'insertq' => 'spip_mysql_insertq',
113
+    'insertq_multi' => 'spip_mysql_insertq_multi',
114
+    'listdbs' => 'spip_mysql_listdbs',
115
+    'multi' => 'spip_mysql_multi',
116
+    'optimize' => 'spip_mysql_optimize',
117
+    'query' => 'spip_mysql_query',
118
+    'quote' => 'spip_mysql_quote',
119
+    'replace' => 'spip_mysql_replace',
120
+    'replace_multi' => 'spip_mysql_replace_multi',
121
+    'repair' => 'spip_mysql_repair',
122
+    'select' => 'spip_mysql_select',
123
+    'selectdb' => 'spip_mysql_selectdb',
124
+    'set_charset' => 'spip_mysql_set_charset',
125
+    'get_charset' => 'spip_mysql_get_charset',
126
+    'showbase' => 'spip_mysql_showbase',
127
+    'showtable' => 'spip_mysql_showtable',
128
+    'update' => 'spip_mysql_update',
129
+    'updateq' => 'spip_mysql_updateq',
130
+
131
+    // association de chaque nom http d'un charset aux couples MySQL
132
+    'charsets' => array(
133
+        'cp1250' => array('charset' => 'cp1250', 'collation' => 'cp1250_general_ci'),
134
+        'cp1251' => array('charset' => 'cp1251', 'collation' => 'cp1251_general_ci'),
135
+        'cp1256' => array('charset' => 'cp1256', 'collation' => 'cp1256_general_ci'),
136
+        'iso-8859-1' => array('charset' => 'latin1', 'collation' => 'latin1_swedish_ci'),
137 137
 //'iso-8859-6'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
138
-		'iso-8859-9' => array('charset' => 'latin5', 'collation' => 'latin5_turkish_ci'),
138
+        'iso-8859-9' => array('charset' => 'latin5', 'collation' => 'latin5_turkish_ci'),
139 139
 //'iso-8859-15'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
140
-		'utf-8' => array('charset' => 'utf8', 'collation' => 'utf8_general_ci')
141
-	)
140
+        'utf-8' => array('charset' => 'utf8', 'collation' => 'utf8_general_ci')
141
+    )
142 142
 );
143 143
 
144 144
 
@@ -149,9 +149,9 @@  discard block
 block discarded – undo
149 149
  * @return Object Information de connexion pour mysqli
150 150
  */
151 151
 function _mysql_link($serveur = '') {
152
-	$link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
152
+    $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
153 153
 
154
-	return $link;
154
+    return $link;
155 155
 }
156 156
 
157 157
 
@@ -164,10 +164,10 @@  discard block
 block discarded – undo
164 164
  * @return resource       Ressource de résultats pour fetch()
165 165
  */
166 166
 function spip_mysql_set_charset($charset, $serveur = '', $requeter = true) {
167
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
168
-	spip_log("changement de charset sql : " . "SET NAMES " . _q($charset), _LOG_DEBUG);
167
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
168
+    spip_log("changement de charset sql : " . "SET NAMES " . _q($charset), _LOG_DEBUG);
169 169
 
170
-	return mysqli_query($connexion['link'], $connexion['last'] = "SET NAMES " . _q($charset));
170
+    return mysqli_query($connexion['link'], $connexion['last'] = "SET NAMES " . _q($charset));
171 171
 }
172 172
 
173 173
 
@@ -180,11 +180,11 @@  discard block
 block discarded – undo
180 180
  * @return array                Description du charset (son nom est dans 'charset')
181 181
  */
182 182
 function spip_mysql_get_charset($charset = array(), $serveur = '', $requeter = true) {
183
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
184
-	$connexion['last'] = $c = "SHOW CHARACTER SET"
185
-		. (!$charset ? '' : (" LIKE " . _q($charset['charset'])));
183
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
184
+    $connexion['last'] = $c = "SHOW CHARACTER SET"
185
+        . (!$charset ? '' : (" LIKE " . _q($charset['charset'])));
186 186
 
187
-	return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
187
+    return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
188 188
 }
189 189
 
190 190
 /**
@@ -200,66 +200,66 @@  discard block
 block discarded – undo
200 200
  */
201 201
 function spip_mysql_query($query, $serveur = '', $requeter = true) {
202 202
 
203
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
204
-	$prefixe = $connexion['prefixe'];
205
-	$link = $connexion['link'];
206
-	$db = $connexion['db'];
207
-
208
-	$query = _mysql_traite_query($query, $db, $prefixe);
209
-
210
-	// renvoyer la requete inerte si demandee
211
-	if (!$requeter) {
212
-		return $query;
213
-	}
214
-
215
-	if (isset($_GET['var_profile'])) {
216
-		include_spip('public/tracer');
217
-		$t = trace_query_start();
218
-	} else {
219
-		$t = 0;
220
-	}
221
-
222
-	$connexion['last'] = $query;
223
-	$connexion['total_requetes']++;
224
-
225
-	// ajouter un debug utile dans log/mysql-slow.log ?
226
-	$debug = '';
227
-	if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
228
-		if (isset($GLOBALS['debug']['aucasou'])) {
229
-			list(, $id, , $infos) = $GLOBALS['debug']['aucasou'];
230
-			$debug .= "BOUCLE$id @ " . (isset($infos[0]) ? $infos[0] : '') . " | ";
231
-		}
232
-		if (isset($_SERVER['REQUEST_URI'])) {
233
-			$debug .= $_SERVER['REQUEST_URI'];
234
-		}
235
-		if (!empty($GLOBALS['ip'])) {
236
-			$debug .= ' + ' . $GLOBALS['ip'];
237
-		}
238
-		$debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
239
-	}
240
-
241
-	$r = mysqli_query($link, $query . $debug);
242
-
243
-	//Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
244
-	if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
245
-		if ($e == 2006) { //Si Gone Away on relance une connexion vierge
246
-			//Fermer la connexion defaillante
247
-			mysqli_close($connexion['link']);
248
-			unset($GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]);
249
-			//Relancer une connexion vierge
250
-			spip_connect($serveur);
251
-			$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
252
-			$link = $connexion['link'];
253
-			//On retente au cas où
254
-			$r = mysqli_query($link, $query . $debug);
255
-		}
256
-	}
257
-
258
-	// Log de l'erreur eventuelle
259
-	if ($e = spip_mysql_errno($serveur)) {
260
-		$e .= spip_mysql_error($query, $serveur);
261
-	} // et du fautif
262
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
203
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
204
+    $prefixe = $connexion['prefixe'];
205
+    $link = $connexion['link'];
206
+    $db = $connexion['db'];
207
+
208
+    $query = _mysql_traite_query($query, $db, $prefixe);
209
+
210
+    // renvoyer la requete inerte si demandee
211
+    if (!$requeter) {
212
+        return $query;
213
+    }
214
+
215
+    if (isset($_GET['var_profile'])) {
216
+        include_spip('public/tracer');
217
+        $t = trace_query_start();
218
+    } else {
219
+        $t = 0;
220
+    }
221
+
222
+    $connexion['last'] = $query;
223
+    $connexion['total_requetes']++;
224
+
225
+    // ajouter un debug utile dans log/mysql-slow.log ?
226
+    $debug = '';
227
+    if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
228
+        if (isset($GLOBALS['debug']['aucasou'])) {
229
+            list(, $id, , $infos) = $GLOBALS['debug']['aucasou'];
230
+            $debug .= "BOUCLE$id @ " . (isset($infos[0]) ? $infos[0] : '') . " | ";
231
+        }
232
+        if (isset($_SERVER['REQUEST_URI'])) {
233
+            $debug .= $_SERVER['REQUEST_URI'];
234
+        }
235
+        if (!empty($GLOBALS['ip'])) {
236
+            $debug .= ' + ' . $GLOBALS['ip'];
237
+        }
238
+        $debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
239
+    }
240
+
241
+    $r = mysqli_query($link, $query . $debug);
242
+
243
+    //Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
244
+    if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
245
+        if ($e == 2006) { //Si Gone Away on relance une connexion vierge
246
+            //Fermer la connexion defaillante
247
+            mysqli_close($connexion['link']);
248
+            unset($GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]);
249
+            //Relancer une connexion vierge
250
+            spip_connect($serveur);
251
+            $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
252
+            $link = $connexion['link'];
253
+            //On retente au cas où
254
+            $r = mysqli_query($link, $query . $debug);
255
+        }
256
+    }
257
+
258
+    // Log de l'erreur eventuelle
259
+    if ($e = spip_mysql_errno($serveur)) {
260
+        $e .= spip_mysql_error($query, $serveur);
261
+    } // et du fautif
262
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
263 263
 }
264 264
 
265 265
 /**
@@ -274,12 +274,12 @@  discard block
 block discarded – undo
274 274
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
275 275
  */
276 276
 function spip_mysql_alter($query, $serveur = '', $requeter = true) {
277
-	// ici on supprime les ` entourant le nom de table pour permettre
278
-	// la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
279
-	// d'utiliser ceux-ci, copie-colle de phpmyadmin
280
-	$query = preg_replace(",^TABLE\s*`([^`]*)`,i", "TABLE \\1", $query);
277
+    // ici on supprime les ` entourant le nom de table pour permettre
278
+    // la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
279
+    // d'utiliser ceux-ci, copie-colle de phpmyadmin
280
+    $query = preg_replace(",^TABLE\s*`([^`]*)`,i", "TABLE \\1", $query);
281 281
 
282
-	return spip_mysql_query("ALTER " . $query, $serveur, $requeter); # i.e. que PG se debrouille
282
+    return spip_mysql_query("ALTER " . $query, $serveur, $requeter); # i.e. que PG se debrouille
283 283
 }
284 284
 
285 285
 
@@ -292,9 +292,9 @@  discard block
 block discarded – undo
292 292
  * @return bool            Toujours true
293 293
  */
294 294
 function spip_mysql_optimize($table, $serveur = '', $requeter = true) {
295
-	spip_mysql_query("OPTIMIZE TABLE " . $table);
295
+    spip_mysql_query("OPTIMIZE TABLE " . $table);
296 296
 
297
-	return true;
297
+    return true;
298 298
 }
299 299
 
300 300
 
@@ -307,18 +307,18 @@  discard block
 block discarded – undo
307 307
  * @return array           Tableau de l'explication
308 308
  */
309 309
 function spip_mysql_explain($query, $serveur = '', $requeter = true) {
310
-	if (strpos(ltrim($query), 'SELECT') !== 0) {
311
-		return array();
312
-	}
313
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
314
-	$prefixe = $connexion['prefixe'];
315
-	$link = $connexion['link'];
316
-	$db = $connexion['db'];
317
-
318
-	$query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
319
-	$r = mysqli_query($link, $query);
320
-
321
-	return spip_mysql_fetch($r, null, $serveur);
310
+    if (strpos(ltrim($query), 'SELECT') !== 0) {
311
+        return array();
312
+    }
313
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
314
+    $prefixe = $connexion['prefixe'];
315
+    $link = $connexion['link'];
316
+    $db = $connexion['db'];
317
+
318
+    $query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
319
+    $r = mysqli_query($link, $query);
320
+
321
+    return spip_mysql_fetch($r, null, $serveur);
322 322
 }
323 323
 
324 324
 
@@ -347,35 +347,35 @@  discard block
 block discarded – undo
347 347
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
348 348
  */
349 349
 function spip_mysql_select(
350
-	$select,
351
-	$from,
352
-	$where = '',
353
-	$groupby = '',
354
-	$orderby = '',
355
-	$limit = '',
356
-	$having = '',
357
-	$serveur = '',
358
-	$requeter = true
350
+    $select,
351
+    $from,
352
+    $where = '',
353
+    $groupby = '',
354
+    $orderby = '',
355
+    $limit = '',
356
+    $having = '',
357
+    $serveur = '',
358
+    $requeter = true
359 359
 ) {
360 360
 
361 361
 
362
-	$from = (!is_array($from) ? $from : spip_mysql_select_as($from));
363
-	$query =
364
-		calculer_mysql_expression('SELECT', $select, ', ')
365
-		. calculer_mysql_expression('FROM', $from, ', ')
366
-		. calculer_mysql_expression('WHERE', $where)
367
-		. calculer_mysql_expression('GROUP BY', $groupby, ',')
368
-		. calculer_mysql_expression('HAVING', $having)
369
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
370
-		. ($limit ? "\nLIMIT $limit" : '');
362
+    $from = (!is_array($from) ? $from : spip_mysql_select_as($from));
363
+    $query =
364
+        calculer_mysql_expression('SELECT', $select, ', ')
365
+        . calculer_mysql_expression('FROM', $from, ', ')
366
+        . calculer_mysql_expression('WHERE', $where)
367
+        . calculer_mysql_expression('GROUP BY', $groupby, ',')
368
+        . calculer_mysql_expression('HAVING', $having)
369
+        . ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
370
+        . ($limit ? "\nLIMIT $limit" : '');
371 371
 
372
-	// renvoyer la requete inerte si demandee
373
-	if ($requeter === false) {
374
-		return $query;
375
-	}
376
-	$r = spip_mysql_query($query, $serveur, $requeter);
372
+    // renvoyer la requete inerte si demandee
373
+    if ($requeter === false) {
374
+        return $query;
375
+    }
376
+    $r = spip_mysql_query($query, $serveur, $requeter);
377 377
 
378
-	return $r ? $r : $query;
378
+    return $r ? $r : $query;
379 379
 }
380 380
 
381 381
 
@@ -392,7 +392,7 @@  discard block
 block discarded – undo
392 392
  * @return string Texte du orderby préparé
393 393
  */
394 394
 function spip_mysql_order($orderby) {
395
-	return (is_array($orderby)) ? join(", ", $orderby) : $orderby;
395
+    return (is_array($orderby)) ? join(", ", $orderby) : $orderby;
396 396
 }
397 397
 
398 398
 
@@ -415,26 +415,26 @@  discard block
 block discarded – undo
415 415
  *     Contrainte pour clause WHERE
416 416
  */
417 417
 function calculer_mysql_where($v) {
418
-	if (!is_array($v)) {
419
-		return $v;
420
-	}
421
-
422
-	$op = array_shift($v);
423
-	if (!($n = count($v))) {
424
-		return $op;
425
-	} else {
426
-		$arg = calculer_mysql_where(array_shift($v));
427
-		if ($n == 1) {
428
-			return "$op($arg)";
429
-		} else {
430
-			$arg2 = calculer_mysql_where(array_shift($v));
431
-			if ($n == 2) {
432
-				return "($arg $op $arg2)";
433
-			} else {
434
-				return "($arg $op ($arg2) : $v[0])";
435
-			}
436
-		}
437
-	}
418
+    if (!is_array($v)) {
419
+        return $v;
420
+    }
421
+
422
+    $op = array_shift($v);
423
+    if (!($n = count($v))) {
424
+        return $op;
425
+    } else {
426
+        $arg = calculer_mysql_where(array_shift($v));
427
+        if ($n == 1) {
428
+            return "$op($arg)";
429
+        } else {
430
+            $arg2 = calculer_mysql_where(array_shift($v));
431
+            if ($n == 2) {
432
+                return "($arg $op $arg2)";
433
+            } else {
434
+                return "($arg $op ($arg2) : $v[0])";
435
+            }
436
+        }
437
+    }
438 438
 }
439 439
 
440 440
 /**
@@ -449,21 +449,21 @@  discard block
 block discarded – undo
449 449
  * @return string            Texte de l'expression, une partie donc, du texte la requête.
450 450
  */
451 451
 function calculer_mysql_expression($expression, $v, $join = 'AND') {
452
-	if (empty($v)) {
453
-		return '';
454
-	}
455
-
456
-	$exp = "\n$expression ";
457
-
458
-	if (!is_array($v)) {
459
-		return $exp . $v;
460
-	} else {
461
-		if (strtoupper($join) === 'AND') {
462
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
463
-		} else {
464
-			return $exp . join($join, $v);
465
-		}
466
-	}
452
+    if (empty($v)) {
453
+        return '';
454
+    }
455
+
456
+    $exp = "\n$expression ";
457
+
458
+    if (!is_array($v)) {
459
+        return $exp . $v;
460
+    } else {
461
+        if (strtoupper($join) === 'AND') {
462
+            return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
463
+        } else {
464
+            return $exp . join($join, $v);
465
+        }
466
+    }
467 467
 }
468 468
 
469 469
 
@@ -474,26 +474,26 @@  discard block
 block discarded – undo
474 474
  * @return string Sélection de colonnes pour une clause SELECT
475 475
  */
476 476
 function spip_mysql_select_as($args) {
477
-	$res = '';
478
-	foreach ($args as $k => $v) {
479
-		if (substr($k, -1) == '@') {
480
-			// c'est une jointure qui se refere au from precedent
481
-			// pas de virgule
482
-			$res .= '  ' . $v;
483
-		} else {
484
-			if (!is_numeric($k)) {
485
-				$p = strpos($v, " ");
486
-				if ($p) {
487
-					$v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
488
-				} else {
489
-					$v .= " AS `$k`";
490
-				}
491
-			}
492
-			$res .= ', ' . $v;
493
-		}
494
-	}
495
-
496
-	return substr($res, 2);
477
+    $res = '';
478
+    foreach ($args as $k => $v) {
479
+        if (substr($k, -1) == '@') {
480
+            // c'est une jointure qui se refere au from precedent
481
+            // pas de virgule
482
+            $res .= '  ' . $v;
483
+        } else {
484
+            if (!is_numeric($k)) {
485
+                $p = strpos($v, " ");
486
+                if ($p) {
487
+                    $v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
488
+                } else {
489
+                    $v .= " AS `$k`";
490
+                }
491
+            }
492
+            $res .= ', ' . $v;
493
+        }
494
+    }
495
+
496
+    return substr($res, 2);
497 497
 }
498 498
 
499 499
 
@@ -517,46 +517,46 @@  discard block
 block discarded – undo
517 517
  */
518 518
 function _mysql_traite_query($query, $db = '', $prefixe = '') {
519 519
 
520
-	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
521
-		$pref = '`' . $db . '`.';
522
-	} else {
523
-		$pref = '';
524
-	}
525
-
526
-	if ($prefixe) {
527
-		$pref .= $prefixe . "_";
528
-	}
529
-
530
-	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
531
-		$suite = '';
532
-	} else {
533
-		$suite = strstr($query, $regs[0]);
534
-		$query = substr($query, 0, -strlen($suite));
535
-		// propager le prefixe en cas de requete imbriquee
536
-		// il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
537
-		// modifier une requete qui est en fait juste du texte dans un champ
538
-		if (stripos($suite, "SELECT") !== false) {
539
-			list($suite, $textes) = query_echappe_textes($suite);
540
-			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r)) {
541
-				$suite = $r[1] . _mysql_traite_query($r[2], $db, $prefixe);
542
-			}
543
-			$suite = query_reinjecte_textes($suite, $textes);
544
-		}
545
-	}
546
-	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
547
-
548
-	// en option, remplacer les emoji (que mysql ne sait pas gérer) en 💩
549
-	// remplacer les emoji (que mysql ne sait pas gérer) en 💩
550
-	if (defined('_MYSQL_NOPLANES')
551
-		and _MYSQL_NOPLANES
552
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
553
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8') {
554
-		include_spip('inc/charsets');
555
-		$r = utf8_noplanes($r);
556
-	}
557
-
558
-	#spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
559
-	return $r;
520
+    if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
521
+        $pref = '`' . $db . '`.';
522
+    } else {
523
+        $pref = '';
524
+    }
525
+
526
+    if ($prefixe) {
527
+        $pref .= $prefixe . "_";
528
+    }
529
+
530
+    if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
531
+        $suite = '';
532
+    } else {
533
+        $suite = strstr($query, $regs[0]);
534
+        $query = substr($query, 0, -strlen($suite));
535
+        // propager le prefixe en cas de requete imbriquee
536
+        // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
537
+        // modifier une requete qui est en fait juste du texte dans un champ
538
+        if (stripos($suite, "SELECT") !== false) {
539
+            list($suite, $textes) = query_echappe_textes($suite);
540
+            if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r)) {
541
+                $suite = $r[1] . _mysql_traite_query($r[2], $db, $prefixe);
542
+            }
543
+            $suite = query_reinjecte_textes($suite, $textes);
544
+        }
545
+    }
546
+    $r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
547
+
548
+    // en option, remplacer les emoji (que mysql ne sait pas gérer) en 💩
549
+    // remplacer les emoji (que mysql ne sait pas gérer) en 💩
550
+    if (defined('_MYSQL_NOPLANES')
551
+        and _MYSQL_NOPLANES
552
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
553
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8') {
554
+        include_spip('inc/charsets');
555
+        $r = utf8_noplanes($r);
556
+    }
557
+
558
+    #spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
559
+    return $r;
560 560
 }
561 561
 
562 562
 /**
@@ -574,13 +574,13 @@  discard block
 block discarded – undo
574 574
  *     - False en cas d'erreur.
575 575
  **/
576 576
 function spip_mysql_selectdb($db, $serveur = '', $requeter = true) {
577
-	$link = _mysql_link($serveur);
578
-	$ok = mysqli_select_db($link, $db);
579
-	if (!$ok) {
580
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
581
-	}
577
+    $link = _mysql_link($serveur);
578
+    $ok = mysqli_select_db($link, $db);
579
+    if (!$ok) {
580
+        spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
581
+    }
582 582
 
583
-	return $ok;
583
+    return $ok;
584 584
 }
585 585
 
586 586
 
@@ -601,14 +601,14 @@  discard block
 block discarded – undo
601 601
  *     Liste de noms de bases de données
602 602
  **/
603 603
 function spip_mysql_listdbs($serveur = '', $requeter = true) {
604
-	$dbs = array();
605
-	if ($res = spip_mysql_query("SHOW DATABASES", $serveur)) {
606
-		while ($row = mysqli_fetch_assoc($res)) {
607
-			$dbs[] = $row['Database'];
608
-		}
609
-	}
610
-
611
-	return $dbs;
604
+    $dbs = array();
605
+    if ($res = spip_mysql_query("SHOW DATABASES", $serveur)) {
606
+        while ($row = mysqli_fetch_assoc($res)) {
607
+            $dbs[] = $row['Database'];
608
+        }
609
+    }
610
+
611
+    return $dbs;
612 612
 }
613 613
 
614 614
 
@@ -631,72 +631,72 @@  discard block
 block discarded – undo
631 631
  *     - true si la requête réussie, false sinon.
632 632
  */
633 633
 function spip_mysql_create(
634
-	$nom,
635
-	$champs,
636
-	$cles,
637
-	$autoinc = false,
638
-	$temporary = false,
639
-	$serveur = '',
640
-	$requeter = true
634
+    $nom,
635
+    $champs,
636
+    $cles,
637
+    $autoinc = false,
638
+    $temporary = false,
639
+    $serveur = '',
640
+    $requeter = true
641 641
 ) {
642 642
 
643
-	$query = '';
644
-	$keys = '';
645
-	$s = '';
646
-	$p = '';
647
-
648
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
649
-	// sans les renseigner (laisse le compilo recuperer la description)
650
-	if (!is_array($champs) || !is_array($cles)) {
651
-		return;
652
-	}
653
-
654
-	$res = spip_mysql_query("SELECT version() as v", $serveur);
655
-	if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
656
-		spip_mysql_query("SET sql_mode=''", $serveur);
657
-	}
658
-
659
-	foreach ($cles as $k => $v) {
660
-		$keys .= "$s\n\t\t$k ($v)";
661
-		if ($k == "PRIMARY KEY") {
662
-			$p = $v;
663
-		}
664
-		$s = ",";
665
-	}
666
-	$s = '';
667
-
668
-	$character_set = "";
669
-	if (@$GLOBALS['meta']['charset_sql_base']) {
670
-		$character_set .= " CHARACTER SET " . $GLOBALS['meta']['charset_sql_base'];
671
-	}
672
-	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
673
-		$character_set .= " COLLATE " . $GLOBALS['meta']['charset_collation_sql_base'];
674
-	}
675
-
676
-	foreach ($champs as $k => $v) {
677
-		$v = _mysql_remplacements_definitions_table($v);
678
-		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
679
-			if (preg_match(',(char|text),i', $defs[1])
680
-				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
681
-			) {
682
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
683
-			}
684
-		}
685
-
686
-		$query .= "$s\n\t\t$k $v"
687
-			. (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
688
-				? " auto_increment"
689
-				: ''
690
-			);
691
-		$s = ",";
692
-	}
693
-	$temporary = $temporary ? 'TEMPORARY' : '';
694
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ")"
695
-		. " ENGINE=MyISAM"
696
-		. ($character_set ? " DEFAULT $character_set" : "")
697
-		. "\n";
698
-
699
-	return spip_mysql_query($q, $serveur);
643
+    $query = '';
644
+    $keys = '';
645
+    $s = '';
646
+    $p = '';
647
+
648
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
649
+    // sans les renseigner (laisse le compilo recuperer la description)
650
+    if (!is_array($champs) || !is_array($cles)) {
651
+        return;
652
+    }
653
+
654
+    $res = spip_mysql_query("SELECT version() as v", $serveur);
655
+    if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
656
+        spip_mysql_query("SET sql_mode=''", $serveur);
657
+    }
658
+
659
+    foreach ($cles as $k => $v) {
660
+        $keys .= "$s\n\t\t$k ($v)";
661
+        if ($k == "PRIMARY KEY") {
662
+            $p = $v;
663
+        }
664
+        $s = ",";
665
+    }
666
+    $s = '';
667
+
668
+    $character_set = "";
669
+    if (@$GLOBALS['meta']['charset_sql_base']) {
670
+        $character_set .= " CHARACTER SET " . $GLOBALS['meta']['charset_sql_base'];
671
+    }
672
+    if (@$GLOBALS['meta']['charset_collation_sql_base']) {
673
+        $character_set .= " COLLATE " . $GLOBALS['meta']['charset_collation_sql_base'];
674
+    }
675
+
676
+    foreach ($champs as $k => $v) {
677
+        $v = _mysql_remplacements_definitions_table($v);
678
+        if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
679
+            if (preg_match(',(char|text),i', $defs[1])
680
+                and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
681
+            ) {
682
+                $v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
683
+            }
684
+        }
685
+
686
+        $query .= "$s\n\t\t$k $v"
687
+            . (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
688
+                ? " auto_increment"
689
+                : ''
690
+            );
691
+        $s = ",";
692
+    }
693
+    $temporary = $temporary ? 'TEMPORARY' : '';
694
+    $q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ")"
695
+        . " ENGINE=MyISAM"
696
+        . ($character_set ? " DEFAULT $character_set" : "")
697
+        . "\n";
698
+
699
+    return spip_mysql_query($q, $serveur);
700 700
 }
701 701
 
702 702
 
@@ -709,25 +709,25 @@  discard block
 block discarded – undo
709 709
  *     Définition SQL adaptée pour MySQL d'un champ de table
710 710
  */
711 711
 function _mysql_remplacements_definitions_table($query) {
712
-	// quelques remplacements
713
-	$num = "(\s*\([0-9]*\))?";
714
-	$enum = "(\s*\([^\)]*\))?";
715
-
716
-	$remplace = array(
717
-		'/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
718
-		'/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
719
-	);
720
-
721
-	if (is_string($query)) {
722
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
723
-	} elseif (is_array($query)) {
724
-		$keys = array_keys($remplace);
725
-		foreach ($query as $k => $q) {
726
-			$query[$k] = preg_replace($keys, $remplace, $q);
727
-		}
728
-	}
729
-
730
-	return $query;
712
+    // quelques remplacements
713
+    $num = "(\s*\([0-9]*\))?";
714
+    $enum = "(\s*\([^\)]*\))?";
715
+
716
+    $remplace = array(
717
+        '/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
718
+        '/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
719
+    );
720
+
721
+    if (is_string($query)) {
722
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
723
+    } elseif (is_array($query)) {
724
+        $keys = array_keys($remplace);
725
+        foreach ($query as $k => $q) {
726
+            $query[$k] = preg_replace($keys, $remplace, $q);
727
+        }
728
+    }
729
+
730
+    return $query;
731 731
 }
732 732
 
733 733
 
@@ -740,7 +740,7 @@  discard block
 block discarded – undo
740 740
  * @return bool true si la base est créee.
741 741
  **/
742 742
 function spip_mysql_create_base($nom, $serveur = '', $requeter = true) {
743
-	return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
743
+    return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
744 744
 }
745 745
 
746 746
 
@@ -761,19 +761,19 @@  discard block
 block discarded – undo
761 761
  *     - string texte de la requête si $requeter vaut false
762 762
  */
763 763
 function spip_mysql_create_view($nom, $query_select, $serveur = '', $requeter = true) {
764
-	if (!$query_select) {
765
-		return false;
766
-	}
767
-	// vue deja presente
768
-	if (sql_showtable($nom, false, $serveur)) {
769
-		spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
764
+    if (!$query_select) {
765
+        return false;
766
+    }
767
+    // vue deja presente
768
+    if (sql_showtable($nom, false, $serveur)) {
769
+        spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
770 770
 
771
-		return false;
772
-	}
771
+        return false;
772
+    }
773 773
 
774
-	$query = "CREATE VIEW $nom AS " . $query_select;
774
+    $query = "CREATE VIEW $nom AS " . $query_select;
775 775
 
776
-	return spip_mysql_query($query, $serveur, $requeter);
776
+    return spip_mysql_query($query, $serveur, $requeter);
777 777
 }
778 778
 
779 779
 
@@ -789,11 +789,11 @@  discard block
 block discarded – undo
789 789
  *     - true si la requête a réussie, false sinon
790 790
  */
791 791
 function spip_mysql_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
792
-	if ($exist) {
793
-		$exist = " IF EXISTS";
794
-	}
792
+    if ($exist) {
793
+        $exist = " IF EXISTS";
794
+    }
795 795
 
796
-	return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
796
+    return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
797 797
 }
798 798
 
799 799
 /**
@@ -808,11 +808,11 @@  discard block
 block discarded – undo
808 808
  *     - true si la requête a réussie, false sinon
809 809
  */
810 810
 function spip_mysql_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
811
-	if ($exist) {
812
-		$exist = " IF EXISTS";
813
-	}
811
+    if ($exist) {
812
+        $exist = " IF EXISTS";
813
+    }
814 814
 
815
-	return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
815
+    return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
816 816
 }
817 817
 
818 818
 /**
@@ -829,7 +829,7 @@  discard block
 block discarded – undo
829 829
  *     Ressource à utiliser avec sql_fetch()
830 830
  **/
831 831
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
832
-	return spip_mysql_query("SHOW TABLES LIKE " . _q($match), $serveur, $requeter);
832
+    return spip_mysql_query("SHOW TABLES LIKE " . _q($match), $serveur, $requeter);
833 833
 }
834 834
 
835 835
 /**
@@ -845,7 +845,7 @@  discard block
 block discarded – undo
845 845
  *     - true si la requête a réussie, false sinon
846 846
  */
847 847
 function spip_mysql_repair($table, $serveur = '', $requeter = true) {
848
-	return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
848
+    return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
849 849
 }
850 850
 
851 851
 
@@ -869,86 +869,86 @@  discard block
 block discarded – undo
869 869
  *     - array description de la table sinon
870 870
  */
871 871
 function spip_mysql_showtable($nom_table, $serveur = '', $requeter = true) {
872
-	$s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
873
-	if (!$s) {
874
-		return '';
875
-	}
876
-	if (!$requeter) {
877
-		return $s;
878
-	}
879
-
880
-	list(, $a) = mysqli_fetch_array($s, MYSQLI_NUM);
881
-	if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
882
-		$desc = $r[1];
883
-		// extraction d'une KEY éventuelle en prenant garde de ne pas
884
-		// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
885
-		if (preg_match("/^(.*?),([^,]*\sKEY[ (].*)$/s", $desc, $r)) {
886
-			$namedkeys = $r[2];
887
-			$desc = $r[1];
888
-		} else {
889
-			$namedkeys = "";
890
-		}
891
-
892
-		$fields = array();
893
-		foreach (preg_split("/,\s*`/", $desc) as $v) {
894
-			preg_match("/^\s*`?([^`]*)`\s*(.*)/", $v, $r);
895
-			$fields[strtolower($r[1])] = $r[2];
896
-		}
897
-		$keys = array();
898
-
899
-		foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
900
-			if (preg_match("/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/", $v, $r)) {
901
-				$k = str_replace("`", '', trim($r[1]));
902
-				$t = strtolower(str_replace("`", '', $r[2]));
903
-				if ($k && !isset($keys[$k])) {
904
-					$keys[$k] = $t;
905
-				} else {
906
-					$keys[] = $t;
907
-				}
908
-			}
909
-		}
910
-		spip_mysql_free($s);
911
-
912
-		return array('field' => $fields, 'key' => $keys);
913
-	}
914
-
915
-	$res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
916
-	if ($res) {
917
-		$nfields = array();
918
-		$nkeys = array();
919
-		while ($val = spip_mysql_fetch($res)) {
920
-			$nfields[$val["Field"]] = $val['Type'];
921
-			if ($val['Null'] == 'NO') {
922
-				$nfields[$val["Field"]] .= ' NOT NULL';
923
-			}
924
-			if ($val['Default'] === '0' || $val['Default']) {
925
-				if (preg_match('/[A-Z_]/', $val['Default'])) {
926
-					$nfields[$val["Field"]] .= ' DEFAULT ' . $val['Default'];
927
-				} else {
928
-					$nfields[$val["Field"]] .= " DEFAULT '" . $val['Default'] . "'";
929
-				}
930
-			}
931
-			if ($val['Extra']) {
932
-				$nfields[$val["Field"]] .= ' ' . $val['Extra'];
933
-			}
934
-			if ($val['Key'] == 'PRI') {
935
-				$nkeys['PRIMARY KEY'] = $val["Field"];
936
-			} else {
937
-				if ($val['Key'] == 'MUL') {
938
-					$nkeys['KEY ' . $val["Field"]] = $val["Field"];
939
-				} else {
940
-					if ($val['Key'] == 'UNI') {
941
-						$nkeys['UNIQUE KEY ' . $val["Field"]] = $val["Field"];
942
-					}
943
-				}
944
-			}
945
-		}
946
-		spip_mysql_free($res);
947
-
948
-		return array('field' => $nfields, 'key' => $nkeys);
949
-	}
950
-
951
-	return "";
872
+    $s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
873
+    if (!$s) {
874
+        return '';
875
+    }
876
+    if (!$requeter) {
877
+        return $s;
878
+    }
879
+
880
+    list(, $a) = mysqli_fetch_array($s, MYSQLI_NUM);
881
+    if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
882
+        $desc = $r[1];
883
+        // extraction d'une KEY éventuelle en prenant garde de ne pas
884
+        // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
885
+        if (preg_match("/^(.*?),([^,]*\sKEY[ (].*)$/s", $desc, $r)) {
886
+            $namedkeys = $r[2];
887
+            $desc = $r[1];
888
+        } else {
889
+            $namedkeys = "";
890
+        }
891
+
892
+        $fields = array();
893
+        foreach (preg_split("/,\s*`/", $desc) as $v) {
894
+            preg_match("/^\s*`?([^`]*)`\s*(.*)/", $v, $r);
895
+            $fields[strtolower($r[1])] = $r[2];
896
+        }
897
+        $keys = array();
898
+
899
+        foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
900
+            if (preg_match("/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/", $v, $r)) {
901
+                $k = str_replace("`", '', trim($r[1]));
902
+                $t = strtolower(str_replace("`", '', $r[2]));
903
+                if ($k && !isset($keys[$k])) {
904
+                    $keys[$k] = $t;
905
+                } else {
906
+                    $keys[] = $t;
907
+                }
908
+            }
909
+        }
910
+        spip_mysql_free($s);
911
+
912
+        return array('field' => $fields, 'key' => $keys);
913
+    }
914
+
915
+    $res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
916
+    if ($res) {
917
+        $nfields = array();
918
+        $nkeys = array();
919
+        while ($val = spip_mysql_fetch($res)) {
920
+            $nfields[$val["Field"]] = $val['Type'];
921
+            if ($val['Null'] == 'NO') {
922
+                $nfields[$val["Field"]] .= ' NOT NULL';
923
+            }
924
+            if ($val['Default'] === '0' || $val['Default']) {
925
+                if (preg_match('/[A-Z_]/', $val['Default'])) {
926
+                    $nfields[$val["Field"]] .= ' DEFAULT ' . $val['Default'];
927
+                } else {
928
+                    $nfields[$val["Field"]] .= " DEFAULT '" . $val['Default'] . "'";
929
+                }
930
+            }
931
+            if ($val['Extra']) {
932
+                $nfields[$val["Field"]] .= ' ' . $val['Extra'];
933
+            }
934
+            if ($val['Key'] == 'PRI') {
935
+                $nkeys['PRIMARY KEY'] = $val["Field"];
936
+            } else {
937
+                if ($val['Key'] == 'MUL') {
938
+                    $nkeys['KEY ' . $val["Field"]] = $val["Field"];
939
+                } else {
940
+                    if ($val['Key'] == 'UNI') {
941
+                        $nkeys['UNIQUE KEY ' . $val["Field"]] = $val["Field"];
942
+                    }
943
+                }
944
+            }
945
+        }
946
+        spip_mysql_free($res);
947
+
948
+        return array('field' => $nfields, 'key' => $nkeys);
949
+    }
950
+
951
+    return "";
952 952
 }
953 953
 
954 954
 
@@ -964,12 +964,12 @@  discard block
 block discarded – undo
964 964
  * @return array           Ligne de résultat
965 965
  */
966 966
 function spip_mysql_fetch($r, $t = '', $serveur = '', $requeter = true) {
967
-	if (!$t) {
968
-		$t = MYSQLI_ASSOC;
969
-	}
970
-	if ($r) {
971
-		return mysqli_fetch_array($r, $t);
972
-	}
967
+    if (!$t) {
968
+        $t = MYSQLI_ASSOC;
969
+    }
970
+    if ($r) {
971
+        return mysqli_fetch_array($r, $t);
972
+    }
973 973
 }
974 974
 
975 975
 /**
@@ -982,9 +982,9 @@  discard block
 block discarded – undo
982 982
  * @return bool True si déplacement réussi, false sinon.
983 983
  **/
984 984
 function spip_mysql_seek($r, $row_number, $serveur = '', $requeter = true) {
985
-	if ($r and mysqli_num_rows($r)) {
986
-		return mysqli_data_seek($r, $row_number);
987
-	}
985
+    if ($r and mysqli_num_rows($r)) {
986
+        return mysqli_data_seek($r, $row_number);
987
+    }
988 988
 }
989 989
 
990 990
 
@@ -1002,26 +1002,26 @@  discard block
 block discarded – undo
1002 1002
  *     - int Nombre de lignes (0 si la requête n'a pas réussie)
1003 1003
  **/
1004 1004
 function spip_mysql_countsel(
1005
-	$from = array(),
1006
-	$where = array(),
1007
-	$groupby = '',
1008
-	$having = array(),
1009
-	$serveur = '',
1010
-	$requeter = true
1005
+    $from = array(),
1006
+    $where = array(),
1007
+    $groupby = '',
1008
+    $having = array(),
1009
+    $serveur = '',
1010
+    $requeter = true
1011 1011
 ) {
1012
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1013
-
1014
-	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1015
-	if (!$requeter) {
1016
-		return $r;
1017
-	}
1018
-	if (!$r instanceof mysqli_result) {
1019
-		return 0;
1020
-	}
1021
-	list($c) = mysqli_fetch_array($r, MYSQLI_NUM);
1022
-	mysqli_free_result($r);
1023
-
1024
-	return $c;
1012
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1013
+
1014
+    $r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1015
+    if (!$requeter) {
1016
+        return $r;
1017
+    }
1018
+    if (!$r instanceof mysqli_result) {
1019
+        return 0;
1020
+    }
1021
+    list($c) = mysqli_fetch_array($r, MYSQLI_NUM);
1022
+    mysqli_free_result($r);
1023
+
1024
+    return $c;
1025 1025
 }
1026 1026
 
1027 1027
 
@@ -1044,16 +1044,16 @@  discard block
 block discarded – undo
1044 1044
  *     Erreur eventuelle
1045 1045
  **/
1046 1046
 function spip_mysql_error($query = '', $serveur = '', $requeter = true) {
1047
-	$link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1048
-	$s = mysqli_error($link);
1049
-	if ($s) {
1050
-		$trace = debug_backtrace();
1051
-		if ($trace[0]['function'] != "spip_mysql_error") {
1052
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1053
-		}
1054
-	}
1055
-
1056
-	return $s;
1047
+    $link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1048
+    $s = mysqli_error($link);
1049
+    if ($s) {
1050
+        $trace = debug_backtrace();
1051
+        if ($trace[0]['function'] != "spip_mysql_error") {
1052
+            spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1053
+        }
1054
+    }
1055
+
1056
+    return $s;
1057 1057
 }
1058 1058
 
1059 1059
 
@@ -1068,18 +1068,18 @@  discard block
 block discarded – undo
1068 1068
  *     0, pas d'erreur. Autre, numéro de l'erreur.
1069 1069
  **/
1070 1070
 function spip_mysql_errno($serveur = '', $requeter = true) {
1071
-	$link = $GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
1072
-	$s = mysqli_errno($link);
1073
-	// 2006 MySQL server has gone away
1074
-	// 2013 Lost connection to MySQL server during query
1075
-	if (in_array($s, array(2006, 2013))) {
1076
-		define('spip_interdire_cache', true);
1077
-	}
1078
-	if ($s) {
1079
-		spip_log("Erreur mysql $s", _LOG_ERREUR);
1080
-	}
1081
-
1082
-	return $s;
1071
+    $link = $GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
1072
+    $s = mysqli_errno($link);
1073
+    // 2006 MySQL server has gone away
1074
+    // 2013 Lost connection to MySQL server during query
1075
+    if (in_array($s, array(2006, 2013))) {
1076
+        define('spip_interdire_cache', true);
1077
+    }
1078
+    if ($s) {
1079
+        spip_log("Erreur mysql $s", _LOG_ERREUR);
1080
+    }
1081
+
1082
+    return $s;
1083 1083
 }
1084 1084
 
1085 1085
 
@@ -1093,9 +1093,9 @@  discard block
 block discarded – undo
1093 1093
  * @return int               Nombre de lignes
1094 1094
  */
1095 1095
 function spip_mysql_count($r, $serveur = '', $requeter = true) {
1096
-	if ($r) {
1097
-		return mysqli_num_rows($r);
1098
-	}
1096
+    if ($r) {
1097
+        return mysqli_num_rows($r);
1098
+    }
1099 1099
 }
1100 1100
 
1101 1101
 
@@ -1111,7 +1111,7 @@  discard block
 block discarded – undo
1111 1111
  * @return bool              True si réussi
1112 1112
  */
1113 1113
 function spip_mysql_free($r, $serveur = '', $requeter = true) {
1114
-	return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1114
+    return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1115 1115
 }
1116 1116
 
1117 1117
 
@@ -1139,47 +1139,47 @@  discard block
 block discarded – undo
1139 1139
  **/
1140 1140
 function spip_mysql_insert($table, $champs, $valeurs, $desc = array(), $serveur = '', $requeter = true) {
1141 1141
 
1142
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1143
-	$link = $connexion['link'];
1144
-	$table = prefixer_table_spip($table, $connexion['prefixe']);
1145
-
1146
-	// remplacer les emoji (que mysql ne sait pas gérer) en 💩
1147
-	if (defined('_MYSQL_NOPLANES')
1148
-		and _MYSQL_NOPLANES
1149
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
1150
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8') {
1151
-		include_spip('inc/charsets');
1152
-		$valeurs = utf8_noplanes($valeurs);
1153
-	}
1154
-
1155
-	$query = "INSERT INTO $table $champs VALUES $valeurs";
1156
-	if (!$requeter) {
1157
-		return $query;
1158
-	}
1159
-
1160
-	if (isset($_GET['var_profile'])) {
1161
-		include_spip('public/tracer');
1162
-		$t = trace_query_start();
1163
-		$e = '';
1164
-	} else {
1165
-		$t = 0;
1166
-	}
1167
-
1168
-	$connexion['last'] = $query;
1169
-	#spip_log($query, 'mysql.'._LOG_DEBUG);
1170
-	$r = false;
1171
-	if (mysqli_query($link, $query)) {
1172
-		$r = mysqli_insert_id($link);
1173
-	} else {
1174
-		// Log de l'erreur eventuelle
1175
-		if ($e = spip_mysql_errno($serveur)) {
1176
-			$e .= spip_mysql_error($query, $serveur);
1177
-		} // et du fautif
1178
-	}
1179
-
1180
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1181
-
1182
-	// return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1142
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1143
+    $link = $connexion['link'];
1144
+    $table = prefixer_table_spip($table, $connexion['prefixe']);
1145
+
1146
+    // remplacer les emoji (que mysql ne sait pas gérer) en 💩
1147
+    if (defined('_MYSQL_NOPLANES')
1148
+        and _MYSQL_NOPLANES
1149
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
1150
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8') {
1151
+        include_spip('inc/charsets');
1152
+        $valeurs = utf8_noplanes($valeurs);
1153
+    }
1154
+
1155
+    $query = "INSERT INTO $table $champs VALUES $valeurs";
1156
+    if (!$requeter) {
1157
+        return $query;
1158
+    }
1159
+
1160
+    if (isset($_GET['var_profile'])) {
1161
+        include_spip('public/tracer');
1162
+        $t = trace_query_start();
1163
+        $e = '';
1164
+    } else {
1165
+        $t = 0;
1166
+    }
1167
+
1168
+    $connexion['last'] = $query;
1169
+    #spip_log($query, 'mysql.'._LOG_DEBUG);
1170
+    $r = false;
1171
+    if (mysqli_query($link, $query)) {
1172
+        $r = mysqli_insert_id($link);
1173
+    } else {
1174
+        // Log de l'erreur eventuelle
1175
+        if ($e = spip_mysql_errno($serveur)) {
1176
+            $e .= spip_mysql_error($query, $serveur);
1177
+        } // et du fautif
1178
+    }
1179
+
1180
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1181
+
1182
+    // return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1183 1183
 }
1184 1184
 
1185 1185
 /**
@@ -1204,20 +1204,20 @@  discard block
 block discarded – undo
1204 1204
  **/
1205 1205
 function spip_mysql_insertq($table, $couples = array(), $desc = array(), $serveur = '', $requeter = true) {
1206 1206
 
1207
-	if (!$desc) {
1208
-		$desc = description_table($table, $serveur);
1209
-	}
1210
-	if (!$desc) {
1211
-		$couples = array();
1212
-	}
1213
-	$fields = isset($desc['field']) ? $desc['field'] : array();
1207
+    if (!$desc) {
1208
+        $desc = description_table($table, $serveur);
1209
+    }
1210
+    if (!$desc) {
1211
+        $couples = array();
1212
+    }
1213
+    $fields = isset($desc['field']) ? $desc['field'] : array();
1214 1214
 
1215
-	foreach ($couples as $champ => $val) {
1216
-		$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1217
-	}
1215
+    foreach ($couples as $champ => $val) {
1216
+        $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1217
+    }
1218 1218
 
1219
-	return spip_mysql_insert($table, "(" . join(',', array_keys($couples)) . ")", "(" . join(',', $couples) . ")", $desc,
1220
-		$serveur, $requeter);
1219
+    return spip_mysql_insert($table, "(" . join(',', array_keys($couples)) . ")", "(" . join(',', $couples) . ")", $desc,
1220
+        $serveur, $requeter);
1221 1221
 }
1222 1222
 
1223 1223
 
@@ -1242,34 +1242,34 @@  discard block
 block discarded – undo
1242 1242
  **/
1243 1243
 function spip_mysql_insertq_multi($table, $tab_couples = array(), $desc = array(), $serveur = '', $requeter = true) {
1244 1244
 
1245
-	if (!$desc) {
1246
-		$desc = description_table($table, $serveur);
1247
-	}
1248
-	if (!$desc) {
1249
-		$tab_couples = array();
1250
-	}
1251
-	$fields = isset($desc['field']) ? $desc['field'] : array();
1252
-
1253
-	$cles = "(" . join(',', array_keys(reset($tab_couples))) . ')';
1254
-	$valeurs = array();
1255
-	$r = false;
1256
-
1257
-	// Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1258
-	foreach ($tab_couples as $couples) {
1259
-		foreach ($couples as $champ => $val) {
1260
-			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1261
-		}
1262
-		$valeurs[] = '(' . join(',', $couples) . ')';
1263
-		if (count($valeurs) >= 100) {
1264
-			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1265
-			$valeurs = array();
1266
-		}
1267
-	}
1268
-	if (count($valeurs)) {
1269
-		$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1270
-	}
1271
-
1272
-	return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1245
+    if (!$desc) {
1246
+        $desc = description_table($table, $serveur);
1247
+    }
1248
+    if (!$desc) {
1249
+        $tab_couples = array();
1250
+    }
1251
+    $fields = isset($desc['field']) ? $desc['field'] : array();
1252
+
1253
+    $cles = "(" . join(',', array_keys(reset($tab_couples))) . ')';
1254
+    $valeurs = array();
1255
+    $r = false;
1256
+
1257
+    // Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1258
+    foreach ($tab_couples as $couples) {
1259
+        foreach ($couples as $champ => $val) {
1260
+            $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1261
+        }
1262
+        $valeurs[] = '(' . join(',', $couples) . ')';
1263
+        if (count($valeurs) >= 100) {
1264
+            $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1265
+            $valeurs = array();
1266
+        }
1267
+    }
1268
+    if (count($valeurs)) {
1269
+        $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1270
+    }
1271
+
1272
+    return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1273 1273
 }
1274 1274
 
1275 1275
 /**
@@ -1294,17 +1294,17 @@  discard block
 block discarded – undo
1294 1294
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1295 1295
  */
1296 1296
 function spip_mysql_update($table, $champs, $where = '', $desc = array(), $serveur = '', $requeter = true) {
1297
-	$set = array();
1298
-	foreach ($champs as $champ => $val) {
1299
-		$set[] = $champ . "=$val";
1300
-	}
1301
-	if (!empty($set)) {
1302
-		return spip_mysql_query(
1303
-			calculer_mysql_expression('UPDATE', $table, ',')
1304
-			. calculer_mysql_expression('SET', $set, ',')
1305
-			. calculer_mysql_expression('WHERE', $where),
1306
-			$serveur, $requeter);
1307
-	}
1297
+    $set = array();
1298
+    foreach ($champs as $champ => $val) {
1299
+        $set[] = $champ . "=$val";
1300
+    }
1301
+    if (!empty($set)) {
1302
+        return spip_mysql_query(
1303
+            calculer_mysql_expression('UPDATE', $table, ',')
1304
+            . calculer_mysql_expression('SET', $set, ',')
1305
+            . calculer_mysql_expression('WHERE', $where),
1306
+            $serveur, $requeter);
1307
+    }
1308 1308
 }
1309 1309
 
1310 1310
 /**
@@ -1337,27 +1337,27 @@  discard block
 block discarded – undo
1337 1337
  */
1338 1338
 function spip_mysql_updateq($table, $champs, $where = '', $desc = array(), $serveur = '', $requeter = true) {
1339 1339
 
1340
-	if (!$champs) {
1341
-		return;
1342
-	}
1343
-	if (!$desc) {
1344
-		$desc = description_table($table, $serveur);
1345
-	}
1346
-	if (!$desc) {
1347
-		$champs = array();
1348
-	} else {
1349
-		$fields = $desc['field'];
1350
-	}
1351
-	$set = array();
1352
-	foreach ($champs as $champ => $val) {
1353
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1354
-	}
1355
-
1356
-	return spip_mysql_query(
1357
-		calculer_mysql_expression('UPDATE', $table, ',')
1358
-		. calculer_mysql_expression('SET', $set, ',')
1359
-		. calculer_mysql_expression('WHERE', $where),
1360
-		$serveur, $requeter);
1340
+    if (!$champs) {
1341
+        return;
1342
+    }
1343
+    if (!$desc) {
1344
+        $desc = description_table($table, $serveur);
1345
+    }
1346
+    if (!$desc) {
1347
+        $champs = array();
1348
+    } else {
1349
+        $fields = $desc['field'];
1350
+    }
1351
+    $set = array();
1352
+    foreach ($champs as $champ => $val) {
1353
+        $set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1354
+    }
1355
+
1356
+    return spip_mysql_query(
1357
+        calculer_mysql_expression('UPDATE', $table, ',')
1358
+        . calculer_mysql_expression('SET', $set, ',')
1359
+        . calculer_mysql_expression('WHERE', $where),
1360
+        $serveur, $requeter);
1361 1361
 }
1362 1362
 
1363 1363
 /**
@@ -1373,20 +1373,20 @@  discard block
 block discarded – undo
1373 1373
  *     - False en cas d'erreur.
1374 1374
  **/
1375 1375
 function spip_mysql_delete($table, $where = '', $serveur = '', $requeter = true) {
1376
-	$res = spip_mysql_query(
1377
-		calculer_mysql_expression('DELETE FROM', $table, ',')
1378
-		. calculer_mysql_expression('WHERE', $where),
1379
-		$serveur, $requeter);
1380
-	if (!$requeter) {
1381
-		return $res;
1382
-	}
1383
-	if ($res) {
1384
-		$link = _mysql_link($serveur);
1385
-
1386
-		return mysqli_affected_rows($link);
1387
-	} else {
1388
-		return false;
1389
-	}
1376
+    $res = spip_mysql_query(
1377
+        calculer_mysql_expression('DELETE FROM', $table, ',')
1378
+        . calculer_mysql_expression('WHERE', $where),
1379
+        $serveur, $requeter);
1380
+    if (!$requeter) {
1381
+        return $res;
1382
+    }
1383
+    if ($res) {
1384
+        $link = _mysql_link($serveur);
1385
+
1386
+        return mysqli_affected_rows($link);
1387
+    } else {
1388
+        return false;
1389
+    }
1390 1390
 }
1391 1391
 
1392 1392
 
@@ -1415,8 +1415,8 @@  discard block
 block discarded – undo
1415 1415
  *     - False en cas d'erreur.
1416 1416
  **/
1417 1417
 function spip_mysql_replace($table, $couples, $desc = array(), $serveur = '', $requeter = true) {
1418
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(',',
1419
-			array_map('_q', $couples)) . ')', $serveur, $requeter);
1418
+    return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(',',
1419
+            array_map('_q', $couples)) . ')', $serveur, $requeter);
1420 1420
 }
1421 1421
 
1422 1422
 
@@ -1445,14 +1445,14 @@  discard block
 block discarded – undo
1445 1445
  *     - False en cas d'erreur.
1446 1446
  **/
1447 1447
 function spip_mysql_replace_multi($table, $tab_couples, $desc = array(), $serveur = '', $requeter = true) {
1448
-	$cles = "(" . join(',', array_keys($tab_couples[0])) . ')';
1449
-	$valeurs = array();
1450
-	foreach ($tab_couples as $couples) {
1451
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1452
-	}
1453
-	$valeurs = implode(', ', $valeurs);
1454
-
1455
-	return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1448
+    $cles = "(" . join(',', array_keys($tab_couples[0])) . ')';
1449
+    $valeurs = array();
1450
+    foreach ($tab_couples as $couples) {
1451
+        $valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1452
+    }
1453
+    $valeurs = implode(', ', $valeurs);
1454
+
1455
+    return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1456 1456
 }
1457 1457
 
1458 1458
 
@@ -1467,32 +1467,32 @@  discard block
 block discarded – undo
1467 1467
  * @return string       Texte de sélection pour la requête
1468 1468
  */
1469 1469
 function spip_mysql_multi($objet, $lang) {
1470
-	$lengthlang = strlen("[$lang]");
1471
-	$posmulti = "INSTR(" . $objet . ", '<multi>')";
1472
-	$posfinmulti = "INSTR(" . $objet . ", '</multi>')";
1473
-	$debutchaine = "LEFT(" . $objet . ", $posmulti-1)";
1474
-	$finchaine = "RIGHT(" . $objet . ", CHAR_LENGTH(" . $objet . ") -(7+$posfinmulti))";
1475
-	$chainemulti = "TRIM(SUBSTRING(" . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1476
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1477
-	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1478
-	$chainelang = "TRIM(SUBSTRING(" . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1479
-	$posfinlang = "INSTR(" . $chainelang . ", '[')";
1480
-	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1481
-	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1482
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1483
-		"     TRIM(" . $objet . "), " .
1484
-		"     CONCAT( " .
1485
-		"          $debutchaine, " .
1486
-		"          IF( " .
1487
-		"               $poslang = 0, " .
1488
-		"                     $chainemulti, " .
1489
-		"               $chainelang" .
1490
-		"          ), " .
1491
-		"          $finchaine" .
1492
-		"     ) " .
1493
-		"))) AS multi";
1494
-
1495
-	return $retour;
1470
+    $lengthlang = strlen("[$lang]");
1471
+    $posmulti = "INSTR(" . $objet . ", '<multi>')";
1472
+    $posfinmulti = "INSTR(" . $objet . ", '</multi>')";
1473
+    $debutchaine = "LEFT(" . $objet . ", $posmulti-1)";
1474
+    $finchaine = "RIGHT(" . $objet . ", CHAR_LENGTH(" . $objet . ") -(7+$posfinmulti))";
1475
+    $chainemulti = "TRIM(SUBSTRING(" . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1476
+    $poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1477
+    $poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1478
+    $chainelang = "TRIM(SUBSTRING(" . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1479
+    $posfinlang = "INSTR(" . $chainelang . ", '[')";
1480
+    $chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1481
+    //$chainelang = "LEFT($chainelang,$posfinlang-1)";
1482
+    $retour = "(TRIM(IF($posmulti = 0 , " .
1483
+        "     TRIM(" . $objet . "), " .
1484
+        "     CONCAT( " .
1485
+        "          $debutchaine, " .
1486
+        "          IF( " .
1487
+        "               $poslang = 0, " .
1488
+        "                     $chainemulti, " .
1489
+        "               $chainelang" .
1490
+        "          ), " .
1491
+        "          $finchaine" .
1492
+        "     ) " .
1493
+        "))) AS multi";
1494
+
1495
+    return $retour;
1496 1496
 }
1497 1497
 
1498 1498
 /**
@@ -1506,7 +1506,7 @@  discard block
 block discarded – undo
1506 1506
  *     Valeur hexadécimale pour MySQL
1507 1507
  **/
1508 1508
 function spip_mysql_hex($v) {
1509
-	return "0x" . $v;
1509
+    return "0x" . $v;
1510 1510
 }
1511 1511
 
1512 1512
 /**
@@ -1522,15 +1522,15 @@  discard block
 block discarded – undo
1522 1522
  *    Donnée prête à être utilisée par le gestionnaire SQL
1523 1523
  */
1524 1524
 function spip_mysql_quote($v, $type = '') {
1525
-	if (!is_array($v)) {
1526
-		return spip_mysql_cite($v, $type);
1527
-	}
1528
-
1529
-	// si c'est un tableau, le parcourir en propageant le type
1530
-	foreach ($v as $k => $r) {
1531
-		$v[$k] = spip_mysql_quote($r, $type);
1532
-	}
1533
-	return implode(',', $v);
1525
+    if (!is_array($v)) {
1526
+        return spip_mysql_cite($v, $type);
1527
+    }
1528
+
1529
+    // si c'est un tableau, le parcourir en propageant le type
1530
+    foreach ($v as $k => $r) {
1531
+        $v[$k] = spip_mysql_quote($r, $type);
1532
+    }
1533
+    return implode(',', $v);
1534 1534
 }
1535 1535
 
1536 1536
 /**
@@ -1546,18 +1546,18 @@  discard block
 block discarded – undo
1546 1546
  *     Expression SQL
1547 1547
  **/
1548 1548
 function spip_mysql_date_proche($champ, $interval, $unite) {
1549
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1550
-	return '('
1551
-	. $champ
1552
-	. (($interval <= 0) ? '>' : '<')
1553
-	. (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1554
-	. '('
1555
-	. ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1556
-	. ', INTERVAL '
1557
-	. (($interval > 0) ? $interval : (0 - $interval))
1558
-	. ' '
1559
-	. $unite
1560
-	. '))';
1549
+    $use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1550
+    return '('
1551
+    . $champ
1552
+    . (($interval <= 0) ? '>' : '<')
1553
+    . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1554
+    . '('
1555
+    . ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1556
+    . ', INTERVAL '
1557
+    . (($interval > 0) ? $interval : (0 - $interval))
1558
+    . ' '
1559
+    . $unite
1560
+    . '))';
1561 1561
 }
1562 1562
 
1563 1563
 
@@ -1581,7 +1581,7 @@  discard block
 block discarded – undo
1581 1581
  *     Expression de requête SQL
1582 1582
  **/
1583 1583
 function spip_mysql_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) {
1584
-	return "($val $not IN ($valeurs))";
1584
+    return "($val $not IN ($valeurs))";
1585 1585
 }
1586 1586
 
1587 1587
 
@@ -1593,36 +1593,36 @@  discard block
 block discarded – undo
1593 1593
  * @return string|number     Texte ou nombre échappé
1594 1594
  */
1595 1595
 function spip_mysql_cite($v, $type) {
1596
-	if (!$type) {
1597
-		if (is_bool($v)) {
1598
-			return strval(intval($v));
1599
-		}
1600
-		elseif (is_numeric($v)) {
1601
-			return strval($v);
1602
-		}
1603
-		return "'" . addslashes($v) . "'";
1604
-	}
1605
-
1606
-	if (is_null($v)
1607
-		and stripos($type, "NOT NULL") === false
1608
-	) {
1609
-		return 'NULL';
1610
-	} // null php se traduit en NULL SQL
1611
-	if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1612
-		return $v;
1613
-	}
1614
-	if (sql_test_int($type)) {
1615
-		if (is_numeric($v) or (ctype_xdigit(substr($v, 2))
1616
-				and $v[0] == '0' and $v[1] == 'x')
1617
-		) {
1618
-			return $v;
1619
-		} // si pas numerique, forcer le intval
1620
-		else {
1621
-			return intval($v);
1622
-		}
1623
-	}
1624
-
1625
-	return ("'" . addslashes($v) . "'");
1596
+    if (!$type) {
1597
+        if (is_bool($v)) {
1598
+            return strval(intval($v));
1599
+        }
1600
+        elseif (is_numeric($v)) {
1601
+            return strval($v);
1602
+        }
1603
+        return "'" . addslashes($v) . "'";
1604
+    }
1605
+
1606
+    if (is_null($v)
1607
+        and stripos($type, "NOT NULL") === false
1608
+    ) {
1609
+        return 'NULL';
1610
+    } // null php se traduit en NULL SQL
1611
+    if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1612
+        return $v;
1613
+    }
1614
+    if (sql_test_int($type)) {
1615
+        if (is_numeric($v) or (ctype_xdigit(substr($v, 2))
1616
+                and $v[0] == '0' and $v[1] == 'x')
1617
+        ) {
1618
+            return $v;
1619
+        } // si pas numerique, forcer le intval
1620
+        else {
1621
+            return intval($v);
1622
+        }
1623
+    }
1624
+
1625
+    return ("'" . addslashes($v) . "'");
1626 1626
 }
1627 1627
 
1628 1628
 /**
@@ -1632,7 +1632,7 @@  discard block
 block discarded – undo
1632 1632
  *     True si on a les fonctions, false sinon
1633 1633
  */
1634 1634
 function spip_versions_mysql() {
1635
-	return function_exists('mysqli_query');
1635
+    return function_exists('mysqli_query');
1636 1636
 }
1637 1637
 
1638 1638
 
@@ -1645,20 +1645,20 @@  discard block
 block discarded – undo
1645 1645
  *     - chaîne : code compilé pour le faire désactiver par SPIP sinon
1646 1646
  */
1647 1647
 function test_rappel_nom_base_mysql($server_db) {
1648
-	$GLOBALS['mysql_rappel_nom_base'] = true;
1649
-	sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1650
-	$ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1648
+    $GLOBALS['mysql_rappel_nom_base'] = true;
1649
+    sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1650
+    $ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1651 1651
 
1652
-	if ($ok) {
1653
-		sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1652
+    if ($ok) {
1653
+        sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1654 1654
 
1655
-		return '';
1656
-	} else {
1657
-		$GLOBALS['mysql_rappel_nom_base'] = false;
1655
+        return '';
1656
+    } else {
1657
+        $GLOBALS['mysql_rappel_nom_base'] = false;
1658 1658
 
1659
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1660
-		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1661
-	}
1659
+        return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1660
+        "/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1661
+    }
1662 1662
 }
1663 1663
 
1664 1664
 /**
@@ -1672,13 +1672,13 @@  discard block
 block discarded – undo
1672 1672
  *     - chaîne : code compilé pour l'indiquer le résultat du test à SPIP
1673 1673
  */
1674 1674
 function test_sql_mode_mysql($server_db) {
1675
-	$res = sql_select("version() as v", '', '', '', '', '', '', $server_db);
1676
-	$row = sql_fetch($res, $server_db);
1677
-	if (version_compare($row['v'], '5.0.0', '>=')) {
1678
-		defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1675
+    $res = sql_select("version() as v", '', '', '', '', '', '', $server_db);
1676
+    $row = sql_fetch($res, $server_db);
1677
+    if (version_compare($row['v'], '5.0.0', '>=')) {
1678
+        defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1679 1679
 
1680
-		return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1681
-	}
1680
+        return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1681
+    }
1682 1682
 
1683
-	return '';
1683
+    return '';
1684 1684
 }
Please login to merge, or discard this patch.
Spacing   +73 added lines, -73 removed lines patch added patch discarded remove patch
@@ -48,7 +48,7 @@  discard block
 block discarded – undo
48 48
 	// si port est fourni mais pas host, c'est un socket -> compat avec vieille syntaxe de mysql_connect() et anciens fichiers connect.php
49 49
 	if (
50 50
 		$port and !is_numeric($socket = $port)
51
-		and (!$host or $host=='localhost')) {
51
+		and (!$host or $host == 'localhost')) {
52 52
 		$link = @mysqli_connect($host, $login, $pass, '', null, $socket);
53 53
 	}
54 54
 	elseif ($port) {
@@ -59,7 +59,7 @@  discard block
 block discarded – undo
59 59
 	}
60 60
 
61 61
 	if (!$link) {
62
-		spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
62
+		spip_log('Echec mysqli_connect. Erreur : '.mysqli_connect_error(), 'mysql.'._LOG_HS);
63 63
 
64 64
 		return false;
65 65
 	}
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
 		}
77 77
 	}
78 78
 
79
-	spip_log("Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? "operationnelle" : 'impossible'),
79
+	spip_log("Connexion MySQLi vers $host, base $db, prefixe $prefixe ".($ok ? "operationnelle" : 'impossible'),
80 80
 		_LOG_DEBUG);
81 81
 
82 82
 	return !$ok ? false : array(
@@ -165,9 +165,9 @@  discard block
 block discarded – undo
165 165
  */
166 166
 function spip_mysql_set_charset($charset, $serveur = '', $requeter = true) {
167 167
 	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
168
-	spip_log("changement de charset sql : " . "SET NAMES " . _q($charset), _LOG_DEBUG);
168
+	spip_log("changement de charset sql : "."SET NAMES "._q($charset), _LOG_DEBUG);
169 169
 
170
-	return mysqli_query($connexion['link'], $connexion['last'] = "SET NAMES " . _q($charset));
170
+	return mysqli_query($connexion['link'], $connexion['last'] = "SET NAMES "._q($charset));
171 171
 }
172 172
 
173 173
 
@@ -182,7 +182,7 @@  discard block
 block discarded – undo
182 182
 function spip_mysql_get_charset($charset = array(), $serveur = '', $requeter = true) {
183 183
 	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
184 184
 	$connexion['last'] = $c = "SHOW CHARACTER SET"
185
-		. (!$charset ? '' : (" LIKE " . _q($charset['charset'])));
185
+		. (!$charset ? '' : (" LIKE "._q($charset['charset'])));
186 186
 
187 187
 	return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
188 188
 }
@@ -226,19 +226,19 @@  discard block
 block discarded – undo
226 226
 	$debug = '';
227 227
 	if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
228 228
 		if (isset($GLOBALS['debug']['aucasou'])) {
229
-			list(, $id, , $infos) = $GLOBALS['debug']['aucasou'];
230
-			$debug .= "BOUCLE$id @ " . (isset($infos[0]) ? $infos[0] : '') . " | ";
229
+			list(, $id,, $infos) = $GLOBALS['debug']['aucasou'];
230
+			$debug .= "BOUCLE$id @ ".(isset($infos[0]) ? $infos[0] : '')." | ";
231 231
 		}
232 232
 		if (isset($_SERVER['REQUEST_URI'])) {
233 233
 			$debug .= $_SERVER['REQUEST_URI'];
234 234
 		}
235 235
 		if (!empty($GLOBALS['ip'])) {
236
-			$debug .= ' + ' . $GLOBALS['ip'];
236
+			$debug .= ' + '.$GLOBALS['ip'];
237 237
 		}
238
-		$debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
238
+		$debug = ' /* '.mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)).' */';
239 239
 	}
240 240
 
241
-	$r = mysqli_query($link, $query . $debug);
241
+	$r = mysqli_query($link, $query.$debug);
242 242
 
243 243
 	//Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
244 244
 	if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
@@ -251,7 +251,7 @@  discard block
 block discarded – undo
251 251
 			$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
252 252
 			$link = $connexion['link'];
253 253
 			//On retente au cas où
254
-			$r = mysqli_query($link, $query . $debug);
254
+			$r = mysqli_query($link, $query.$debug);
255 255
 		}
256 256
 	}
257 257
 
@@ -279,7 +279,7 @@  discard block
 block discarded – undo
279 279
 	// d'utiliser ceux-ci, copie-colle de phpmyadmin
280 280
 	$query = preg_replace(",^TABLE\s*`([^`]*)`,i", "TABLE \\1", $query);
281 281
 
282
-	return spip_mysql_query("ALTER " . $query, $serveur, $requeter); # i.e. que PG se debrouille
282
+	return spip_mysql_query("ALTER ".$query, $serveur, $requeter); # i.e. que PG se debrouille
283 283
 }
284 284
 
285 285
 
@@ -292,7 +292,7 @@  discard block
 block discarded – undo
292 292
  * @return bool            Toujours true
293 293
  */
294 294
 function spip_mysql_optimize($table, $serveur = '', $requeter = true) {
295
-	spip_mysql_query("OPTIMIZE TABLE " . $table);
295
+	spip_mysql_query("OPTIMIZE TABLE ".$table);
296 296
 
297 297
 	return true;
298 298
 }
@@ -315,7 +315,7 @@  discard block
 block discarded – undo
315 315
 	$link = $connexion['link'];
316 316
 	$db = $connexion['db'];
317 317
 
318
-	$query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
318
+	$query = 'EXPLAIN '._mysql_traite_query($query, $db, $prefixe);
319 319
 	$r = mysqli_query($link, $query);
320 320
 
321 321
 	return spip_mysql_fetch($r, null, $serveur);
@@ -366,7 +366,7 @@  discard block
 block discarded – undo
366 366
 		. calculer_mysql_expression('WHERE', $where)
367 367
 		. calculer_mysql_expression('GROUP BY', $groupby, ',')
368 368
 		. calculer_mysql_expression('HAVING', $having)
369
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
369
+		. ($orderby ? ("\nORDER BY ".spip_mysql_order($orderby)) : '')
370 370
 		. ($limit ? "\nLIMIT $limit" : '');
371 371
 
372 372
 	// renvoyer la requete inerte si demandee
@@ -456,12 +456,12 @@  discard block
 block discarded – undo
456 456
 	$exp = "\n$expression ";
457 457
 
458 458
 	if (!is_array($v)) {
459
-		return $exp . $v;
459
+		return $exp.$v;
460 460
 	} else {
461 461
 		if (strtoupper($join) === 'AND') {
462
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
462
+			return $exp.join("\n\t$join ", array_map('calculer_mysql_where', $v));
463 463
 		} else {
464
-			return $exp . join($join, $v);
464
+			return $exp.join($join, $v);
465 465
 		}
466 466
 	}
467 467
 }
@@ -479,17 +479,17 @@  discard block
 block discarded – undo
479 479
 		if (substr($k, -1) == '@') {
480 480
 			// c'est une jointure qui se refere au from precedent
481 481
 			// pas de virgule
482
-			$res .= '  ' . $v;
482
+			$res .= '  '.$v;
483 483
 		} else {
484 484
 			if (!is_numeric($k)) {
485 485
 				$p = strpos($v, " ");
486 486
 				if ($p) {
487
-					$v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
487
+					$v = substr($v, 0, $p)." AS `$k`".substr($v, $p);
488 488
 				} else {
489 489
 					$v .= " AS `$k`";
490 490
 				}
491 491
 			}
492
-			$res .= ', ' . $v;
492
+			$res .= ', '.$v;
493 493
 		}
494 494
 	}
495 495
 
@@ -518,13 +518,13 @@  discard block
 block discarded – undo
518 518
 function _mysql_traite_query($query, $db = '', $prefixe = '') {
519 519
 
520 520
 	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
521
-		$pref = '`' . $db . '`.';
521
+		$pref = '`'.$db.'`.';
522 522
 	} else {
523 523
 		$pref = '';
524 524
 	}
525 525
 
526 526
 	if ($prefixe) {
527
-		$pref .= $prefixe . "_";
527
+		$pref .= $prefixe."_";
528 528
 	}
529 529
 
530 530
 	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
@@ -538,12 +538,12 @@  discard block
 block discarded – undo
538 538
 		if (stripos($suite, "SELECT") !== false) {
539 539
 			list($suite, $textes) = query_echappe_textes($suite);
540 540
 			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r)) {
541
-				$suite = $r[1] . _mysql_traite_query($r[2], $db, $prefixe);
541
+				$suite = $r[1]._mysql_traite_query($r[2], $db, $prefixe);
542 542
 			}
543 543
 			$suite = query_reinjecte_textes($suite, $textes);
544 544
 		}
545 545
 	}
546
-	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
546
+	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1'.$pref, $query).$suite;
547 547
 
548 548
 	// en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
549 549
 	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
@@ -577,7 +577,7 @@  discard block
 block discarded – undo
577 577
 	$link = _mysql_link($serveur);
578 578
 	$ok = mysqli_select_db($link, $db);
579 579
 	if (!$ok) {
580
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
580
+		spip_log('Echec mysqli_selectdb. Erreur : '.mysqli_error($link), 'mysql.'._LOG_CRITIQUE);
581 581
 	}
582 582
 
583 583
 	return $ok;
@@ -667,10 +667,10 @@  discard block
 block discarded – undo
667 667
 
668 668
 	$character_set = "";
669 669
 	if (@$GLOBALS['meta']['charset_sql_base']) {
670
-		$character_set .= " CHARACTER SET " . $GLOBALS['meta']['charset_sql_base'];
670
+		$character_set .= " CHARACTER SET ".$GLOBALS['meta']['charset_sql_base'];
671 671
 	}
672 672
 	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
673
-		$character_set .= " COLLATE " . $GLOBALS['meta']['charset_collation_sql_base'];
673
+		$character_set .= " COLLATE ".$GLOBALS['meta']['charset_collation_sql_base'];
674 674
 	}
675 675
 
676 676
 	foreach ($champs as $k => $v) {
@@ -679,7 +679,7 @@  discard block
 block discarded – undo
679 679
 			if (preg_match(',(char|text),i', $defs[1])
680 680
 				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
681 681
 			) {
682
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
682
+				$v = $defs[1].$character_set.' '.substr($v, strlen($defs[1]));
683 683
 			}
684 684
 		}
685 685
 
@@ -691,7 +691,7 @@  discard block
 block discarded – undo
691 691
 		$s = ",";
692 692
 	}
693 693
 	$temporary = $temporary ? 'TEMPORARY' : '';
694
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ")"
694
+	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query".($keys ? ",$keys" : '').")"
695 695
 		. " ENGINE=MyISAM"
696 696
 		. ($character_set ? " DEFAULT $character_set" : "")
697 697
 		. "\n";
@@ -771,7 +771,7 @@  discard block
 block discarded – undo
771 771
 		return false;
772 772
 	}
773 773
 
774
-	$query = "CREATE VIEW $nom AS " . $query_select;
774
+	$query = "CREATE VIEW $nom AS ".$query_select;
775 775
 
776 776
 	return spip_mysql_query($query, $serveur, $requeter);
777 777
 }
@@ -829,7 +829,7 @@  discard block
 block discarded – undo
829 829
  *     Ressource à utiliser avec sql_fetch()
830 830
  **/
831 831
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
832
-	return spip_mysql_query("SHOW TABLES LIKE " . _q($match), $serveur, $requeter);
832
+	return spip_mysql_query("SHOW TABLES LIKE "._q($match), $serveur, $requeter);
833 833
 }
834 834
 
835 835
 /**
@@ -923,22 +923,22 @@  discard block
 block discarded – undo
923 923
 			}
924 924
 			if ($val['Default'] === '0' || $val['Default']) {
925 925
 				if (preg_match('/[A-Z_]/', $val['Default'])) {
926
-					$nfields[$val["Field"]] .= ' DEFAULT ' . $val['Default'];
926
+					$nfields[$val["Field"]] .= ' DEFAULT '.$val['Default'];
927 927
 				} else {
928
-					$nfields[$val["Field"]] .= " DEFAULT '" . $val['Default'] . "'";
928
+					$nfields[$val["Field"]] .= " DEFAULT '".$val['Default']."'";
929 929
 				}
930 930
 			}
931 931
 			if ($val['Extra']) {
932
-				$nfields[$val["Field"]] .= ' ' . $val['Extra'];
932
+				$nfields[$val["Field"]] .= ' '.$val['Extra'];
933 933
 			}
934 934
 			if ($val['Key'] == 'PRI') {
935 935
 				$nkeys['PRIMARY KEY'] = $val["Field"];
936 936
 			} else {
937 937
 				if ($val['Key'] == 'MUL') {
938
-					$nkeys['KEY ' . $val["Field"]] = $val["Field"];
938
+					$nkeys['KEY '.$val["Field"]] = $val["Field"];
939 939
 				} else {
940 940
 					if ($val['Key'] == 'UNI') {
941
-						$nkeys['UNIQUE KEY ' . $val["Field"]] = $val["Field"];
941
+						$nkeys['UNIQUE KEY '.$val["Field"]] = $val["Field"];
942 942
 					}
943 943
 				}
944 944
 			}
@@ -1009,7 +1009,7 @@  discard block
 block discarded – undo
1009 1009
 	$serveur = '',
1010 1010
 	$requeter = true
1011 1011
 ) {
1012
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1012
+	$c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
1013 1013
 
1014 1014
 	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1015 1015
 	if (!$requeter) {
@@ -1049,7 +1049,7 @@  discard block
 block discarded – undo
1049 1049
 	if ($s) {
1050 1050
 		$trace = debug_backtrace();
1051 1051
 		if ($trace[0]['function'] != "spip_mysql_error") {
1052
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1052
+			spip_log("$s - $query - ".sql_error_backtrace(), 'mysql.'._LOG_ERREUR);
1053 1053
 		}
1054 1054
 	}
1055 1055
 
@@ -1216,7 +1216,7 @@  discard block
 block discarded – undo
1216 1216
 		$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1217 1217
 	}
1218 1218
 
1219
-	return spip_mysql_insert($table, "(" . join(',', array_keys($couples)) . ")", "(" . join(',', $couples) . ")", $desc,
1219
+	return spip_mysql_insert($table, "(".join(',', array_keys($couples)).")", "(".join(',', $couples).")", $desc,
1220 1220
 		$serveur, $requeter);
1221 1221
 }
1222 1222
 
@@ -1250,7 +1250,7 @@  discard block
 block discarded – undo
1250 1250
 	}
1251 1251
 	$fields = isset($desc['field']) ? $desc['field'] : array();
1252 1252
 
1253
-	$cles = "(" . join(',', array_keys(reset($tab_couples))) . ')';
1253
+	$cles = "(".join(',', array_keys(reset($tab_couples))).')';
1254 1254
 	$valeurs = array();
1255 1255
 	$r = false;
1256 1256
 
@@ -1259,7 +1259,7 @@  discard block
 block discarded – undo
1259 1259
 		foreach ($couples as $champ => $val) {
1260 1260
 			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1261 1261
 		}
1262
-		$valeurs[] = '(' . join(',', $couples) . ')';
1262
+		$valeurs[] = '('.join(',', $couples).')';
1263 1263
 		if (count($valeurs) >= 100) {
1264 1264
 			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1265 1265
 			$valeurs = array();
@@ -1296,7 +1296,7 @@  discard block
 block discarded – undo
1296 1296
 function spip_mysql_update($table, $champs, $where = '', $desc = array(), $serveur = '', $requeter = true) {
1297 1297
 	$set = array();
1298 1298
 	foreach ($champs as $champ => $val) {
1299
-		$set[] = $champ . "=$val";
1299
+		$set[] = $champ."=$val";
1300 1300
 	}
1301 1301
 	if (!empty($set)) {
1302 1302
 		return spip_mysql_query(
@@ -1350,7 +1350,7 @@  discard block
 block discarded – undo
1350 1350
 	}
1351 1351
 	$set = array();
1352 1352
 	foreach ($champs as $champ => $val) {
1353
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1353
+		$set[] = $champ.'='.spip_mysql_cite($val, @$fields[$champ]);
1354 1354
 	}
1355 1355
 
1356 1356
 	return spip_mysql_query(
@@ -1415,8 +1415,8 @@  discard block
 block discarded – undo
1415 1415
  *     - False en cas d'erreur.
1416 1416
  **/
1417 1417
 function spip_mysql_replace($table, $couples, $desc = array(), $serveur = '', $requeter = true) {
1418
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(',',
1419
-			array_map('_q', $couples)) . ')', $serveur, $requeter);
1418
+	return spip_mysql_query("REPLACE $table (".join(',', array_keys($couples)).') VALUES ('.join(',',
1419
+			array_map('_q', $couples)).')', $serveur, $requeter);
1420 1420
 }
1421 1421
 
1422 1422
 
@@ -1445,10 +1445,10 @@  discard block
 block discarded – undo
1445 1445
  *     - False en cas d'erreur.
1446 1446
  **/
1447 1447
 function spip_mysql_replace_multi($table, $tab_couples, $desc = array(), $serveur = '', $requeter = true) {
1448
-	$cles = "(" . join(',', array_keys($tab_couples[0])) . ')';
1448
+	$cles = "(".join(',', array_keys($tab_couples[0])).')';
1449 1449
 	$valeurs = array();
1450 1450
 	foreach ($tab_couples as $couples) {
1451
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1451
+		$valeurs[] = '('.join(',', array_map('_q', $couples)).')';
1452 1452
 	}
1453 1453
 	$valeurs = implode(', ', $valeurs);
1454 1454
 
@@ -1468,28 +1468,28 @@  discard block
 block discarded – undo
1468 1468
  */
1469 1469
 function spip_mysql_multi($objet, $lang) {
1470 1470
 	$lengthlang = strlen("[$lang]");
1471
-	$posmulti = "INSTR(" . $objet . ", '<multi>')";
1472
-	$posfinmulti = "INSTR(" . $objet . ", '</multi>')";
1473
-	$debutchaine = "LEFT(" . $objet . ", $posmulti-1)";
1474
-	$finchaine = "RIGHT(" . $objet . ", CHAR_LENGTH(" . $objet . ") -(7+$posfinmulti))";
1475
-	$chainemulti = "TRIM(SUBSTRING(" . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1476
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1471
+	$posmulti = "INSTR(".$objet.", '<multi>')";
1472
+	$posfinmulti = "INSTR(".$objet.", '</multi>')";
1473
+	$debutchaine = "LEFT(".$objet.", $posmulti-1)";
1474
+	$finchaine = "RIGHT(".$objet.", CHAR_LENGTH(".$objet.") -(7+$posfinmulti))";
1475
+	$chainemulti = "TRIM(SUBSTRING(".$objet.", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1476
+	$poslang = "INSTR($chainemulti,'[".$lang."]')";
1477 1477
 	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1478
-	$chainelang = "TRIM(SUBSTRING(" . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1479
-	$posfinlang = "INSTR(" . $chainelang . ", '[')";
1478
+	$chainelang = "TRIM(SUBSTRING(".$objet.", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1479
+	$posfinlang = "INSTR(".$chainelang.", '[')";
1480 1480
 	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1481 1481
 	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1482
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1483
-		"     TRIM(" . $objet . "), " .
1484
-		"     CONCAT( " .
1485
-		"          $debutchaine, " .
1486
-		"          IF( " .
1487
-		"               $poslang = 0, " .
1488
-		"                     $chainemulti, " .
1489
-		"               $chainelang" .
1490
-		"          ), " .
1491
-		"          $finchaine" .
1492
-		"     ) " .
1482
+	$retour = "(TRIM(IF($posmulti = 0 , ".
1483
+		"     TRIM(".$objet."), ".
1484
+		"     CONCAT( ".
1485
+		"          $debutchaine, ".
1486
+		"          IF( ".
1487
+		"               $poslang = 0, ".
1488
+		"                     $chainemulti, ".
1489
+		"               $chainelang".
1490
+		"          ), ".
1491
+		"          $finchaine".
1492
+		"     ) ".
1493 1493
 		"))) AS multi";
1494 1494
 
1495 1495
 	return $retour;
@@ -1506,7 +1506,7 @@  discard block
 block discarded – undo
1506 1506
  *     Valeur hexadécimale pour MySQL
1507 1507
  **/
1508 1508
 function spip_mysql_hex($v) {
1509
-	return "0x" . $v;
1509
+	return "0x".$v;
1510 1510
 }
1511 1511
 
1512 1512
 /**
@@ -1546,7 +1546,7 @@  discard block
 block discarded – undo
1546 1546
  *     Expression SQL
1547 1547
  **/
1548 1548
 function spip_mysql_date_proche($champ, $interval, $unite) {
1549
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1549
+	$use_now = (($champ === 'maj' or strpos($champ, '.maj')) ? true : false);
1550 1550
 	return '('
1551 1551
 	. $champ
1552 1552
 	. (($interval <= 0) ? '>' : '<')
@@ -1600,7 +1600,7 @@  discard block
 block discarded – undo
1600 1600
 		elseif (is_numeric($v)) {
1601 1601
 			return strval($v);
1602 1602
 		}
1603
-		return "'" . addslashes($v) . "'";
1603
+		return "'".addslashes($v)."'";
1604 1604
 	}
1605 1605
 
1606 1606
 	if (is_null($v)
@@ -1622,7 +1622,7 @@  discard block
 block discarded – undo
1622 1622
 		}
1623 1623
 	}
1624 1624
 
1625
-	return ("'" . addslashes($v) . "'");
1625
+	return ("'".addslashes($v)."'");
1626 1626
 }
1627 1627
 
1628 1628
 /**
@@ -1656,7 +1656,7 @@  discard block
 block discarded – undo
1656 1656
 	} else {
1657 1657
 		$GLOBALS['mysql_rappel_nom_base'] = false;
1658 1658
 
1659
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1659
+		return "\$GLOBALS['mysql_rappel_nom_base'] = false; ".
1660 1660
 		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1661 1661
 	}
1662 1662
 }
Please login to merge, or discard this patch.
ecrire/inc/distant.php 1 patch
Indentation   +1060 added lines, -1060 removed lines patch added patch discarded remove patch
@@ -16,32 +16,32 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Distant
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 if (!defined('_INC_DISTANT_VERSION_HTTP')) {
23
-	define('_INC_DISTANT_VERSION_HTTP', 'HTTP/1.0');
23
+    define('_INC_DISTANT_VERSION_HTTP', 'HTTP/1.0');
24 24
 }
25 25
 if (!defined('_INC_DISTANT_CONTENT_ENCODING')) {
26
-	define('_INC_DISTANT_CONTENT_ENCODING', 'gzip');
26
+    define('_INC_DISTANT_CONTENT_ENCODING', 'gzip');
27 27
 }
28 28
 if (!defined('_INC_DISTANT_USER_AGENT')) {
29
-	define('_INC_DISTANT_USER_AGENT', 'SPIP-' . $GLOBALS['spip_version_affichee'] . ' (' . $GLOBALS['home_server'] . ')');
29
+    define('_INC_DISTANT_USER_AGENT', 'SPIP-' . $GLOBALS['spip_version_affichee'] . ' (' . $GLOBALS['home_server'] . ')');
30 30
 }
31 31
 if (!defined('_INC_DISTANT_MAX_SIZE')) {
32
-	define('_INC_DISTANT_MAX_SIZE', 2097152);
32
+    define('_INC_DISTANT_MAX_SIZE', 2097152);
33 33
 }
34 34
 if (!defined('_INC_DISTANT_CONNECT_TIMEOUT')) {
35
-	define('_INC_DISTANT_CONNECT_TIMEOUT', 10);
35
+    define('_INC_DISTANT_CONNECT_TIMEOUT', 10);
36 36
 }
37 37
 
38 38
 define('_REGEXP_COPIE_LOCALE', ',' 	.
39
-	preg_replace(
40
-		'@^https?:@',
41
-		'https?:',
42
-		(isset($GLOBALS['meta']['adresse_site']) ? $GLOBALS['meta']['adresse_site'] : '')
43
-	)
44
-	. '/?spip.php[?]action=acceder_document.*file=(.*)$,');
39
+    preg_replace(
40
+        '@^https?:@',
41
+        'https?:',
42
+        (isset($GLOBALS['meta']['adresse_site']) ? $GLOBALS['meta']['adresse_site'] : '')
43
+    )
44
+    . '/?spip.php[?]action=acceder_document.*file=(.*)$,');
45 45
 
46 46
 //@define('_COPIE_LOCALE_MAX_SIZE',2097152); // poids (inc/utils l'a fait)
47 47
 
@@ -68,77 +68,77 @@  discard block
 block discarded – undo
68 68
  */
69 69
 function copie_locale($source, $mode = 'auto', $local = null, $taille_max = null) {
70 70
 
71
-	// si c'est la protection de soi-meme, retourner le path
72
-	if ($mode !== 'force' and preg_match(_REGEXP_COPIE_LOCALE, $source, $match)) {
73
-		$source = substr(_DIR_IMG, strlen(_DIR_RACINE)) . urldecode($match[1]);
74
-
75
-		return @file_exists($source) ? $source : false;
76
-	}
77
-
78
-	if (is_null($local)) {
79
-		$local = fichier_copie_locale($source);
80
-	} else {
81
-		if (_DIR_RACINE and strncmp(_DIR_RACINE, $local, strlen(_DIR_RACINE)) == 0) {
82
-			$local = substr($local, strlen(_DIR_RACINE));
83
-		}
84
-	}
85
-
86
-	// si $local = '' c'est un fichier refuse par fichier_copie_locale(),
87
-	// par exemple un fichier qui ne figure pas dans nos documents ;
88
-	// dans ce cas on n'essaie pas de le telecharger pour ensuite echouer
89
-	if (!$local) {
90
-		return false;
91
-	}
92
-
93
-	$localrac = _DIR_RACINE . $local;
94
-	$t = ($mode == 'force') ? false : @file_exists($localrac);
95
-
96
-	// test d'existence du fichier
97
-	if ($mode == 'test') {
98
-		return $t ? $local : '';
99
-	}
100
-
101
-	// sinon voir si on doit/peut le telecharger
102
-	if ($local == $source or !tester_url_absolue($source)) {
103
-		return $local;
104
-	}
105
-
106
-	if ($mode == 'modif' or !$t) {
107
-		// passer par un fichier temporaire unique pour gerer les echecs en cours de recuperation
108
-		// et des eventuelles recuperations concurantes
109
-		include_spip('inc/acces');
110
-		if (!$taille_max) {
111
-			$taille_max = _COPIE_LOCALE_MAX_SIZE;
112
-		}
113
-		$res = recuperer_url(
114
-			$source,
115
-			array('file' => $localrac, 'taille_max' => $taille_max, 'if_modified_since' => $t ? filemtime($localrac) : '')
116
-		);
117
-		if (!$res or (!$res['length'] and $res['status'] != 304)) {
118
-			spip_log("copie_locale : Echec recuperation $source sur $localrac status : " . $res['status'], 'distant' . _LOG_INFO_IMPORTANTE);
119
-		}
120
-		if (!$res['length']) {
121
-			// si $t c'est sans doute juste un not-modified-since
122
-			return $t ? $local : false;
123
-		}
124
-		spip_log("copie_locale : recuperation $source sur $localrac taille " . $res['length'] . ' OK', 'distant');
125
-
126
-		// pour une eventuelle indexation
127
-		pipeline(
128
-			'post_edition',
129
-			array(
130
-				'args' => array(
131
-					'operation' => 'copie_locale',
132
-					'source' => $source,
133
-					'fichier' => $local,
134
-					'http_res' => $res['length'],
135
-				),
136
-				'data' => null
137
-			)
138
-		);
139
-	}
140
-
141
-	return $local;
71
+    // si c'est la protection de soi-meme, retourner le path
72
+    if ($mode !== 'force' and preg_match(_REGEXP_COPIE_LOCALE, $source, $match)) {
73
+        $source = substr(_DIR_IMG, strlen(_DIR_RACINE)) . urldecode($match[1]);
74
+
75
+        return @file_exists($source) ? $source : false;
76
+    }
77
+
78
+    if (is_null($local)) {
79
+        $local = fichier_copie_locale($source);
80
+    } else {
81
+        if (_DIR_RACINE and strncmp(_DIR_RACINE, $local, strlen(_DIR_RACINE)) == 0) {
82
+            $local = substr($local, strlen(_DIR_RACINE));
83
+        }
84
+    }
85
+
86
+    // si $local = '' c'est un fichier refuse par fichier_copie_locale(),
87
+    // par exemple un fichier qui ne figure pas dans nos documents ;
88
+    // dans ce cas on n'essaie pas de le telecharger pour ensuite echouer
89
+    if (!$local) {
90
+        return false;
91
+    }
92
+
93
+    $localrac = _DIR_RACINE . $local;
94
+    $t = ($mode == 'force') ? false : @file_exists($localrac);
95
+
96
+    // test d'existence du fichier
97
+    if ($mode == 'test') {
98
+        return $t ? $local : '';
99
+    }
100
+
101
+    // sinon voir si on doit/peut le telecharger
102
+    if ($local == $source or !tester_url_absolue($source)) {
103
+        return $local;
104
+    }
105
+
106
+    if ($mode == 'modif' or !$t) {
107
+        // passer par un fichier temporaire unique pour gerer les echecs en cours de recuperation
108
+        // et des eventuelles recuperations concurantes
109
+        include_spip('inc/acces');
110
+        if (!$taille_max) {
111
+            $taille_max = _COPIE_LOCALE_MAX_SIZE;
112
+        }
113
+        $res = recuperer_url(
114
+            $source,
115
+            array('file' => $localrac, 'taille_max' => $taille_max, 'if_modified_since' => $t ? filemtime($localrac) : '')
116
+        );
117
+        if (!$res or (!$res['length'] and $res['status'] != 304)) {
118
+            spip_log("copie_locale : Echec recuperation $source sur $localrac status : " . $res['status'], 'distant' . _LOG_INFO_IMPORTANTE);
119
+        }
120
+        if (!$res['length']) {
121
+            // si $t c'est sans doute juste un not-modified-since
122
+            return $t ? $local : false;
123
+        }
124
+        spip_log("copie_locale : recuperation $source sur $localrac taille " . $res['length'] . ' OK', 'distant');
125
+
126
+        // pour une eventuelle indexation
127
+        pipeline(
128
+            'post_edition',
129
+            array(
130
+                'args' => array(
131
+                    'operation' => 'copie_locale',
132
+                    'source' => $source,
133
+                    'fichier' => $local,
134
+                    'http_res' => $res['length'],
135
+                ),
136
+                'data' => null
137
+            )
138
+        );
139
+    }
140
+
141
+    return $local;
142 142
 }
143 143
 
144 144
 /**
@@ -153,88 +153,88 @@  discard block
 block discarded – undo
153 153
  *   url ou false en cas d'echec
154 154
  */
155 155
 function valider_url_distante($url, $known_hosts = array()) {
156
-	if (!function_exists('protocole_verifier')){
157
-		include_spip('inc/filtres_mini');
158
-	}
156
+    if (!function_exists('protocole_verifier')){
157
+        include_spip('inc/filtres_mini');
158
+    }
159 159
 
160
-	if (!protocole_verifier($url, array('http', 'https'))) {
161
-		return false;
162
-	}
160
+    if (!protocole_verifier($url, array('http', 'https'))) {
161
+        return false;
162
+    }
163 163
 	
164
-	$parsed_url = parse_url($url);
165
-	if (!$parsed_url or empty($parsed_url['host']) ) {
166
-		return false;
167
-	}
168
-
169
-	if (isset($parsed_url['user']) or isset($parsed_url['pass'])) {
170
-		return false;
171
-	}
172
-
173
-	if (false !== strpbrk($parsed_url['host'], ':#?[]')) {
174
-		return false;
175
-	}
176
-
177
-	if (!is_array($known_hosts)) {
178
-		$known_hosts = array($known_hosts);
179
-	}
180
-	$known_hosts[] = $GLOBALS['meta']['adresse_site'];
181
-	$known_hosts[] = url_de_base();
182
-	$known_hosts = pipeline('declarer_hosts_distants', $known_hosts);
183
-
184
-	$is_known_host = false;
185
-	foreach ($known_hosts as $known_host) {
186
-		$parse_known = parse_url($known_host);
187
-		if ($parse_known
188
-		  and strtolower($parse_known['host']) === strtolower($parsed_url['host'])) {
189
-			$is_known_host = true;
190
-			break;
191
-		}
192
-	}
193
-
194
-	if (!$is_known_host) {
195
-		$host = trim($parsed_url['host'], '.');
196
-		if (preg_match('#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $host)) {
197
-			$ip = $host;
198
-		} else {
199
-			$ip = gethostbyname($host);
200
-			if ($ip === $host) {
201
-				// Error condition for gethostbyname()
202
-				$ip = false;
203
-			}
204
-		}
205
-		if ($ip) {
206
-			$parts = array_map('intval', explode( '.', $ip ));
207
-			if (127 === $parts[0] or 10 === $parts[0] or 0 === $parts[0]
208
-			  or ( 172 === $parts[0] and 16 <= $parts[1] and 31 >= $parts[1] )
209
-			  or ( 192 === $parts[0] && 168 === $parts[1] )
210
-			) {
211
-				return false;
212
-			}
213
-		}
214
-	}
215
-
216
-	if (empty($parsed_url['port'])) {
217
-		return $url;
218
-	}
219
-
220
-	$port = $parsed_url['port'];
221
-	if ($port === 80  or $port === 443  or $port === 8080) {
222
-		return $url;
223
-	}
224
-
225
-	if ($is_known_host) {
226
-		foreach ($known_hosts as $known_host) {
227
-			$parse_known = parse_url($known_host);
228
-			if ($parse_known
229
-				and !empty($parse_known['port'])
230
-			  and strtolower($parse_known['host']) === strtolower($parsed_url['host'])
231
-			  and $parse_known['port'] == $port) {
232
-				return $url;
233
-			}
234
-		}
235
-	}
236
-
237
-	return false;
164
+    $parsed_url = parse_url($url);
165
+    if (!$parsed_url or empty($parsed_url['host']) ) {
166
+        return false;
167
+    }
168
+
169
+    if (isset($parsed_url['user']) or isset($parsed_url['pass'])) {
170
+        return false;
171
+    }
172
+
173
+    if (false !== strpbrk($parsed_url['host'], ':#?[]')) {
174
+        return false;
175
+    }
176
+
177
+    if (!is_array($known_hosts)) {
178
+        $known_hosts = array($known_hosts);
179
+    }
180
+    $known_hosts[] = $GLOBALS['meta']['adresse_site'];
181
+    $known_hosts[] = url_de_base();
182
+    $known_hosts = pipeline('declarer_hosts_distants', $known_hosts);
183
+
184
+    $is_known_host = false;
185
+    foreach ($known_hosts as $known_host) {
186
+        $parse_known = parse_url($known_host);
187
+        if ($parse_known
188
+          and strtolower($parse_known['host']) === strtolower($parsed_url['host'])) {
189
+            $is_known_host = true;
190
+            break;
191
+        }
192
+    }
193
+
194
+    if (!$is_known_host) {
195
+        $host = trim($parsed_url['host'], '.');
196
+        if (preg_match('#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $host)) {
197
+            $ip = $host;
198
+        } else {
199
+            $ip = gethostbyname($host);
200
+            if ($ip === $host) {
201
+                // Error condition for gethostbyname()
202
+                $ip = false;
203
+            }
204
+        }
205
+        if ($ip) {
206
+            $parts = array_map('intval', explode( '.', $ip ));
207
+            if (127 === $parts[0] or 10 === $parts[0] or 0 === $parts[0]
208
+              or ( 172 === $parts[0] and 16 <= $parts[1] and 31 >= $parts[1] )
209
+              or ( 192 === $parts[0] && 168 === $parts[1] )
210
+            ) {
211
+                return false;
212
+            }
213
+        }
214
+    }
215
+
216
+    if (empty($parsed_url['port'])) {
217
+        return $url;
218
+    }
219
+
220
+    $port = $parsed_url['port'];
221
+    if ($port === 80  or $port === 443  or $port === 8080) {
222
+        return $url;
223
+    }
224
+
225
+    if ($is_known_host) {
226
+        foreach ($known_hosts as $known_host) {
227
+            $parse_known = parse_url($known_host);
228
+            if ($parse_known
229
+                and !empty($parse_known['port'])
230
+              and strtolower($parse_known['host']) === strtolower($parsed_url['host'])
231
+              and $parse_known['port'] == $port) {
232
+                return $url;
233
+            }
234
+        }
235
+    }
236
+
237
+    return false;
238 238
 }
239 239
 
240 240
 /**
@@ -254,86 +254,86 @@  discard block
 block discarded – undo
254 254
  */
255 255
 function prepare_donnees_post($donnees, $boundary = '') {
256 256
 
257
-	// permettre a la fonction qui a demande le post de formater elle meme ses donnees
258
-	// pour un appel soap par exemple
259
-	// l'entete est separe des donnees par un double retour a la ligne
260
-	// on s'occupe ici de passer tous les retours lignes (\r\n, \r ou \n) en \r\n
261
-	if (is_string($donnees) && strlen($donnees)) {
262
-		$entete = '';
263
-		// on repasse tous les \r\n et \r en simples \n
264
-		$donnees = str_replace("\r\n", "\n", $donnees);
265
-		$donnees = str_replace("\r", "\n", $donnees);
266
-		// un double retour a la ligne signifie la fin de l'entete et le debut des donnees
267
-		$p = strpos($donnees, "\n\n");
268
-		if ($p !== false) {
269
-			$entete = str_replace("\n", "\r\n", substr($donnees, 0, $p + 1));
270
-			$donnees = substr($donnees, $p + 2);
271
-		}
272
-		$chaine = str_replace("\n", "\r\n", $donnees);
273
-	} else {
274
-		/* boundary automatique */
275
-		// Si on a plus de 500 octects de donnees, on "boundarise"
276
-		if ($boundary === '') {
277
-			$taille = 0;
278
-			foreach ($donnees as $cle => $valeur) {
279
-				if (is_array($valeur)) {
280
-					foreach ($valeur as $val2) {
281
-						$taille += strlen($val2);
282
-					}
283
-				} else {
284
-					// faut-il utiliser spip_strlen() dans inc/charsets ?
285
-					$taille += strlen($valeur);
286
-				}
287
-			}
288
-			if ($taille > 500) {
289
-				$boundary = substr(md5(rand() . 'spip'), 0, 8);
290
-			}
291
-		}
292
-
293
-		if (is_string($boundary) and strlen($boundary)) {
294
-			// fabrique une chaine HTTP pour un POST avec boundary
295
-			$entete = "Content-Type: multipart/form-data; boundary=$boundary\r\n";
296
-			$chaine = '';
297
-			if (is_array($donnees)) {
298
-				foreach ($donnees as $cle => $valeur) {
299
-					if (is_array($valeur)) {
300
-						foreach ($valeur as $val2) {
301
-							$chaine .= "\r\n--$boundary\r\n";
302
-							$chaine .= "Content-Disposition: form-data; name=\"{$cle}[]\"\r\n";
303
-							$chaine .= "\r\n";
304
-							$chaine .= $val2;
305
-						}
306
-					} else {
307
-						$chaine .= "\r\n--$boundary\r\n";
308
-						$chaine .= "Content-Disposition: form-data; name=\"$cle\"\r\n";
309
-						$chaine .= "\r\n";
310
-						$chaine .= $valeur;
311
-					}
312
-				}
313
-				$chaine .= "\r\n--$boundary\r\n";
314
-			}
315
-		} else {
316
-			// fabrique une chaine HTTP simple pour un POST
317
-			$entete = 'Content-Type: application/x-www-form-urlencoded' . "\r\n";
318
-			$chaine = array();
319
-			if (is_array($donnees)) {
320
-				foreach ($donnees as $cle => $valeur) {
321
-					if (is_array($valeur)) {
322
-						foreach ($valeur as $val2) {
323
-							$chaine[] = rawurlencode($cle) . '[]=' . rawurlencode($val2);
324
-						}
325
-					} else {
326
-						$chaine[] = rawurlencode($cle) . '=' . rawurlencode($valeur);
327
-					}
328
-				}
329
-				$chaine = implode('&', $chaine);
330
-			} else {
331
-				$chaine = $donnees;
332
-			}
333
-		}
334
-	}
335
-
336
-	return array($entete, $chaine);
257
+    // permettre a la fonction qui a demande le post de formater elle meme ses donnees
258
+    // pour un appel soap par exemple
259
+    // l'entete est separe des donnees par un double retour a la ligne
260
+    // on s'occupe ici de passer tous les retours lignes (\r\n, \r ou \n) en \r\n
261
+    if (is_string($donnees) && strlen($donnees)) {
262
+        $entete = '';
263
+        // on repasse tous les \r\n et \r en simples \n
264
+        $donnees = str_replace("\r\n", "\n", $donnees);
265
+        $donnees = str_replace("\r", "\n", $donnees);
266
+        // un double retour a la ligne signifie la fin de l'entete et le debut des donnees
267
+        $p = strpos($donnees, "\n\n");
268
+        if ($p !== false) {
269
+            $entete = str_replace("\n", "\r\n", substr($donnees, 0, $p + 1));
270
+            $donnees = substr($donnees, $p + 2);
271
+        }
272
+        $chaine = str_replace("\n", "\r\n", $donnees);
273
+    } else {
274
+        /* boundary automatique */
275
+        // Si on a plus de 500 octects de donnees, on "boundarise"
276
+        if ($boundary === '') {
277
+            $taille = 0;
278
+            foreach ($donnees as $cle => $valeur) {
279
+                if (is_array($valeur)) {
280
+                    foreach ($valeur as $val2) {
281
+                        $taille += strlen($val2);
282
+                    }
283
+                } else {
284
+                    // faut-il utiliser spip_strlen() dans inc/charsets ?
285
+                    $taille += strlen($valeur);
286
+                }
287
+            }
288
+            if ($taille > 500) {
289
+                $boundary = substr(md5(rand() . 'spip'), 0, 8);
290
+            }
291
+        }
292
+
293
+        if (is_string($boundary) and strlen($boundary)) {
294
+            // fabrique une chaine HTTP pour un POST avec boundary
295
+            $entete = "Content-Type: multipart/form-data; boundary=$boundary\r\n";
296
+            $chaine = '';
297
+            if (is_array($donnees)) {
298
+                foreach ($donnees as $cle => $valeur) {
299
+                    if (is_array($valeur)) {
300
+                        foreach ($valeur as $val2) {
301
+                            $chaine .= "\r\n--$boundary\r\n";
302
+                            $chaine .= "Content-Disposition: form-data; name=\"{$cle}[]\"\r\n";
303
+                            $chaine .= "\r\n";
304
+                            $chaine .= $val2;
305
+                        }
306
+                    } else {
307
+                        $chaine .= "\r\n--$boundary\r\n";
308
+                        $chaine .= "Content-Disposition: form-data; name=\"$cle\"\r\n";
309
+                        $chaine .= "\r\n";
310
+                        $chaine .= $valeur;
311
+                    }
312
+                }
313
+                $chaine .= "\r\n--$boundary\r\n";
314
+            }
315
+        } else {
316
+            // fabrique une chaine HTTP simple pour un POST
317
+            $entete = 'Content-Type: application/x-www-form-urlencoded' . "\r\n";
318
+            $chaine = array();
319
+            if (is_array($donnees)) {
320
+                foreach ($donnees as $cle => $valeur) {
321
+                    if (is_array($valeur)) {
322
+                        foreach ($valeur as $val2) {
323
+                            $chaine[] = rawurlencode($cle) . '[]=' . rawurlencode($val2);
324
+                        }
325
+                    } else {
326
+                        $chaine[] = rawurlencode($cle) . '=' . rawurlencode($valeur);
327
+                    }
328
+                }
329
+                $chaine = implode('&', $chaine);
330
+            } else {
331
+                $chaine = $donnees;
332
+            }
333
+        }
334
+    }
335
+
336
+    return array($entete, $chaine);
337 337
 }
338 338
 
339 339
 /**
@@ -347,20 +347,20 @@  discard block
 block discarded – undo
347 347
  */
348 348
 function url_to_ascii($url_idn) {
349 349
 
350
-	if ($parts = parse_url($url_idn)) {
351
-		$host = $parts['host'];
352
-		if (!preg_match(',^[a-z0-9_\.\-]+$,i', $host)) {
353
-			include_spip('inc/idna_convert.class');
354
-			$IDN = new idna_convert();
355
-			$host_ascii = $IDN->encode($host);
356
-			$url_idn = explode($host, $url_idn, 2);
357
-			$url_idn = implode($host_ascii, $url_idn);
358
-		}
359
-		// et on urlencode les char utf si besoin dans le path
360
-		$url_idn = preg_replace_callback('/[^\x20-\x7f]/', function($match) { return urlencode($match[0]); }, $url_idn);
361
-	}
362
-
363
-	return $url_idn;
350
+    if ($parts = parse_url($url_idn)) {
351
+        $host = $parts['host'];
352
+        if (!preg_match(',^[a-z0-9_\.\-]+$,i', $host)) {
353
+            include_spip('inc/idna_convert.class');
354
+            $IDN = new idna_convert();
355
+            $host_ascii = $IDN->encode($host);
356
+            $url_idn = explode($host, $url_idn, 2);
357
+            $url_idn = implode($host_ascii, $url_idn);
358
+        }
359
+        // et on urlencode les char utf si besoin dans le path
360
+        $url_idn = preg_replace_callback('/[^\x20-\x7f]/', function($match) { return urlencode($match[0]); }, $url_idn);
361
+    }
362
+
363
+    return $url_idn;
364 364
 }
365 365
 
366 366
 /**
@@ -400,176 +400,176 @@  discard block
 block discarded – undo
400 400
  *     string file : nom du fichier si enregistre dans un fichier
401 401
  */
402 402
 function recuperer_url($url, $options = array()) {
403
-	$default = array(
404
-		'transcoder' => false,
405
-		'methode' => 'GET',
406
-		'taille_max' => null,
407
-		'datas' => '',
408
-		'boundary' => '',
409
-		'refuser_gz' => false,
410
-		'if_modified_since' => '',
411
-		'uri_referer' => '',
412
-		'file' => '',
413
-		'follow_location' => 10,
414
-		'version_http' => _INC_DISTANT_VERSION_HTTP,
415
-	);
416
-	$options = array_merge($default, $options);
417
-	// copier directement dans un fichier ?
418
-	$copy = $options['file'];
419
-
420
-	if ($options['methode'] == 'HEAD') {
421
-		$options['taille_max'] = 0;
422
-	}
423
-	if (is_null($options['taille_max'])) {
424
-		$options['taille_max'] = $copy ? _COPIE_LOCALE_MAX_SIZE : _INC_DISTANT_MAX_SIZE;
425
-	}
426
-
427
-	if (!empty($options['datas'])) {
428
-		list($head, $postdata) = prepare_donnees_post($options['datas'], $options['boundary']);
429
-		if (stripos($head, 'Content-Length:') === false) {
430
-			$head .= 'Content-Length: ' . strlen($postdata);
431
-		}
432
-		$options['datas'] = $head . "\r\n\r\n" . $postdata;
433
-		if (strlen($postdata)) {
434
-			$options['methode'] = 'POST';
435
-		}
436
-	}
437
-
438
-	// Accepter les URLs au format feed:// ou qui ont oublie le http:// ou les urls relatives au protocole
439
-	$url = preg_replace(',^feed://,i', 'http://', $url);
440
-	if (!tester_url_absolue($url)) {
441
-		$url = 'http://' . $url;
442
-	} elseif (strncmp($url, '//', 2) == 0) {
443
-		$url = 'http:' . $url;
444
-	}
445
-
446
-	$url = url_to_ascii($url);
447
-
448
-	$result = array(
449
-		'status' => 0,
450
-		'headers' => '',
451
-		'page' => '',
452
-		'length' => 0,
453
-		'last_modified' => '',
454
-		'location' => '',
455
-		'url' => $url
456
-	);
457
-
458
-	// si on ecrit directement dans un fichier, pour ne pas manipuler en memoire refuser gz
459
-	$refuser_gz = (($options['refuser_gz'] or $copy) ? true : false);
460
-
461
-	// ouvrir la connexion et envoyer la requete et ses en-tetes
462
-	list($handle, $fopen) = init_http(
463
-		$options['methode'],
464
-		$url,
465
-		$refuser_gz,
466
-		$options['uri_referer'],
467
-		$options['datas'],
468
-		$options['version_http'],
469
-		$options['if_modified_since']
470
-	);
471
-	if (!$handle) {
472
-		spip_log("ECHEC init_http $url", 'distant' . _LOG_ERREUR);
473
-
474
-		return false;
475
-	}
476
-
477
-	// Sauf en fopen, envoyer le flux d'entree
478
-	// et recuperer les en-tetes de reponses
479
-	if (!$fopen) {
480
-		$res = recuperer_entetes_complets($handle, $options['if_modified_since']);
481
-		if (!$res) {
482
-			fclose($handle);
483
-			$t = @parse_url($url);
484
-			$host = $t['host'];
485
-			// Chinoisierie inexplicable pour contrer
486
-			// les actions liberticides de l'empire du milieu
487
-			if (!need_proxy($host)
488
-				and $res = @file_get_contents($url)
489
-			) {
490
-				$result['length'] = strlen($res);
491
-				if ($copy) {
492
-					ecrire_fichier($copy, $res);
493
-					$result['file'] = $copy;
494
-				} else {
495
-					$result['page'] = $res;
496
-				}
497
-				$res = array(
498
-					'status' => 200,
499
-				);
500
-			} else {
501
-				spip_log("ECHEC chinoiserie $url", 'distant' . _LOG_ERREUR);
502
-				return false;
503
-			}
504
-		} elseif ($res['location'] and $options['follow_location']) {
505
-			$options['follow_location']--;
506
-			fclose($handle);
507
-			include_spip('inc/filtres');
508
-			$url = suivre_lien($url, $res['location']);
509
-			spip_log("recuperer_url recommence sur $url", 'distant');
510
-
511
-			return recuperer_url($url, $options);
512
-		} elseif ($res['status'] !== 200) {
513
-			spip_log('HTTP status ' . $res['status'] . " pour $url", 'distant');
514
-		}
515
-		$result['status'] = $res['status'];
516
-		if (isset($res['headers'])) {
517
-			$result['headers'] = $res['headers'];
518
-		}
519
-		if (isset($res['last_modified'])) {
520
-			$result['last_modified'] = $res['last_modified'];
521
-		}
522
-		if (isset($res['location'])) {
523
-			$result['location'] = $res['location'];
524
-		}
525
-	}
526
-
527
-	// on ne veut que les entetes
528
-	if (!$options['taille_max'] or $options['methode'] == 'HEAD' or $result['status'] == '304') {
529
-		return $result;
530
-	}
531
-
532
-
533
-	// s'il faut deballer, le faire via un fichier temporaire
534
-	// sinon la memoire explose pour les gros flux
535
-
536
-	$gz = false;
537
-	if (preg_match(",\bContent-Encoding: .*gzip,is", $result['headers'])) {
538
-		$gz = (_DIR_TMP . md5(uniqid(mt_rand())) . '.tmp.gz');
539
-	}
540
-
541
-	// si on a pas deja recuperer le contenu par une methode detournee
542
-	if (!$result['length']) {
543
-		$res = recuperer_body($handle, $options['taille_max'], $gz ? $gz : $copy);
544
-		fclose($handle);
545
-		if ($copy) {
546
-			$result['length'] = $res;
547
-			$result['file'] = $copy;
548
-		} elseif ($res) {
549
-			$result['page'] = &$res;
550
-			$result['length'] = strlen($result['page']);
551
-		}
552
-		if (!$result['status']) {
553
-			$result['status'] = 200; // on a reussi, donc !
554
-		}
555
-	}
556
-	if (!$result['page']) {
557
-		return $result;
558
-	}
559
-
560
-	// Decompresser au besoin
561
-	if ($gz) {
562
-		$result['page'] = implode('', gzfile($gz));
563
-		supprimer_fichier($gz);
564
-	}
565
-
566
-	// Faut-il l'importer dans notre charset local ?
567
-	if ($options['transcoder']) {
568
-		include_spip('inc/charsets');
569
-		$result['page'] = transcoder_page($result['page'], $result['headers']);
570
-	}
571
-
572
-	return $result;
403
+    $default = array(
404
+        'transcoder' => false,
405
+        'methode' => 'GET',
406
+        'taille_max' => null,
407
+        'datas' => '',
408
+        'boundary' => '',
409
+        'refuser_gz' => false,
410
+        'if_modified_since' => '',
411
+        'uri_referer' => '',
412
+        'file' => '',
413
+        'follow_location' => 10,
414
+        'version_http' => _INC_DISTANT_VERSION_HTTP,
415
+    );
416
+    $options = array_merge($default, $options);
417
+    // copier directement dans un fichier ?
418
+    $copy = $options['file'];
419
+
420
+    if ($options['methode'] == 'HEAD') {
421
+        $options['taille_max'] = 0;
422
+    }
423
+    if (is_null($options['taille_max'])) {
424
+        $options['taille_max'] = $copy ? _COPIE_LOCALE_MAX_SIZE : _INC_DISTANT_MAX_SIZE;
425
+    }
426
+
427
+    if (!empty($options['datas'])) {
428
+        list($head, $postdata) = prepare_donnees_post($options['datas'], $options['boundary']);
429
+        if (stripos($head, 'Content-Length:') === false) {
430
+            $head .= 'Content-Length: ' . strlen($postdata);
431
+        }
432
+        $options['datas'] = $head . "\r\n\r\n" . $postdata;
433
+        if (strlen($postdata)) {
434
+            $options['methode'] = 'POST';
435
+        }
436
+    }
437
+
438
+    // Accepter les URLs au format feed:// ou qui ont oublie le http:// ou les urls relatives au protocole
439
+    $url = preg_replace(',^feed://,i', 'http://', $url);
440
+    if (!tester_url_absolue($url)) {
441
+        $url = 'http://' . $url;
442
+    } elseif (strncmp($url, '//', 2) == 0) {
443
+        $url = 'http:' . $url;
444
+    }
445
+
446
+    $url = url_to_ascii($url);
447
+
448
+    $result = array(
449
+        'status' => 0,
450
+        'headers' => '',
451
+        'page' => '',
452
+        'length' => 0,
453
+        'last_modified' => '',
454
+        'location' => '',
455
+        'url' => $url
456
+    );
457
+
458
+    // si on ecrit directement dans un fichier, pour ne pas manipuler en memoire refuser gz
459
+    $refuser_gz = (($options['refuser_gz'] or $copy) ? true : false);
460
+
461
+    // ouvrir la connexion et envoyer la requete et ses en-tetes
462
+    list($handle, $fopen) = init_http(
463
+        $options['methode'],
464
+        $url,
465
+        $refuser_gz,
466
+        $options['uri_referer'],
467
+        $options['datas'],
468
+        $options['version_http'],
469
+        $options['if_modified_since']
470
+    );
471
+    if (!$handle) {
472
+        spip_log("ECHEC init_http $url", 'distant' . _LOG_ERREUR);
473
+
474
+        return false;
475
+    }
476
+
477
+    // Sauf en fopen, envoyer le flux d'entree
478
+    // et recuperer les en-tetes de reponses
479
+    if (!$fopen) {
480
+        $res = recuperer_entetes_complets($handle, $options['if_modified_since']);
481
+        if (!$res) {
482
+            fclose($handle);
483
+            $t = @parse_url($url);
484
+            $host = $t['host'];
485
+            // Chinoisierie inexplicable pour contrer
486
+            // les actions liberticides de l'empire du milieu
487
+            if (!need_proxy($host)
488
+                and $res = @file_get_contents($url)
489
+            ) {
490
+                $result['length'] = strlen($res);
491
+                if ($copy) {
492
+                    ecrire_fichier($copy, $res);
493
+                    $result['file'] = $copy;
494
+                } else {
495
+                    $result['page'] = $res;
496
+                }
497
+                $res = array(
498
+                    'status' => 200,
499
+                );
500
+            } else {
501
+                spip_log("ECHEC chinoiserie $url", 'distant' . _LOG_ERREUR);
502
+                return false;
503
+            }
504
+        } elseif ($res['location'] and $options['follow_location']) {
505
+            $options['follow_location']--;
506
+            fclose($handle);
507
+            include_spip('inc/filtres');
508
+            $url = suivre_lien($url, $res['location']);
509
+            spip_log("recuperer_url recommence sur $url", 'distant');
510
+
511
+            return recuperer_url($url, $options);
512
+        } elseif ($res['status'] !== 200) {
513
+            spip_log('HTTP status ' . $res['status'] . " pour $url", 'distant');
514
+        }
515
+        $result['status'] = $res['status'];
516
+        if (isset($res['headers'])) {
517
+            $result['headers'] = $res['headers'];
518
+        }
519
+        if (isset($res['last_modified'])) {
520
+            $result['last_modified'] = $res['last_modified'];
521
+        }
522
+        if (isset($res['location'])) {
523
+            $result['location'] = $res['location'];
524
+        }
525
+    }
526
+
527
+    // on ne veut que les entetes
528
+    if (!$options['taille_max'] or $options['methode'] == 'HEAD' or $result['status'] == '304') {
529
+        return $result;
530
+    }
531
+
532
+
533
+    // s'il faut deballer, le faire via un fichier temporaire
534
+    // sinon la memoire explose pour les gros flux
535
+
536
+    $gz = false;
537
+    if (preg_match(",\bContent-Encoding: .*gzip,is", $result['headers'])) {
538
+        $gz = (_DIR_TMP . md5(uniqid(mt_rand())) . '.tmp.gz');
539
+    }
540
+
541
+    // si on a pas deja recuperer le contenu par une methode detournee
542
+    if (!$result['length']) {
543
+        $res = recuperer_body($handle, $options['taille_max'], $gz ? $gz : $copy);
544
+        fclose($handle);
545
+        if ($copy) {
546
+            $result['length'] = $res;
547
+            $result['file'] = $copy;
548
+        } elseif ($res) {
549
+            $result['page'] = &$res;
550
+            $result['length'] = strlen($result['page']);
551
+        }
552
+        if (!$result['status']) {
553
+            $result['status'] = 200; // on a reussi, donc !
554
+        }
555
+    }
556
+    if (!$result['page']) {
557
+        return $result;
558
+    }
559
+
560
+    // Decompresser au besoin
561
+    if ($gz) {
562
+        $result['page'] = implode('', gzfile($gz));
563
+        supprimer_fichier($gz);
564
+    }
565
+
566
+    // Faut-il l'importer dans notre charset local ?
567
+    if ($options['transcoder']) {
568
+        include_spip('inc/charsets');
569
+        $result['page'] = transcoder_page($result['page'], $result['headers']);
570
+    }
571
+
572
+    return $result;
573 573
 }
574 574
 
575 575
 /**
@@ -585,72 +585,72 @@  discard block
 block discarded – undo
585 585
  * @return array|bool|mixed
586 586
  */
587 587
 function recuperer_url_cache($url, $options = array()) {
588
-	if (!defined('_DELAI_RECUPERER_URL_CACHE')) {
589
-		define('_DELAI_RECUPERER_URL_CACHE', 3600);
590
-	}
591
-	$default = array(
592
-		'transcoder' => false,
593
-		'methode' => 'GET',
594
-		'taille_max' => null,
595
-		'datas' => '',
596
-		'boundary' => '',
597
-		'refuser_gz' => false,
598
-		'if_modified_since' => '',
599
-		'uri_referer' => '',
600
-		'file' => '',
601
-		'follow_location' => 10,
602
-		'version_http' => _INC_DISTANT_VERSION_HTTP,
603
-		'delai_cache' => in_array(_VAR_MODE, ['preview', 'recalcul']) ? 0 : _DELAI_RECUPERER_URL_CACHE,
604
-	);
605
-	$options = array_merge($default, $options);
606
-
607
-	// cas ou il n'est pas possible de cacher
608
-	if (!empty($options['data']) or $options['methode'] == 'POST') {
609
-		return recuperer_url($url, $options);
610
-	}
611
-
612
-	// ne pas tenter plusieurs fois la meme url en erreur (non cachee donc)
613
-	static $errors = array();
614
-	if (isset($errors[$url])) {
615
-		return $errors[$url];
616
-	}
617
-
618
-	$sig = $options;
619
-	unset($sig['if_modified_since']);
620
-	unset($sig['delai_cache']);
621
-	$sig['url'] = $url;
622
-
623
-	$dir = sous_repertoire(_DIR_CACHE, 'curl');
624
-	$cache = md5(serialize($sig)) . '-' . substr(preg_replace(',\W+,', '_', $url), 0, 80);
625
-	$sub = sous_repertoire($dir, substr($cache, 0, 2));
626
-	$cache = "$sub$cache";
627
-
628
-	$res = false;
629
-	$is_cached = file_exists($cache);
630
-	if ($is_cached
631
-		and (filemtime($cache) > $_SERVER['REQUEST_TIME'] - $options['delai_cache'])
632
-	) {
633
-		lire_fichier($cache, $res);
634
-		if ($res = unserialize($res)) {
635
-			// mettre le last_modified et le status=304 ?
636
-		}
637
-	}
638
-	if (!$res) {
639
-		$res = recuperer_url($url, $options);
640
-		// ne pas recharger cette url non cachee dans le meme hit puisque non disponible
641
-		if (!$res) {
642
-			if ($is_cached) {
643
-				// on a pas reussi a recuperer mais on avait un cache : l'utiliser
644
-				lire_fichier($cache, $res);
645
-				$res = unserialize($res);
646
-			}
647
-
648
-			return $errors[$url] = $res;
649
-		}
650
-		ecrire_fichier($cache, serialize($res));
651
-	}
652
-
653
-	return $res;
588
+    if (!defined('_DELAI_RECUPERER_URL_CACHE')) {
589
+        define('_DELAI_RECUPERER_URL_CACHE', 3600);
590
+    }
591
+    $default = array(
592
+        'transcoder' => false,
593
+        'methode' => 'GET',
594
+        'taille_max' => null,
595
+        'datas' => '',
596
+        'boundary' => '',
597
+        'refuser_gz' => false,
598
+        'if_modified_since' => '',
599
+        'uri_referer' => '',
600
+        'file' => '',
601
+        'follow_location' => 10,
602
+        'version_http' => _INC_DISTANT_VERSION_HTTP,
603
+        'delai_cache' => in_array(_VAR_MODE, ['preview', 'recalcul']) ? 0 : _DELAI_RECUPERER_URL_CACHE,
604
+    );
605
+    $options = array_merge($default, $options);
606
+
607
+    // cas ou il n'est pas possible de cacher
608
+    if (!empty($options['data']) or $options['methode'] == 'POST') {
609
+        return recuperer_url($url, $options);
610
+    }
611
+
612
+    // ne pas tenter plusieurs fois la meme url en erreur (non cachee donc)
613
+    static $errors = array();
614
+    if (isset($errors[$url])) {
615
+        return $errors[$url];
616
+    }
617
+
618
+    $sig = $options;
619
+    unset($sig['if_modified_since']);
620
+    unset($sig['delai_cache']);
621
+    $sig['url'] = $url;
622
+
623
+    $dir = sous_repertoire(_DIR_CACHE, 'curl');
624
+    $cache = md5(serialize($sig)) . '-' . substr(preg_replace(',\W+,', '_', $url), 0, 80);
625
+    $sub = sous_repertoire($dir, substr($cache, 0, 2));
626
+    $cache = "$sub$cache";
627
+
628
+    $res = false;
629
+    $is_cached = file_exists($cache);
630
+    if ($is_cached
631
+        and (filemtime($cache) > $_SERVER['REQUEST_TIME'] - $options['delai_cache'])
632
+    ) {
633
+        lire_fichier($cache, $res);
634
+        if ($res = unserialize($res)) {
635
+            // mettre le last_modified et le status=304 ?
636
+        }
637
+    }
638
+    if (!$res) {
639
+        $res = recuperer_url($url, $options);
640
+        // ne pas recharger cette url non cachee dans le meme hit puisque non disponible
641
+        if (!$res) {
642
+            if ($is_cached) {
643
+                // on a pas reussi a recuperer mais on avait un cache : l'utiliser
644
+                lire_fichier($cache, $res);
645
+                $res = unserialize($res);
646
+            }
647
+
648
+            return $errors[$url] = $res;
649
+        }
650
+        ecrire_fichier($cache, serialize($res));
651
+    }
652
+
653
+    return $res;
654 654
 }
655 655
 
656 656
 /**
@@ -689,52 +689,52 @@  discard block
 block discarded – undo
689 689
  *     - false si la page n'a pu être récupérée (status different de 200)
690 690
  **/
691 691
 function recuperer_page(
692
-	$url,
693
-	$trans = false,
694
-	$get_headers = false,
695
-	$taille_max = null,
696
-	$datas = '',
697
-	$boundary = '',
698
-	$refuser_gz = false,
699
-	$date_verif = '',
700
-	$uri_referer = ''
692
+    $url,
693
+    $trans = false,
694
+    $get_headers = false,
695
+    $taille_max = null,
696
+    $datas = '',
697
+    $boundary = '',
698
+    $refuser_gz = false,
699
+    $date_verif = '',
700
+    $uri_referer = ''
701 701
 ) {
702
-	// $copy = copier le fichier ?
703
-	$copy = (is_string($trans) and strlen($trans) > 5); // eviter "false" :-)
704
-
705
-	if (!is_null($taille_max) and ($taille_max == 0)) {
706
-		$get = 'HEAD';
707
-	} else {
708
-		$get = 'GET';
709
-	}
710
-
711
-	$options = array(
712
-		'transcoder' => $trans === true,
713
-		'methode' => $get,
714
-		'datas' => $datas,
715
-		'boundary' => $boundary,
716
-		'refuser_gz' => $refuser_gz,
717
-		'if_modified_since' => $date_verif,
718
-		'uri_referer' => $uri_referer,
719
-		'file' => $copy ? $trans : '',
720
-		'follow_location' => 10,
721
-	);
722
-	if (!is_null($taille_max)) {
723
-		$options['taille_max'] = $taille_max;
724
-	}
725
-	// dix tentatives maximum en cas d'entetes 301...
726
-	$res = recuperer_url($url, $options);
727
-	if (!$res) {
728
-		return false;
729
-	}
730
-	if ($res['status'] !== 200) {
731
-		return false;
732
-	}
733
-	if ($get_headers) {
734
-		return $res['headers'] . "\n" . $res['page'];
735
-	}
736
-
737
-	return $res['page'];
702
+    // $copy = copier le fichier ?
703
+    $copy = (is_string($trans) and strlen($trans) > 5); // eviter "false" :-)
704
+
705
+    if (!is_null($taille_max) and ($taille_max == 0)) {
706
+        $get = 'HEAD';
707
+    } else {
708
+        $get = 'GET';
709
+    }
710
+
711
+    $options = array(
712
+        'transcoder' => $trans === true,
713
+        'methode' => $get,
714
+        'datas' => $datas,
715
+        'boundary' => $boundary,
716
+        'refuser_gz' => $refuser_gz,
717
+        'if_modified_since' => $date_verif,
718
+        'uri_referer' => $uri_referer,
719
+        'file' => $copy ? $trans : '',
720
+        'follow_location' => 10,
721
+    );
722
+    if (!is_null($taille_max)) {
723
+        $options['taille_max'] = $taille_max;
724
+    }
725
+    // dix tentatives maximum en cas d'entetes 301...
726
+    $res = recuperer_url($url, $options);
727
+    if (!$res) {
728
+        return false;
729
+    }
730
+    if ($res['status'] !== 200) {
731
+        return false;
732
+    }
733
+    if ($get_headers) {
734
+        return $res['headers'] . "\n" . $res['page'];
735
+    }
736
+
737
+    return $res['page'];
738 738
 }
739 739
 
740 740
 
@@ -771,48 +771,48 @@  discard block
 block discarded – undo
771 771
  *     - false sinon
772 772
  **/
773 773
 function recuperer_lapage(
774
-	$url,
775
-	$trans = false,
776
-	$get = 'GET',
777
-	$taille_max = 1048576,
778
-	$datas = '',
779
-	$refuser_gz = false,
780
-	$date_verif = '',
781
-	$uri_referer = ''
774
+    $url,
775
+    $trans = false,
776
+    $get = 'GET',
777
+    $taille_max = 1048576,
778
+    $datas = '',
779
+    $refuser_gz = false,
780
+    $date_verif = '',
781
+    $uri_referer = ''
782 782
 ) {
783
-	// $copy = copier le fichier ?
784
-	$copy = (is_string($trans) and strlen($trans) > 5); // eviter "false" :-)
785
-
786
-	// si on ecrit directement dans un fichier, pour ne pas manipuler
787
-	// en memoire refuser gz
788
-	if ($copy) {
789
-		$refuser_gz = true;
790
-	}
791
-
792
-	$options = array(
793
-		'transcoder' => $trans === true,
794
-		'methode' => $get,
795
-		'datas' => $datas,
796
-		'refuser_gz' => $refuser_gz,
797
-		'if_modified_since' => $date_verif,
798
-		'uri_referer' => $uri_referer,
799
-		'file' => $copy ? $trans : '',
800
-		'follow_location' => false,
801
-	);
802
-	if (!is_null($taille_max)) {
803
-		$options['taille_max'] = $taille_max;
804
-	}
805
-	// dix tentatives maximum en cas d'entetes 301...
806
-	$res = recuperer_url($url, $options);
807
-
808
-	if (!$res) {
809
-		return false;
810
-	}
811
-	if ($res['status'] !== 200) {
812
-		return false;
813
-	}
814
-
815
-	return array($res['headers'], $res['page']);
783
+    // $copy = copier le fichier ?
784
+    $copy = (is_string($trans) and strlen($trans) > 5); // eviter "false" :-)
785
+
786
+    // si on ecrit directement dans un fichier, pour ne pas manipuler
787
+    // en memoire refuser gz
788
+    if ($copy) {
789
+        $refuser_gz = true;
790
+    }
791
+
792
+    $options = array(
793
+        'transcoder' => $trans === true,
794
+        'methode' => $get,
795
+        'datas' => $datas,
796
+        'refuser_gz' => $refuser_gz,
797
+        'if_modified_since' => $date_verif,
798
+        'uri_referer' => $uri_referer,
799
+        'file' => $copy ? $trans : '',
800
+        'follow_location' => false,
801
+    );
802
+    if (!is_null($taille_max)) {
803
+        $options['taille_max'] = $taille_max;
804
+    }
805
+    // dix tentatives maximum en cas d'entetes 301...
806
+    $res = recuperer_url($url, $options);
807
+
808
+    if (!$res) {
809
+        return false;
810
+    }
811
+    if ($res['status'] !== 200) {
812
+        return false;
813
+    }
814
+
815
+    return array($res['headers'], $res['page']);
816 816
 }
817 817
 
818 818
 /**
@@ -830,41 +830,41 @@  discard block
 block discarded – undo
830 830
  *   string contenu de la resource
831 831
  */
832 832
 function recuperer_body($handle, $taille_max = _INC_DISTANT_MAX_SIZE, $fichier = '') {
833
-	$taille = 0;
834
-	$result = '';
835
-	$fp = false;
836
-	if ($fichier) {
837
-		include_spip('inc/acces');
838
-		$tmpfile = "$fichier." . creer_uniqid() . '.tmp';
839
-		$fp = spip_fopen_lock($tmpfile, 'w', LOCK_EX);
840
-		if (!$fp and file_exists($fichier)) {
841
-			return filesize($fichier);
842
-		}
843
-		if (!$fp) {
844
-			return false;
845
-		}
846
-		$result = 0; // on renvoie la taille du fichier
847
-	}
848
-	while (!feof($handle) and $taille < $taille_max) {
849
-		$res = fread($handle, 16384);
850
-		$taille += strlen($res);
851
-		if ($fp) {
852
-			fwrite($fp, $res);
853
-			$result = $taille;
854
-		} else {
855
-			$result .= $res;
856
-		}
857
-	}
858
-	if ($fp) {
859
-		spip_fclose_unlock($fp);
860
-		spip_unlink($fichier);
861
-		@rename($tmpfile, $fichier);
862
-		if (!file_exists($fichier)) {
863
-			return false;
864
-		}
865
-	}
866
-
867
-	return $result;
833
+    $taille = 0;
834
+    $result = '';
835
+    $fp = false;
836
+    if ($fichier) {
837
+        include_spip('inc/acces');
838
+        $tmpfile = "$fichier." . creer_uniqid() . '.tmp';
839
+        $fp = spip_fopen_lock($tmpfile, 'w', LOCK_EX);
840
+        if (!$fp and file_exists($fichier)) {
841
+            return filesize($fichier);
842
+        }
843
+        if (!$fp) {
844
+            return false;
845
+        }
846
+        $result = 0; // on renvoie la taille du fichier
847
+    }
848
+    while (!feof($handle) and $taille < $taille_max) {
849
+        $res = fread($handle, 16384);
850
+        $taille += strlen($res);
851
+        if ($fp) {
852
+            fwrite($fp, $res);
853
+            $result = $taille;
854
+        } else {
855
+            $result .= $res;
856
+        }
857
+    }
858
+    if ($fp) {
859
+        spip_fclose_unlock($fp);
860
+        spip_unlink($fichier);
861
+        @rename($tmpfile, $fichier);
862
+        if (!file_exists($fichier)) {
863
+            return false;
864
+        }
865
+    }
866
+
867
+    return $result;
868 868
 }
869 869
 
870 870
 /**
@@ -886,34 +886,34 @@  discard block
 block discarded – undo
886 886
  *   string location
887 887
  */
888 888
 function recuperer_entetes_complets($handle, $if_modified_since = false) {
889
-	$result = array('status' => 0, 'headers' => array(), 'last_modified' => 0, 'location' => '');
890
-
891
-	$s = @trim(fgets($handle, 16384));
892
-	if (!preg_match(',^HTTP/[0-9]+\.[0-9]+ ([0-9]+),', $s, $r)) {
893
-		return false;
894
-	}
895
-	$result['status'] = intval($r[1]);
896
-	while ($s = trim(fgets($handle, 16384))) {
897
-		$result['headers'][] = $s . "\n";
898
-		preg_match(',^([^:]*): *(.*)$,i', $s, $r);
899
-		list(, $d, $v) = $r;
900
-		if (strtolower(trim($d)) == 'location' and $result['status'] >= 300 and $result['status'] < 400) {
901
-			$result['location'] = $v;
902
-		} elseif ($d == 'Last-Modified') {
903
-			$result['last_modified'] = strtotime($v);
904
-		}
905
-	}
906
-	if ($if_modified_since
907
-		and $result['last_modified']
908
-		and $if_modified_since > $result['last_modified']
909
-		and $result['status'] == 200
910
-	) {
911
-		$result['status'] = 304;
912
-	}
913
-
914
-	$result['headers'] = implode('', $result['headers']);
915
-
916
-	return $result;
889
+    $result = array('status' => 0, 'headers' => array(), 'last_modified' => 0, 'location' => '');
890
+
891
+    $s = @trim(fgets($handle, 16384));
892
+    if (!preg_match(',^HTTP/[0-9]+\.[0-9]+ ([0-9]+),', $s, $r)) {
893
+        return false;
894
+    }
895
+    $result['status'] = intval($r[1]);
896
+    while ($s = trim(fgets($handle, 16384))) {
897
+        $result['headers'][] = $s . "\n";
898
+        preg_match(',^([^:]*): *(.*)$,i', $s, $r);
899
+        list(, $d, $v) = $r;
900
+        if (strtolower(trim($d)) == 'location' and $result['status'] >= 300 and $result['status'] < 400) {
901
+            $result['location'] = $v;
902
+        } elseif ($d == 'Last-Modified') {
903
+            $result['last_modified'] = strtotime($v);
904
+        }
905
+    }
906
+    if ($if_modified_since
907
+        and $result['last_modified']
908
+        and $if_modified_since > $result['last_modified']
909
+        and $result['status'] == 200
910
+    ) {
911
+        $result['status'] = 304;
912
+    }
913
+
914
+    $result['headers'] = implode('', $result['headers']);
915
+
916
+    return $result;
917 917
 }
918 918
 
919 919
 /**
@@ -935,22 +935,22 @@  discard block
 block discarded – undo
935 935
  *     Nom du fichier pour copie locale
936 936
  **/
937 937
 function nom_fichier_copie_locale($source, $extension) {
938
-	include_spip('inc/documents');
938
+    include_spip('inc/documents');
939 939
 
940
-	$d = creer_repertoire_documents('distant'); # IMG/distant/
941
-	$d = sous_repertoire($d, $extension); # IMG/distant/pdf/
940
+    $d = creer_repertoire_documents('distant'); # IMG/distant/
941
+    $d = sous_repertoire($d, $extension); # IMG/distant/pdf/
942 942
 
943
-	// on se place tout le temps comme si on etait a la racine
944
-	if (_DIR_RACINE) {
945
-		$d = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $d);
946
-	}
943
+    // on se place tout le temps comme si on etait a la racine
944
+    if (_DIR_RACINE) {
945
+        $d = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $d);
946
+    }
947 947
 
948
-	$m = md5($source);
948
+    $m = md5($source);
949 949
 
950
-	return $d
951
-	. substr(preg_replace(',[^\w-],', '', basename($source)) . '-' . $m, 0, 12)
952
-	. substr($m, 0, 4)
953
-	. ".$extension";
950
+    return $d
951
+    . substr(preg_replace(',[^\w-],', '', basename($source)) . '-' . $m, 0, 12)
952
+    . substr($m, 0, 4)
953
+    . ".$extension";
954 954
 }
955 955
 
956 956
 /**
@@ -968,68 +968,68 @@  discard block
 block discarded – undo
968 968
  *      Nom du fichier calculé
969 969
  **/
970 970
 function fichier_copie_locale($source) {
971
-	// Si c'est deja local pas de souci
972
-	if (!tester_url_absolue($source)) {
973
-		if (_DIR_RACINE) {
974
-			$source = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $source);
975
-		}
976
-
977
-		return $source;
978
-	}
979
-
980
-	// optimisation : on regarde si on peut deviner l'extension dans l'url et si le fichier
981
-	// a deja ete copie en local avec cette extension
982
-	// dans ce cas elle est fiable, pas la peine de requeter en base
983
-	$path_parts = pathinfo($source);
984
-	if (!isset($path_parts['extension'])) {
985
-		$path_parts['extension'] = '';
986
-	}
987
-	$ext = $path_parts ? $path_parts['extension'] : '';
988
-	if ($ext
989
-		and preg_match(',^\w+$,', $ext) // pas de php?truc=1&...
990
-		and $f = nom_fichier_copie_locale($source, $ext)
991
-		and file_exists(_DIR_RACINE . $f)
992
-	) {
993
-		return $f;
994
-	}
995
-
996
-
997
-	// Si c'est deja dans la table des documents,
998
-	// ramener le nom de sa copie potentielle
999
-	$ext = sql_getfetsel('extension', 'spip_documents', 'fichier=' . sql_quote($source) . " AND distant='oui' AND extension <> ''");
1000
-
1001
-	if ($ext) {
1002
-		return nom_fichier_copie_locale($source, $ext);
1003
-	}
1004
-
1005
-	// voir si l'extension indiquee dans le nom du fichier est ok
1006
-	// et si il n'aurait pas deja ete rapatrie
1007
-
1008
-	$ext = $path_parts ? $path_parts['extension'] : '';
1009
-
1010
-	if ($ext and sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
1011
-		$f = nom_fichier_copie_locale($source, $ext);
1012
-		if (file_exists(_DIR_RACINE . $f)) {
1013
-			return $f;
1014
-		}
1015
-	}
1016
-
1017
-	// Ping  pour voir si son extension est connue et autorisee
1018
-	// avec mise en cache du resultat du ping
1019
-
1020
-	$cache = sous_repertoire(_DIR_CACHE, 'rid') . md5($source);
1021
-	if (!@file_exists($cache)
1022
-		or !$path_parts = @unserialize(spip_file_get_contents($cache))
1023
-		or _request('var_mode') == 'recalcul'
1024
-	) {
1025
-		$path_parts = recuperer_infos_distantes($source, 0, false);
1026
-		ecrire_fichier($cache, serialize($path_parts));
1027
-	}
1028
-	$ext = !empty($path_parts['extension']) ? $path_parts['extension'] : '';
1029
-	if ($ext and sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
1030
-		return nom_fichier_copie_locale($source, $ext);
1031
-	}
1032
-	spip_log("pas de copie locale pour $source", 'distant' . _LOG_ERREUR);
971
+    // Si c'est deja local pas de souci
972
+    if (!tester_url_absolue($source)) {
973
+        if (_DIR_RACINE) {
974
+            $source = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $source);
975
+        }
976
+
977
+        return $source;
978
+    }
979
+
980
+    // optimisation : on regarde si on peut deviner l'extension dans l'url et si le fichier
981
+    // a deja ete copie en local avec cette extension
982
+    // dans ce cas elle est fiable, pas la peine de requeter en base
983
+    $path_parts = pathinfo($source);
984
+    if (!isset($path_parts['extension'])) {
985
+        $path_parts['extension'] = '';
986
+    }
987
+    $ext = $path_parts ? $path_parts['extension'] : '';
988
+    if ($ext
989
+        and preg_match(',^\w+$,', $ext) // pas de php?truc=1&...
990
+        and $f = nom_fichier_copie_locale($source, $ext)
991
+        and file_exists(_DIR_RACINE . $f)
992
+    ) {
993
+        return $f;
994
+    }
995
+
996
+
997
+    // Si c'est deja dans la table des documents,
998
+    // ramener le nom de sa copie potentielle
999
+    $ext = sql_getfetsel('extension', 'spip_documents', 'fichier=' . sql_quote($source) . " AND distant='oui' AND extension <> ''");
1000
+
1001
+    if ($ext) {
1002
+        return nom_fichier_copie_locale($source, $ext);
1003
+    }
1004
+
1005
+    // voir si l'extension indiquee dans le nom du fichier est ok
1006
+    // et si il n'aurait pas deja ete rapatrie
1007
+
1008
+    $ext = $path_parts ? $path_parts['extension'] : '';
1009
+
1010
+    if ($ext and sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
1011
+        $f = nom_fichier_copie_locale($source, $ext);
1012
+        if (file_exists(_DIR_RACINE . $f)) {
1013
+            return $f;
1014
+        }
1015
+    }
1016
+
1017
+    // Ping  pour voir si son extension est connue et autorisee
1018
+    // avec mise en cache du resultat du ping
1019
+
1020
+    $cache = sous_repertoire(_DIR_CACHE, 'rid') . md5($source);
1021
+    if (!@file_exists($cache)
1022
+        or !$path_parts = @unserialize(spip_file_get_contents($cache))
1023
+        or _request('var_mode') == 'recalcul'
1024
+    ) {
1025
+        $path_parts = recuperer_infos_distantes($source, 0, false);
1026
+        ecrire_fichier($cache, serialize($path_parts));
1027
+    }
1028
+    $ext = !empty($path_parts['extension']) ? $path_parts['extension'] : '';
1029
+    if ($ext and sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
1030
+        return nom_fichier_copie_locale($source, $ext);
1031
+    }
1032
+    spip_log("pas de copie locale pour $source", 'distant' . _LOG_ERREUR);
1033 1033
 }
1034 1034
 
1035 1035
 
@@ -1057,144 +1057,144 @@  discard block
 block discarded – undo
1057 1057
  **/
1058 1058
 function recuperer_infos_distantes($source, $max = 0, $charger_si_petite_image = true) {
1059 1059
 
1060
-	// pas la peine de perdre son temps
1061
-	if (!tester_url_absolue($source)) {
1062
-		return false;
1063
-	}
1064
-
1065
-	# charger les alias des types mime
1066
-	include_spip('base/typedoc');
1067
-
1068
-	$a = array();
1069
-	$mime_type = '';
1070
-	// On va directement charger le debut des images et des fichiers html,
1071
-	// de maniere a attrapper le maximum d'infos (titre, taille, etc). Si
1072
-	// ca echoue l'utilisateur devra les entrer...
1073
-	if ($headers = recuperer_page($source, false, true, $max, '', '', true)) {
1074
-		list($headers, $a['body']) = preg_split(',\n\n,', $headers, 2);
1075
-
1076
-		if (preg_match(",\nContent-Type: *([^[:space:];]*),i", "\n$headers", $regs)) {
1077
-			$mime_type = (trim($regs[1]));
1078
-		} else {
1079
-			$mime_type = '';
1080
-		} // inconnu
1081
-
1082
-		// Appliquer les alias
1083
-		while (isset($GLOBALS['mime_alias'][$mime_type])) {
1084
-			$mime_type = $GLOBALS['mime_alias'][$mime_type];
1085
-		}
1086
-
1087
-		// Si on a un mime-type insignifiant
1088
-		// text/plain,application/octet-stream ou vide
1089
-		// c'est peut-etre que le serveur ne sait pas
1090
-		// ce qu'il sert ; on va tenter de detecter via l'extension de l'url
1091
-		// ou le Content-Disposition: attachment; filename=...
1092
-		$t = null;
1093
-		if (in_array($mime_type, array('text/plain', '', 'application/octet-stream'))) {
1094
-			if (!$t
1095
-				and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $rext)
1096
-			) {
1097
-				$t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
1098
-			}
1099
-			if (!$t
1100
-				and preg_match(',^Content-Disposition:\s*attachment;\s*filename=(.*)$,Uims', $headers, $m)
1101
-				and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $m[1], $rext)
1102
-			) {
1103
-				$t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
1104
-			}
1105
-		}
1106
-
1107
-		// Autre mime/type (ou text/plain avec fichier d'extension inconnue)
1108
-		if (!$t) {
1109
-			$t = sql_fetsel('extension', 'spip_types_documents', 'mime_type=' . sql_quote($mime_type));
1110
-		}
1111
-
1112
-		// Toujours rien ? (ex: audio/x-ogg au lieu de application/ogg)
1113
-		// On essaie de nouveau avec l'extension
1114
-		if (!$t
1115
-			and $mime_type != 'text/plain'
1116
-			and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $rext)
1117
-		) {
1118
-			# eviter xxx.3 => 3gp (> SPIP 3)
1119
-			$t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
1120
-		}
1121
-
1122
-		if ($t) {
1123
-			spip_log("mime-type $mime_type ok, extension " . $t['extension'], 'distant');
1124
-			$a['extension'] = $t['extension'];
1125
-		} else {
1126
-			# par defaut on retombe sur '.bin' si c'est autorise
1127
-			spip_log("mime-type $mime_type inconnu", 'distant');
1128
-			$t = sql_fetsel('extension', 'spip_types_documents', "extension='bin'");
1129
-			if (!$t) {
1130
-				return false;
1131
-			}
1132
-			$a['extension'] = $t['extension'];
1133
-		}
1134
-
1135
-		if (preg_match(",\nContent-Length: *([^[:space:]]*),i", "\n$headers", $regs)) {
1136
-			$a['taille'] = intval($regs[1]);
1137
-		}
1138
-	}
1139
-
1140
-	// Echec avec HEAD, on tente avec GET
1141
-	if (!$a and !$max) {
1142
-		spip_log("tenter GET $source", 'distant');
1143
-		$a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
1144
-	}
1145
-
1146
-	// si on a rien trouve pas la peine d'insister
1147
-	if (!$a) {
1148
-		return false;
1149
-	}
1150
-
1151
-	// S'il s'agit d'une image pas trop grosse ou d'un fichier html, on va aller
1152
-	// recharger le document en GET et recuperer des donnees supplementaires...
1153
-	include_spip('inc/filtres_images_lib_mini');
1154
-	if (strpos($mime_type, "image/") === 0
1155
-	  and $extension = _image_trouver_extension_depuis_mime($mime_type)) {
1156
-		if ($max == 0
1157
-			and (empty($a['taille']) or $a['taille'] < _INC_DISTANT_MAX_SIZE)
1158
-			and in_array($extension, formats_image_acceptables())
1159
-			and $charger_si_petite_image
1160
-		) {
1161
-			$a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
1162
-		} else {
1163
-			if ($a['body']) {
1164
-				$a['extension'] = $extension;
1165
-				$a['fichier'] = _DIR_RACINE . nom_fichier_copie_locale($source, $extension);
1166
-				ecrire_fichier($a['fichier'], $a['body']);
1167
-				$size_image = @spip_getimagesize($a['fichier']);
1168
-				$a['largeur'] = intval($size_image[0]);
1169
-				$a['hauteur'] = intval($size_image[1]);
1170
-				$a['type_image'] = true;
1171
-			}
1172
-		}
1173
-	}
1174
-
1175
-	// Fichier swf, si on n'a pas la taille, on va mettre 425x350 par defaut
1176
-	// ce sera mieux que 0x0
1177
-	// Flash is dead!
1178
-	if ($a and isset($a['extension']) and $a['extension'] == 'swf'
1179
-		and empty($a['largeur'])
1180
-	) {
1181
-		$a['largeur'] = 425;
1182
-		$a['hauteur'] = 350;
1183
-	}
1184
-
1185
-	if ($mime_type == 'text/html') {
1186
-		include_spip('inc/filtres');
1187
-		$page = recuperer_page($source, true, false, _INC_DISTANT_MAX_SIZE);
1188
-		if (preg_match(',<title>(.*?)</title>,ims', $page, $regs)) {
1189
-			$a['titre'] = corriger_caracteres(trim($regs[1]));
1190
-		}
1191
-		if (!isset($a['taille']) or !$a['taille']) {
1192
-			$a['taille'] = strlen($page); # a peu pres
1193
-		}
1194
-	}
1195
-	$a['mime_type'] = $mime_type;
1196
-
1197
-	return $a;
1060
+    // pas la peine de perdre son temps
1061
+    if (!tester_url_absolue($source)) {
1062
+        return false;
1063
+    }
1064
+
1065
+    # charger les alias des types mime
1066
+    include_spip('base/typedoc');
1067
+
1068
+    $a = array();
1069
+    $mime_type = '';
1070
+    // On va directement charger le debut des images et des fichiers html,
1071
+    // de maniere a attrapper le maximum d'infos (titre, taille, etc). Si
1072
+    // ca echoue l'utilisateur devra les entrer...
1073
+    if ($headers = recuperer_page($source, false, true, $max, '', '', true)) {
1074
+        list($headers, $a['body']) = preg_split(',\n\n,', $headers, 2);
1075
+
1076
+        if (preg_match(",\nContent-Type: *([^[:space:];]*),i", "\n$headers", $regs)) {
1077
+            $mime_type = (trim($regs[1]));
1078
+        } else {
1079
+            $mime_type = '';
1080
+        } // inconnu
1081
+
1082
+        // Appliquer les alias
1083
+        while (isset($GLOBALS['mime_alias'][$mime_type])) {
1084
+            $mime_type = $GLOBALS['mime_alias'][$mime_type];
1085
+        }
1086
+
1087
+        // Si on a un mime-type insignifiant
1088
+        // text/plain,application/octet-stream ou vide
1089
+        // c'est peut-etre que le serveur ne sait pas
1090
+        // ce qu'il sert ; on va tenter de detecter via l'extension de l'url
1091
+        // ou le Content-Disposition: attachment; filename=...
1092
+        $t = null;
1093
+        if (in_array($mime_type, array('text/plain', '', 'application/octet-stream'))) {
1094
+            if (!$t
1095
+                and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $rext)
1096
+            ) {
1097
+                $t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
1098
+            }
1099
+            if (!$t
1100
+                and preg_match(',^Content-Disposition:\s*attachment;\s*filename=(.*)$,Uims', $headers, $m)
1101
+                and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $m[1], $rext)
1102
+            ) {
1103
+                $t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
1104
+            }
1105
+        }
1106
+
1107
+        // Autre mime/type (ou text/plain avec fichier d'extension inconnue)
1108
+        if (!$t) {
1109
+            $t = sql_fetsel('extension', 'spip_types_documents', 'mime_type=' . sql_quote($mime_type));
1110
+        }
1111
+
1112
+        // Toujours rien ? (ex: audio/x-ogg au lieu de application/ogg)
1113
+        // On essaie de nouveau avec l'extension
1114
+        if (!$t
1115
+            and $mime_type != 'text/plain'
1116
+            and preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $rext)
1117
+        ) {
1118
+            # eviter xxx.3 => 3gp (> SPIP 3)
1119
+            $t = sql_fetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($rext[1], '', 'text'));
1120
+        }
1121
+
1122
+        if ($t) {
1123
+            spip_log("mime-type $mime_type ok, extension " . $t['extension'], 'distant');
1124
+            $a['extension'] = $t['extension'];
1125
+        } else {
1126
+            # par defaut on retombe sur '.bin' si c'est autorise
1127
+            spip_log("mime-type $mime_type inconnu", 'distant');
1128
+            $t = sql_fetsel('extension', 'spip_types_documents', "extension='bin'");
1129
+            if (!$t) {
1130
+                return false;
1131
+            }
1132
+            $a['extension'] = $t['extension'];
1133
+        }
1134
+
1135
+        if (preg_match(",\nContent-Length: *([^[:space:]]*),i", "\n$headers", $regs)) {
1136
+            $a['taille'] = intval($regs[1]);
1137
+        }
1138
+    }
1139
+
1140
+    // Echec avec HEAD, on tente avec GET
1141
+    if (!$a and !$max) {
1142
+        spip_log("tenter GET $source", 'distant');
1143
+        $a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
1144
+    }
1145
+
1146
+    // si on a rien trouve pas la peine d'insister
1147
+    if (!$a) {
1148
+        return false;
1149
+    }
1150
+
1151
+    // S'il s'agit d'une image pas trop grosse ou d'un fichier html, on va aller
1152
+    // recharger le document en GET et recuperer des donnees supplementaires...
1153
+    include_spip('inc/filtres_images_lib_mini');
1154
+    if (strpos($mime_type, "image/") === 0
1155
+      and $extension = _image_trouver_extension_depuis_mime($mime_type)) {
1156
+        if ($max == 0
1157
+            and (empty($a['taille']) or $a['taille'] < _INC_DISTANT_MAX_SIZE)
1158
+            and in_array($extension, formats_image_acceptables())
1159
+            and $charger_si_petite_image
1160
+        ) {
1161
+            $a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
1162
+        } else {
1163
+            if ($a['body']) {
1164
+                $a['extension'] = $extension;
1165
+                $a['fichier'] = _DIR_RACINE . nom_fichier_copie_locale($source, $extension);
1166
+                ecrire_fichier($a['fichier'], $a['body']);
1167
+                $size_image = @spip_getimagesize($a['fichier']);
1168
+                $a['largeur'] = intval($size_image[0]);
1169
+                $a['hauteur'] = intval($size_image[1]);
1170
+                $a['type_image'] = true;
1171
+            }
1172
+        }
1173
+    }
1174
+
1175
+    // Fichier swf, si on n'a pas la taille, on va mettre 425x350 par defaut
1176
+    // ce sera mieux que 0x0
1177
+    // Flash is dead!
1178
+    if ($a and isset($a['extension']) and $a['extension'] == 'swf'
1179
+        and empty($a['largeur'])
1180
+    ) {
1181
+        $a['largeur'] = 425;
1182
+        $a['hauteur'] = 350;
1183
+    }
1184
+
1185
+    if ($mime_type == 'text/html') {
1186
+        include_spip('inc/filtres');
1187
+        $page = recuperer_page($source, true, false, _INC_DISTANT_MAX_SIZE);
1188
+        if (preg_match(',<title>(.*?)</title>,ims', $page, $regs)) {
1189
+            $a['titre'] = corriger_caracteres(trim($regs[1]));
1190
+        }
1191
+        if (!isset($a['taille']) or !$a['taille']) {
1192
+            $a['taille'] = strlen($page); # a peu pres
1193
+        }
1194
+    }
1195
+    $a['mime_type'] = $mime_type;
1196
+
1197
+    return $a;
1198 1198
 }
1199 1199
 
1200 1200
 
@@ -1210,45 +1210,45 @@  discard block
 block discarded – undo
1210 1210
  * @return string
1211 1211
  */
1212 1212
 function need_proxy($host, $http_proxy = null, $http_noproxy = null) {
1213
-	if (is_null($http_proxy)) {
1214
-		$http_proxy = isset($GLOBALS['meta']['http_proxy']) ? $GLOBALS['meta']['http_proxy'] : null;
1215
-	}
1216
-	// rien a faire si pas de proxy :)
1217
-	if (is_null($http_proxy) or !$http_proxy = trim($http_proxy)) {
1218
-		return '';
1219
-	}
1220
-
1221
-	if (is_null($http_noproxy)) {
1222
-		$http_noproxy = isset($GLOBALS['meta']['http_noproxy']) ? $GLOBALS['meta']['http_noproxy'] : null;
1223
-	}
1224
-	// si pas d'exception, on retourne le proxy
1225
-	if (is_null($http_noproxy) or !$http_noproxy = trim($http_noproxy)) {
1226
-		return $http_proxy;
1227
-	}
1228
-
1229
-	// si le host ou l'un des domaines parents est dans $http_noproxy on fait exception
1230
-	// $http_noproxy peut contenir plusieurs domaines separes par des espaces ou retour ligne
1231
-	$http_noproxy = str_replace("\n", " ", $http_noproxy);
1232
-	$http_noproxy = str_replace("\r", " ", $http_noproxy);
1233
-	$http_noproxy = " $http_noproxy ";
1234
-	$domain = $host;
1235
-	// si le domaine exact www.example.org est dans les exceptions
1236
-	if (strpos($http_noproxy, " $domain ") !== false)
1237
-		return '';
1238
-
1239
-	while (strpos($domain, '.') !== false) {
1240
-		$domain = explode('.', $domain);
1241
-		array_shift($domain);
1242
-		$domain = implode('.', $domain);
1243
-
1244
-		// ou si un domaine parent commencant par un . est dans les exceptions (indiquant qu'il couvre tous les sous-domaines)
1245
-		if (strpos($http_noproxy, " .$domain ") !== false) {
1246
-			return '';
1247
-		}
1248
-	}
1249
-
1250
-	// ok c'est pas une exception
1251
-	return $http_proxy;
1213
+    if (is_null($http_proxy)) {
1214
+        $http_proxy = isset($GLOBALS['meta']['http_proxy']) ? $GLOBALS['meta']['http_proxy'] : null;
1215
+    }
1216
+    // rien a faire si pas de proxy :)
1217
+    if (is_null($http_proxy) or !$http_proxy = trim($http_proxy)) {
1218
+        return '';
1219
+    }
1220
+
1221
+    if (is_null($http_noproxy)) {
1222
+        $http_noproxy = isset($GLOBALS['meta']['http_noproxy']) ? $GLOBALS['meta']['http_noproxy'] : null;
1223
+    }
1224
+    // si pas d'exception, on retourne le proxy
1225
+    if (is_null($http_noproxy) or !$http_noproxy = trim($http_noproxy)) {
1226
+        return $http_proxy;
1227
+    }
1228
+
1229
+    // si le host ou l'un des domaines parents est dans $http_noproxy on fait exception
1230
+    // $http_noproxy peut contenir plusieurs domaines separes par des espaces ou retour ligne
1231
+    $http_noproxy = str_replace("\n", " ", $http_noproxy);
1232
+    $http_noproxy = str_replace("\r", " ", $http_noproxy);
1233
+    $http_noproxy = " $http_noproxy ";
1234
+    $domain = $host;
1235
+    // si le domaine exact www.example.org est dans les exceptions
1236
+    if (strpos($http_noproxy, " $domain ") !== false)
1237
+        return '';
1238
+
1239
+    while (strpos($domain, '.') !== false) {
1240
+        $domain = explode('.', $domain);
1241
+        array_shift($domain);
1242
+        $domain = implode('.', $domain);
1243
+
1244
+        // ou si un domaine parent commencant par un . est dans les exceptions (indiquant qu'il couvre tous les sous-domaines)
1245
+        if (strpos($http_noproxy, " .$domain ") !== false) {
1246
+            return '';
1247
+        }
1248
+    }
1249
+
1250
+    // ok c'est pas une exception
1251
+    return $http_proxy;
1252 1252
 }
1253 1253
 
1254 1254
 
@@ -1271,58 +1271,58 @@  discard block
 block discarded – undo
1271 1271
  * @return array
1272 1272
  */
1273 1273
 function init_http($method, $url, $refuse_gz = false, $referer = '', $datas = '', $vers = 'HTTP/1.0', $date = '') {
1274
-	$user = $via_proxy = $proxy_user = '';
1275
-	$fopen = false;
1276
-
1277
-	$t = @parse_url($url);
1278
-	$host = $t['host'];
1279
-	if ($t['scheme'] == 'http') {
1280
-		$scheme = 'http';
1281
-		$noproxy = '';
1282
-	} elseif ($t['scheme'] == 'https') {
1283
-		$scheme = 'ssl';
1284
-		$noproxy = 'ssl://';
1285
-		if (!isset($t['port']) || !($port = $t['port'])) {
1286
-			$t['port'] = 443;
1287
-		}
1288
-	} else {
1289
-		$scheme = $t['scheme'];
1290
-		$noproxy = $scheme . '://';
1291
-	}
1292
-	if (isset($t['user'])) {
1293
-		$user = array($t['user'], $t['pass']);
1294
-	}
1295
-
1296
-	if (!isset($t['port']) || !($port = $t['port'])) {
1297
-		$port = 80;
1298
-	}
1299
-	if (!isset($t['path']) || !($path = $t['path'])) {
1300
-		$path = '/';
1301
-	}
1302
-
1303
-	if (!empty($t['query'])) {
1304
-		$path .= '?' . $t['query'];
1305
-	}
1306
-
1307
-	$f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date);
1308
-	if (!$f or !is_resource($f)) {
1309
-		// fallback : fopen si on a pas fait timeout dans lance_requete
1310
-		// ce qui correspond a $f===110
1311
-		if ($f !== 110
1312
-			and !need_proxy($host)
1313
-			and !_request('tester_proxy')
1314
-			and (!isset($GLOBALS['inc_distant_allow_fopen']) or $GLOBALS['inc_distant_allow_fopen'])
1315
-		) {
1316
-			$f = @fopen($url, 'rb');
1317
-			spip_log("connexion vers $url par simple fopen", 'distant');
1318
-			$fopen = true;
1319
-		} else {
1320
-			// echec total
1321
-			$f = false;
1322
-		}
1323
-	}
1324
-
1325
-	return array($f, $fopen);
1274
+    $user = $via_proxy = $proxy_user = '';
1275
+    $fopen = false;
1276
+
1277
+    $t = @parse_url($url);
1278
+    $host = $t['host'];
1279
+    if ($t['scheme'] == 'http') {
1280
+        $scheme = 'http';
1281
+        $noproxy = '';
1282
+    } elseif ($t['scheme'] == 'https') {
1283
+        $scheme = 'ssl';
1284
+        $noproxy = 'ssl://';
1285
+        if (!isset($t['port']) || !($port = $t['port'])) {
1286
+            $t['port'] = 443;
1287
+        }
1288
+    } else {
1289
+        $scheme = $t['scheme'];
1290
+        $noproxy = $scheme . '://';
1291
+    }
1292
+    if (isset($t['user'])) {
1293
+        $user = array($t['user'], $t['pass']);
1294
+    }
1295
+
1296
+    if (!isset($t['port']) || !($port = $t['port'])) {
1297
+        $port = 80;
1298
+    }
1299
+    if (!isset($t['path']) || !($path = $t['path'])) {
1300
+        $path = '/';
1301
+    }
1302
+
1303
+    if (!empty($t['query'])) {
1304
+        $path .= '?' . $t['query'];
1305
+    }
1306
+
1307
+    $f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date);
1308
+    if (!$f or !is_resource($f)) {
1309
+        // fallback : fopen si on a pas fait timeout dans lance_requete
1310
+        // ce qui correspond a $f===110
1311
+        if ($f !== 110
1312
+            and !need_proxy($host)
1313
+            and !_request('tester_proxy')
1314
+            and (!isset($GLOBALS['inc_distant_allow_fopen']) or $GLOBALS['inc_distant_allow_fopen'])
1315
+        ) {
1316
+            $f = @fopen($url, 'rb');
1317
+            spip_log("connexion vers $url par simple fopen", 'distant');
1318
+            $fopen = true;
1319
+        } else {
1320
+            // echec total
1321
+            $f = false;
1322
+        }
1323
+    }
1324
+
1325
+    return array($f, $fopen);
1326 1326
 }
1327 1327
 
1328 1328
 /**
@@ -1357,124 +1357,124 @@  discard block
 block discarded – undo
1357 1357
  *   resource socket vers l'url demandee
1358 1358
  */
1359 1359
 function lance_requete(
1360
-	$method,
1361
-	$scheme,
1362
-	$user,
1363
-	$host,
1364
-	$path,
1365
-	$port,
1366
-	$noproxy,
1367
-	$refuse_gz = false,
1368
-	$referer = '',
1369
-	$datas = '',
1370
-	$vers = 'HTTP/1.0',
1371
-	$date = ''
1360
+    $method,
1361
+    $scheme,
1362
+    $user,
1363
+    $host,
1364
+    $path,
1365
+    $port,
1366
+    $noproxy,
1367
+    $refuse_gz = false,
1368
+    $referer = '',
1369
+    $datas = '',
1370
+    $vers = 'HTTP/1.0',
1371
+    $date = ''
1372 1372
 ) {
1373 1373
 
1374
-	$proxy_user = '';
1375
-	$http_proxy = need_proxy($host);
1376
-	if ($user) {
1377
-		$user = urlencode($user[0]) . ':' . urlencode($user[1]);
1378
-	}
1379
-
1380
-	$connect = '';
1381
-	if ($http_proxy) {
1382
-		if (!defined('_PROXY_HTTPS_NOT_VIA_CONNECT') and in_array($scheme , array('tls','ssl'))) {
1383
-			$path_host = (!$user ? '' : "$user@") . $host . (($port != 80) ? ":$port" : '');
1384
-			$connect = 'CONNECT ' . $path_host . " $vers\r\n"
1385
-				. "Host: $path_host\r\n"
1386
-				. "Proxy-Connection: Keep-Alive\r\n";
1387
-		} else {
1388
-			$path = (in_array($scheme , array('tls','ssl')) ? 'https://' : "$scheme://")
1389
-				. (!$user ? '' : "$user@")
1390
-				. "$host" . (($port != 80) ? ":$port" : '') . $path;
1391
-		}
1392
-		$t2 = @parse_url($http_proxy);
1393
-		$first_host = $t2['host'];
1394
-		if (!($port = $t2['port'])) {
1395
-			$port = 80;
1396
-		}
1397
-		if ($t2['user']) {
1398
-			$proxy_user = base64_encode($t2['user'] . ':' . $t2['pass']);
1399
-		}
1400
-	} else {
1401
-		$first_host = $noproxy . $host;
1402
-	}
1403
-
1404
-	if ($connect) {
1405
-		$streamContext = stream_context_create(array(
1406
-			'ssl' => array(
1407
-				'verify_peer' => false,
1408
-				'allow_self_signed' => true,
1409
-				'SNI_enabled' => true,
1410
-				'peer_name' => $host,
1411
-			)
1412
-		));
1413
-		$f = @stream_socket_client(
1414
-			"tcp://$first_host:$port",
1415
-			$errno,
1416
-			$errstr,
1417
-			_INC_DISTANT_CONNECT_TIMEOUT,
1418
-			STREAM_CLIENT_CONNECT,
1419
-			$streamContext
1420
-		);
1421
-		spip_log("Recuperer $path sur $first_host:$port par $f (via CONNECT)", 'connect');
1422
-		if (!$f) {
1423
-			spip_log("Erreur connexion $errno $errstr", 'distant' . _LOG_ERREUR);
1424
-			return $errno;
1425
-		}
1426
-		stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
1427
-
1428
-		fputs($f, $connect);
1429
-		fputs($f, "\r\n");
1430
-		$res = fread($f, 1024);
1431
-		if (!$res
1432
-			or !count($res = explode(' ', $res))
1433
-			or $res[1] !== '200'
1434
-		) {
1435
-			spip_log("Echec CONNECT sur $first_host:$port", 'connect' . _LOG_INFO_IMPORTANTE);
1436
-			fclose($f);
1437
-
1438
-			return false;
1439
-		}
1440
-		// important, car sinon on lit trop vite et les donnees ne sont pas encore dispo
1441
-		stream_set_blocking($f, true);
1442
-		// envoyer le handshake
1443
-		stream_socket_enable_crypto($f, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
1444
-		spip_log("OK CONNECT sur $first_host:$port", 'connect');
1445
-	} else {
1446
-		$ntry = 3;
1447
-		do {
1448
-			$f = @fsockopen($first_host, $port, $errno, $errstr, _INC_DISTANT_CONNECT_TIMEOUT);
1449
-		} while (!$f and $ntry-- and $errno !== 110 and sleep(1));
1450
-		spip_log("Recuperer $path sur $first_host:$port par $f");
1451
-		if (!$f) {
1452
-			spip_log("Erreur connexion $errno $errstr", 'distant' . _LOG_ERREUR);
1453
-
1454
-			return $errno;
1455
-		}
1456
-		stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
1457
-	}
1458
-
1459
-	$site = isset($GLOBALS['meta']['adresse_site']) ? $GLOBALS['meta']['adresse_site'] : '';
1460
-
1461
-	$host_port = $host;
1462
-	if ($port != (in_array($scheme , array('tls','ssl')) ? 443 : 80)) {
1463
-		$host_port .= ":$port";
1464
-	}
1465
-	$req = "$method $path $vers\r\n"
1466
-		. "Host: $host_port\r\n"
1467
-		. 'User-Agent: ' . _INC_DISTANT_USER_AGENT . "\r\n"
1468
-		. ($refuse_gz ? '' : ('Accept-Encoding: ' . _INC_DISTANT_CONTENT_ENCODING . "\r\n"))
1469
-		. (!$site ? '' : "Referer: $site/$referer\r\n")
1470
-		. (!$date ? '' : 'If-Modified-Since: ' . (gmdate('D, d M Y H:i:s', $date) . " GMT\r\n"))
1471
-		. (!$user ? '' : ('Authorization: Basic ' . base64_encode($user) . "\r\n"))
1472
-		. (!$proxy_user ? '' : "Proxy-Authorization: Basic $proxy_user\r\n")
1473
-		. (!strpos($vers, '1.1') ? '' : "Keep-Alive: 300\r\nConnection: keep-alive\r\n");
1374
+    $proxy_user = '';
1375
+    $http_proxy = need_proxy($host);
1376
+    if ($user) {
1377
+        $user = urlencode($user[0]) . ':' . urlencode($user[1]);
1378
+    }
1379
+
1380
+    $connect = '';
1381
+    if ($http_proxy) {
1382
+        if (!defined('_PROXY_HTTPS_NOT_VIA_CONNECT') and in_array($scheme , array('tls','ssl'))) {
1383
+            $path_host = (!$user ? '' : "$user@") . $host . (($port != 80) ? ":$port" : '');
1384
+            $connect = 'CONNECT ' . $path_host . " $vers\r\n"
1385
+                . "Host: $path_host\r\n"
1386
+                . "Proxy-Connection: Keep-Alive\r\n";
1387
+        } else {
1388
+            $path = (in_array($scheme , array('tls','ssl')) ? 'https://' : "$scheme://")
1389
+                . (!$user ? '' : "$user@")
1390
+                . "$host" . (($port != 80) ? ":$port" : '') . $path;
1391
+        }
1392
+        $t2 = @parse_url($http_proxy);
1393
+        $first_host = $t2['host'];
1394
+        if (!($port = $t2['port'])) {
1395
+            $port = 80;
1396
+        }
1397
+        if ($t2['user']) {
1398
+            $proxy_user = base64_encode($t2['user'] . ':' . $t2['pass']);
1399
+        }
1400
+    } else {
1401
+        $first_host = $noproxy . $host;
1402
+    }
1403
+
1404
+    if ($connect) {
1405
+        $streamContext = stream_context_create(array(
1406
+            'ssl' => array(
1407
+                'verify_peer' => false,
1408
+                'allow_self_signed' => true,
1409
+                'SNI_enabled' => true,
1410
+                'peer_name' => $host,
1411
+            )
1412
+        ));
1413
+        $f = @stream_socket_client(
1414
+            "tcp://$first_host:$port",
1415
+            $errno,
1416
+            $errstr,
1417
+            _INC_DISTANT_CONNECT_TIMEOUT,
1418
+            STREAM_CLIENT_CONNECT,
1419
+            $streamContext
1420
+        );
1421
+        spip_log("Recuperer $path sur $first_host:$port par $f (via CONNECT)", 'connect');
1422
+        if (!$f) {
1423
+            spip_log("Erreur connexion $errno $errstr", 'distant' . _LOG_ERREUR);
1424
+            return $errno;
1425
+        }
1426
+        stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
1427
+
1428
+        fputs($f, $connect);
1429
+        fputs($f, "\r\n");
1430
+        $res = fread($f, 1024);
1431
+        if (!$res
1432
+            or !count($res = explode(' ', $res))
1433
+            or $res[1] !== '200'
1434
+        ) {
1435
+            spip_log("Echec CONNECT sur $first_host:$port", 'connect' . _LOG_INFO_IMPORTANTE);
1436
+            fclose($f);
1437
+
1438
+            return false;
1439
+        }
1440
+        // important, car sinon on lit trop vite et les donnees ne sont pas encore dispo
1441
+        stream_set_blocking($f, true);
1442
+        // envoyer le handshake
1443
+        stream_socket_enable_crypto($f, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
1444
+        spip_log("OK CONNECT sur $first_host:$port", 'connect');
1445
+    } else {
1446
+        $ntry = 3;
1447
+        do {
1448
+            $f = @fsockopen($first_host, $port, $errno, $errstr, _INC_DISTANT_CONNECT_TIMEOUT);
1449
+        } while (!$f and $ntry-- and $errno !== 110 and sleep(1));
1450
+        spip_log("Recuperer $path sur $first_host:$port par $f");
1451
+        if (!$f) {
1452
+            spip_log("Erreur connexion $errno $errstr", 'distant' . _LOG_ERREUR);
1453
+
1454
+            return $errno;
1455
+        }
1456
+        stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
1457
+    }
1458
+
1459
+    $site = isset($GLOBALS['meta']['adresse_site']) ? $GLOBALS['meta']['adresse_site'] : '';
1460
+
1461
+    $host_port = $host;
1462
+    if ($port != (in_array($scheme , array('tls','ssl')) ? 443 : 80)) {
1463
+        $host_port .= ":$port";
1464
+    }
1465
+    $req = "$method $path $vers\r\n"
1466
+        . "Host: $host_port\r\n"
1467
+        . 'User-Agent: ' . _INC_DISTANT_USER_AGENT . "\r\n"
1468
+        . ($refuse_gz ? '' : ('Accept-Encoding: ' . _INC_DISTANT_CONTENT_ENCODING . "\r\n"))
1469
+        . (!$site ? '' : "Referer: $site/$referer\r\n")
1470
+        . (!$date ? '' : 'If-Modified-Since: ' . (gmdate('D, d M Y H:i:s', $date) . " GMT\r\n"))
1471
+        . (!$user ? '' : ('Authorization: Basic ' . base64_encode($user) . "\r\n"))
1472
+        . (!$proxy_user ? '' : "Proxy-Authorization: Basic $proxy_user\r\n")
1473
+        . (!strpos($vers, '1.1') ? '' : "Keep-Alive: 300\r\nConnection: keep-alive\r\n");
1474 1474
 
1475 1475
 #	spip_log("Requete\n$req", 'distant');
1476
-	fputs($f, $req);
1477
-	fputs($f, $datas ? $datas : "\r\n");
1476
+    fputs($f, $req);
1477
+    fputs($f, $datas ? $datas : "\r\n");
1478 1478
 
1479
-	return $f;
1479
+    return $f;
1480 1480
 }
Please login to merge, or discard this patch.