PHP
De Bricosoft.
PHP est l'acronyme de problème d'hygiène personnelle.
- "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." 0x58
[modifier] $_SERVER['SERVER_NAME'] vs $_SERVER['HTTP_HOST']
- $_SERVER['SERVER_NAME']
- dépend du serveur web. Les directives du serveur Apache le modifie comme ServerName, UseCanonicalName.
- $_SERVER['HTTP_HOST']
- dépend de la requête HTTP par le client(navigateur). Prends le contenu de l'entête Host: s'il existe.
Conclusion : ne pas faire une confiance aveugle aux valeurs du tableau $_SERVER sauf si l'on maîtrise la configuration du serveur web (UseCanonicalName On + ServerName www.bricosoft.com pour Apache) et on prendra SERVER_NAME.
[modifier] foreach par reference
foreach ($arr as &$value) { $value = $value * 2; }
[modifier] Afficher une image aléatoirement / randomized printed image
Ce petit programme renvoie une image parmi les images présentes dans le dossier.
http://tremulous.bricosoft.com/images/banniere/b.php
Les images dans le dossier (jpg ou png) : http://tremulous.bricosoft.com/images/banniere/
Le source : http://tremulous.bricosoft.com/images/banniere/b.phps
$files = array(); // Contient la liste des images $filesn = array('.', '..', '.htaccess', 'b.php'); // Fichiers qu'on ne doit pas prendre en compte dans la liste // (il faut rajouter tous les noms de fichiers interdits) $dir = './'; // Répertoire à ouvrir $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { $files[] = $filename; } closedir($dh); $files = array_diff($files, $filesn); // On fait la soustraction des fichiers qu'on ne veut pas prendre en compte $file = $files[array_rand($files, 1)]; // Un fichier au hasard $header = 'Content-Type: image/'; $png_pattern = '/\.png$/i'; // Pour déterminer le type de fichier $jpg_pattern = '/\.jpe?g$/i'; // Extensions possibles: .Png, .jpG, .jpeg, .JpeG, etc. if (preg_match($png_pattern, $file)) { $header .= 'png'; $image = imagecreatefrompng($file); header($header); imagepng($image); } elseif (preg_match($jpg_pattern, $file)) { $header .= 'jpeg'; $image = imagecreatefromjpeg($file); header($header); imagejpeg($image); }
Utilité : avatar aléatoire, égayer une page...
[modifier] Eclipse
Help>Software Updates>Find and Install *Search for new features to install **New Remote Site ***Name: PDT URL: http://download.eclipse.org/tools/pdt/updates/ Finish
Selectionnez Callisto et PDT, en cas de plugins manquant, mettez en surbrillance Callisto puis cliquez sur "Select Required", les paquets manquants seront sélectionnés automatiquement.
[modifier] Détecter IE <= 6
if( preg_match('/(?i)msie [1-6]/',$_SERVER['HTTP_USER_AGENT']) ) // IE <= 6 else // autre
[modifier] Unicode vers Html
Par exemple ä est unicodé en "U+00E4" :
$ php -r "echo base_convert('00E4',16,10);" 228
L'entité html est donc :
ä
Preuve :
html_entity_decode('&#'.base_convert('00E4',16,10).';',ENT_QUOTES, 'UTF-8');" $ php -r "echo html_entity_decode('&#'.base_convert('00E4',16,10).';',ENT_QUOTES, 'UTF-8');" ä
En CLI (le fichier doit être encodé en UTF-8) :
#!/usr/bin/php -q <?php //php -r "echo html_entity_decode('&#'.base_convert('00E4',16,10).';',ENT_QUOTES, 'UTF-8');" $sT= 'á, à, ă, â, å, ä, ã, ą, ā, æ, ć, ĉ, č, ċ, ç, ď, đ, é, è, ĕ, ê, ě, ë, ė, ę, ē, ğ, ĝ, ġ, ģ, ĥ, ħ, í, ì, ĭ, î, ï, ĩ, į, ī, ı, ĵ, ķ, ĸ, ĺ, ľ, ļ, ł, ń, ň, ñ, ņ, ŋ, ó, ò, ŏ, ô, ö, ő, õ, ø, ō, ŕ, ř, ŗ, ś, ŝ, ş, ť, ţ, ŧ, ú, ù, ŭ, û, ů, ü, ű, ũ, ų, ū, ŵ, ý, ŷ, ÿ, ź, ż, ð, þ, á, é, í, ñ, ó'; $aU= explode(',',$sT); $aU= array_map('trim', $aU); $aH= array(); foreach ($aU as $sC) { if ( !ereg('#', $sC) ) { $aH[]= htmlentities($sC, ENT_NOQUOTES, 'UTF-8'); } else { $aH[]= $sC; } } print_r( $aU ); $aH= array_unique($aH); print_r( implode(',',$aH) ); ?>
Affichera :
á,à,ă,â,å,ä,ã,ą,ā,æ,ć,ĉ,č,ċ,ç,ď,đ,é,è,ĕ,ê,ě,ë,ė,ę,ē,ğ,ĝ,ġ,ģ,ĥ,ħ,í,ì,ĭ,î,ï,ĩ,į,ī,ı,ĵ,ķ,ĸ,ĺ,ľ,ļ,ł,ń,ň,ñ,ņ,ŋ,ó,ò,ŏ,ô,ö,ő,õ,ø,ō,ŕ,ř,ŗ,ś,ŝ,ş,ť,ţ,ŧ,ú,ù,ŭ,û,ů,ü,ű,ũ,ų,ū,ŵ,ý,ŷ,ÿ,ź,ż,ð,þ
[modifier] string to array
$sUtf= 'éééé'; // string UTF-8 $iSize= strlen($sUtf); for($i=0; $i < $iSize; $i++) { $aChars[$i]= $sUtf[$i]; }
$aChars outputs:
Array
(
[0] => �
[1] => �
[2] => �
[3] => �
[4] => �
[5] => �
[6] => �
[7] => �
)
:-(
$sUtf= 'éééé'; // string UTF-8 $iSize= mb_strlen($sUtf, 'UTF-8'); for($i=0; $i < $iSize; $i++) { $char = mb_substr ($sUtf, $i, 1, 'UTF-8'); $aChars[$i]= $char; }
$aChars outputs:
Array
(
[0] => é
[1] => é
[2] => é
[3] => é
)
:-)
[modifier] Cache APC
cf APC.
[modifier] debug_backtrace()
debug_backtrace() est bien utile :))
[modifier] récupérer les paramêtres d'une méthodes sans paramêtres
Utile en refactoring, sans changer la signature d'une méthode on peut récupérer des paramètres en plus avec func_get_args()
Avant :
class Panda extends Ursidae { function Panda($aInit= null) { if(!empty($aInit)) { foreach ($aInit as $k => $v) { if (!empty($v)) { $this->$k= $v; } } } } }
Après (on peut garder la signature obsolète) :
class Panda extends Ursidae { function Panda() { $args = func_get_args(); if (is_array($args)) { $args= $args[0]; } foreach ($args as $k => $v) { if (!empty($v)) { $this->$k= $v; } } } } $oPanda= new Panda('poids'= 110);
[modifier] implode de tableau associatif, array to string
$ php -a
Interactive shell
php > $aTrucs= array('fruit'=>'pomme','outil'=>'cle a molette','alibi'=>'traineau');
php > echo http_build_query($aTrucs,'', ' ');
fruit=pomme outil=cle+a+molette alibi=traineau
php > http_build_query rulez
No need to s'emmerder.
[modifier] Les méthodes magiques
PHP et les méthodes magiques >>> Java.
Pour faciliter votre compréhension (et pourquoi pas ?) les exemples seront avec cet objet :
class Poulpe extends Octopus { public $iDureeVieMax= 2; /* annees */ function Poulpe() { } }
Qui n'est autre qu'un poulpe très simple ou octopus vulgaris simplex en pseudo taxonomie de troquet.
[modifier] __get()
[modifier] __set()
[modifier] __call()
[modifier] __callStatic()
[modifier] __construct()
[modifier] __destruct()
[modifier] __toString()
[modifier] __set_state()
[modifier] __clone()
[modifier] __sleep()
[modifier] __wakeup()
[modifier] __autoload()
[modifier] __invoke()
[modifier] PHP bashing
[modifier] true is false
$ php -a
Interactive shell
php > if ((true == "foo") && ("foo" == 0) && (0 == false)) echo "lawl";
lawl
[modifier] Voir aussi
[modifier] Liens
- http://www.addedbytes.com/blog/if-php-were-british
- http://www.prohotesseparis.com/
- Indispensable et mieux que PGP et tellement plus klasse que RSA : Enigma en PHP



