Ceci est une ancienne révision du document !
−Table des matières
PHP Tips & Tricks
DateTime
Php => Mysql => Php
$mysqldate = date( 'Y-m-d H:i:s', $phpdate ); $phpdate = strtotime( $mysqldate );
strftime
le paramètre %e pour mettre le jour du mois sur 1 seul chiffre (1 à 31) ne fonctionne pas avec Php/Windows. La raison est que strftime n'est pas portable et la doc php n'est donc pas correcte pour tous les OS.
Voir:
- le bug et sa solution: http://bugs.php.net/bug.php?id=45847
- La bonne doc à lire est donc strftime windows documentation: http://msdn.microsoft.com/en-us/library/fe06s4ak%28VS.71%29.aspx
La solution pour le %e : remplacer par “%#d”
Gestion des erreurs
Exception
Sécurité
Strong cryptography in PHP: Use standard algorithms, Key space, Kerchoof’s principle, Don’t use rand() or mt_rand(), Use a salt value in hash functions, Size and strength of the passwords, Don’t use plaintext passwords as key for ciphers, Use Base64 to encode encrypted data.
Divers
DocComment & ReflectionClass
Une démonstration de la récupération des commentaires Advanced Documentation With Reflection In PHP 5, mais obsolète car utilise la fonction php_check_syntax() qui n'est plus dans php depuis php 5.0.4
phpDocumentor home page
See the example at de3.php.net/manual/en/reflectionclass.getdoccomment.php - if you want to parse files for classes, you can use github.com/theseer/Autoload/blob/master/src/classfinder.php and to iterate over directories you use de3.php.net/manual/en/class.recursivedirectoryiterator.php
RegEx
syntaxe adresse email
function mail_checksyntax( $email ) { if( isset($email) && eregi('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$', $email) ) { return true ; } return false ; }
Voir aussi Vos applications valident-elles correctement les adresses e-mail ?, Mail::RFC822::Address: regexp-based address validation
Caractères accentués
Pour prendre les caractères accentués ou autres de la langue française: é, è, ê, ù, ç, É, À, … Utiliser la classe de caractères [:word:]
et le modifier u
pour activer la collation unicode.
// match les caractères français et espace et tiret: /^[[:word:] \-]+$/u
Cross Platform
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) { $s_eol = "\r\n"; } elseif (strtoupper(substr(PHP_OS, 0, 3) == 'MAC')) { $s_eol = "\r"; } else { $s_eol = "\n"; }
XML
A introductory tutorial on simplexml can be found here:
XSLT
<xsl:text disable-output-escaping="yes"> &nbsp;</xsl:text>
fonctionne mieux que CDATA …
Pointeur de fonction
Singleton
Manipulation fichier Excel
Introduction à PHPExcel par Ernaelsten Gérard (05/02/2009)
Le package Spreadsheet_Excel_Writer
/usr/local/php5/bin/pear -d preferred_state=beta install OLE /usr/local/php5/bin/pear -d preferred_state=beta install Spreadsheet_Excel_Writer
Mysqlnd
mysqlnd plugins for PHP in practice: example on how to write a plugin for mysqlnd.
PHP: Transparent load balancing and sharding with mysqlnd: You want some client-side MySQL load balancing with and without sharding for your PHP application? PHP 5.3 has something to offer for you. It is free. It requires no to very little changes to your applications.
Network
Wake On Lan (WOL)
# Wake on LAN - (c) HotKey@spr.at, upgraded by Murzik # Modified by Allan Barizo http://www.hackernotcracker.com flush(); function WakeOnLan($addr, $mac,$socket_number) { $addr_byte = explode(':', $mac); $hw_addr = ''; for ($a=0; $a <6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a])); $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255); for ($a = 1; $a <= 16; $a++) $msg .= $hw_addr; // send it to the broadcast address using UDP // SQL_BROADCAST option isn't help!! $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); if ($s == false) { echo "Error creating socket!\n"; echo "Error code is '".socket_last_error($s)."' - " . socket_strerror(socket_last_error($s)); return FALSE; } else { // setting a broadcast option to socket: $opt_ret = socket_set_option($s, 1, 6, TRUE); if($opt_ret <0) { echo "setsockopt() failed, error: " . strerror($opt_ret) . "\n"; return FALSE; } if(socket_sendto($s, $msg, strlen($msg), 0, $addr, $socket_number)) { echo "Magic Packet sent successfully!"; socket_close($s); return TRUE; } else { echo "Magic packet failed!"; return FALSE; } } } // Port number where the computer is listening. Usually, any number between 1-50000 will do. Normally people choose 7 or 9. $socket_number = "7"; // MAC Address of the listening computer's network device $mac_addy = "00:12:4G:SF:12:13"; // IP address of the listening computer. Input the domain name if you are using a hostname (like when under Dynamic DNS/IP) $ip_addy = gethostbyname("myhomeserver.dynamicdns.org"); WakeOnLan($ip_addy, $mac_addy,$socket_number)