alternative à parse_str sans limitation
Bon c’est un peu technique mais la fonction PHP parse_str est limité par la directive max_input_vars ce qui fait que par défaut on ne peut traiter que 1000 paramètres avec cette fonction.
Comme j’ai eu besoin d’en traiter plus que ça voici une réécriture de parse_str sans limitation. Elle supporte les tableaux imbriqués et c’est déjà pas mal.
/**
* do the same than parse_str without max_input_vars limitation
* @param $string array string to parse
* @return array query parsed
**/
function my_parse_str($string) {
$result = array();
// find the pairs "name=value"
$pairs = explode('&', $string);
$toEvaluate = ''; // we will do a big eval() at the end not pretty but simplier
foreach($pairs as $pair) {
list($name, $value) = explode('=', $pair, 2);
$name = urldecode($name);
if (strpos($name, '[') !== false) { // name is an array
$name = preg_replace('|\[|', '][', $name, 1);
$name = str_replace(array('\'', '[', ']'), array('\\\'', '[\'', '\']'), $name);
$toEvaluate .= '$result[\''.$name.' = '.urldecode($value).'; '; // $result['na']['me'] = 'value';
}
else {
$name = str_replace('\'', '\\\'', $name);
$toEvaluate .= '$result[\''.$name.'\'] = '.urldecode($value).'; '; // $result['name'] = 'value';
}
}
eval($toEvaluate);
return $result;
}
$array = my_parse_str($query);
Détecter un module apache avec PHP
Utile pour détecter le mod_evasive par exemple.
/**
* return true if the module $name is activated in apache
*
* @param string $name module name
* @return boolean
* @author Samdha
**/
function detect_apache_mod($name) {
$save = ob_get_clean();
ob_start();
phpinfo();
$phpinfo = ob_get_clean();
if ($save !== false) {
ob_start();
echo $save;
}
return (strpos($phpinfo, $name) !== false);
}
if (detect_apache_mod('mod_evasive')) sleep(1);
Utilisé dans le module Prestashop de mise à jour facile
Convertir une date excel en timestamp
Avec PHP-ExcelReader, on se retrouve parfois avec des timestamps Excel au lieu de date. Voici comment les convertir en timestamps unix.
$timestampExcel = 40544;
$timestampUnix = 86400*($timestampExcel - 25569);
echo date('Y-m-d', $timestampUnix); // 2011-01-01
Forcer index.php avec Wordpress
Wordpress a une mauvaise habitude : si vous allez à la racine de votre blog en tapant http://www.example.com/index.php, il vous redirigera vers http://www.example.com/ . De même http://www.example.com/index.php?cat=1 est redirigé vers http://www.example.com/?cat=1 .
En général c’est une bonne chose : tout le monde s’en fout, l’URL est plus petite et personne n’a besoin de savoir que votre site est en PHP.
Par contre si vous avez un fichier index.html c’est très génant : impossible de visiter votre blog, on retombe toujours vers index.html puisque c’est la page par défaut sur la plupart des serveurs.
Donc voici comment faire pour forcer l’utilisation de index.php dans les URL :
Fichier wp-includes/link-template.php ligne 1869
$url .= '/' . ltrim( $path, '/' );
devient
$url .= '/' . ltrim( 'index.php'.$path, '/' );
Fichier wp-includes/canonical.php ligne 58
//$original['path'] = preg_replace('|/index\.php$|', '/', $original['path']);
devient
$original['path'] = preg_replace('|/index\.php$|', '/', $original['path']);