Posts filed under 'Trucs et astuces'

Optimisation PHP

Voici un slide d’excellent conseil sur l’optimisation en PHP. Il regorge de tout un tas de tests que j’ai toujours voulu faire et que j’ai toujours eu la flemme de faire…

http://ilia.ws/files/phptek2007_performance.pdf

1 comment October 7th, 2007

Easter Eggs

Les Easter Eggs (oeufs de pâques) ne se trouvent pas que le matin de Pâques dans le jardin : si on cherche bien, on peut en trouver dans certains applications telles que Firefox, Open Office ou Aptitude. Il s’agit la plupart du temps d’une blague, ou d’un mini jeu, comme dans Open Office. Voici donc une liste non exhaustive de ce que vous pourrez trouver :

Mozilla/Firefox

Au fil des versions de Mozilla et/ou Firefox, les développeurs ont pris soin d’écrire une “Bible” de Mozilla, dont un nouveau verset est ajouté à chaque version majeure. Pour lire le verset de votre version, tapez about:mozilla dans la barre d’addresse, et validez.

about:mozilla

Apt-get et Aptitude

Les deux gestionnaires de paquet font décidément tout pareil… Même dans les easter eggs :) Il existe une opération non documentée et pourtant implémentée dans chacun des deux. Pour vous en convaincre, tapez dans un terminal :

apt-get moo

La même opération est possible sous aptitude, mais comme aptitude fait toujours mieux les choses, leur moo se déroule en plusieurs étapes. Pour l’étape 1 :

aptitude moo

L’étape 2 :

aptitude -v moo

L’étape 3 :

aptitude -vv moo

Et ainsi desuite jusqu’à ce que le message arrête de changer.

Note: testez le moo d’apt-get sous différentes distributions, il n’est pas le même partout !

PHP

Et oui, PHP posède aussi son (ou plutôt ses) Easter Eggs. Pour cela il suffit d’ajouter une variable dans l’URL de n’importe quel site fait en PHP. La variable en question c’est ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 ou ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 (les deux affichent quelquechose de différent). Par exemple, on passe de http://hyperthese.net/ à http://hyperthese.net/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

OpenOffice.org

Pour finir ce petit listing des Easter Eggs, voici celui d’OOo qui je crois mérite la palme du plus gros. Dans un premier temps, ouvrez un classeur. Dans une cellule, tapez =game()

OOo EE - Step 1

Une fois validé, vous obtenez un joli message dans la cellule :

OOo EE - Step 2

Là il ne vous reste plus qu’à rééditer la cellule, puis à appuyer sur “entrée”

OOo EE - Step 3

Il parraitrait que ce n’est pas le seul je, visiblement vous pouvez aussi tester “Froggle” et “TicTacToe” mais personellement je n’ai jamais eu aucun résultat….

The End

Et voici donc la fin de cette petite liste… N’hésitez pas à faire tourner google, car il y a fort à parier que votre logiciel favoris posède son easter egg ! ;)

Add comment September 18th, 2007

Valeur d’une exprssion en PHP

Leçon du jour : les expressions et leurs valeurs en PHP. Commençons par les conditions:

PHP:
  1. <?php
  2. // Roulette russe
  3. if (rand(1,6) == 3) {
  4.     print ("Tu est mort !");
  5. }
  6. ?>

Le principe est simple, dans un if (<expression>), l'expression est évaluée et si il s'avère être équivalente à true alors la condition est validée. En PHP, tout (à l'exception des opérateurs) a pour but de retourner une valeur : une fonction retournera une valeur, ou une variable retournera une valeur (sans parler des valeurs elles mêmes...). Donc la première chose que fait PHP (ce n'est pas tout à fait exact, mais on reviendra sur ce point plus tard) dans l'évaluation de ces expressions, c'est de chercher les valeurs. Dans l'exemple précédent, on admettra que rand(1,6) retourne la valeur 3. Le if de l'exemple ressemble donc maintenant pour le moteur PHP à

PHP:
  1. if (3 == 3) {

Maintenant intervienne les opérateurs : l'opérateur == demande la comparaison des valeurs qui lui sont à sa droite et à sa gauche pour savoir si elles sont équivalentes (c'est à dire que si les deux valeurs ne sont pas du même type elles sont converties dans le même type puis comparées), et si c'est effectivement le cas il retournera le true que le if attend pour considérer que la condition soit vraie.

Mais les opérateurs de comparaison ne sont pas les seuls opérateurs existants. À commencer par les parenthèses : si une expression se trouve entre parenthèses, alors elle est d'abord évaluée puis sa valeur est retournée. Par exemple on peut avoir (on suppose toujours que rand(1,6) retourne la valeur 3):

PHP:
  1. <?php
  2. // Roulette russe
  3. if (($num = rand(1,6)) == (1+2)) {
  4.     print ("Tu est mort !");
  5. }
  6. else {
  7.     print ("T'as du bol d'être tombé sur le numéro " . $num);
  8. }
  9. ?>

Ici encore on se retrouvera avec un

PHP:
  1. if (3 == 3) {

Viennent ensuite les opérateurs logiques, et ce sont eux qui me font mentir sur la première partie : les opérateurs logiques (and, or, xor, not, ils sont détaillés dans le manuel) interviennent dans l'ordre des opérations. En effet, si deux expressions sont de part et d'autre d'un or, par définition il suffit que l'une seule d'entre elles soit vérifiée pour que la condition soit vraie. Donc si la première expression retourne une valeur équivalente à true, PHP n'a pas besoin d'évaluer la seconde puique la condition est validée. En revance pour and et xor les deux expressions sont évaluées puisque PHP a besoin de connaître les deux valeurs.

Vous devez maintenant penser que ces système de valeurs ne marchent que dans des conditions ou autre structures de contrôle (elseif, while, for, etc). Eh bien pas du tout : ça marche n'importe où dans le code. De cette manière on peut avoir quelquechose qui ressemble à

PHP:
  1. <?php
  2. $a = ($b = 3);
  3.  
  4. // Affiche 3
  5. echo $a;
  6. ?>

(il faut avouer que ceci ne sert à rien), on peut aussi faire (plus utile cette fois)

PHP:
  1. <?php
  2. /*
  3. * Ici on regarde les valeurs d'un formulaire qui peut être
  4. * envoyé soit par POST soit par GET
  5. */
  6. $actif = ($_POST["actif"] or $_GET["actif"]);
  7. ?>

ou encore (là c'est réélement utile)

PHP:
  1. <?
  2. /*
  3. * Dans cet exemple, la fonction maFonction() est une fonction quelconque
  4. * qui retourne <i>true</i> ou <i>false</i> selon qu'elle réussisse ou non.
  5. */
  6.  
  7. // Par la méthode classique
  8. if (!maFonction()) {
  9.     trigger_error("Erreur lors de l'éxecution de ma fonction !", E_USER_WARNING);
  10. }
  11.  
  12. // Et en utilisant or
  13. maFonction() or trigger_error("Erreur lors de l'éxecution de ma fonction !", E_USER_WARNING);
  14. ?>

Petite explication sur ce dernier : PHP évalue d'abord maFonction(), qui retourne soit true soit false. Si maFonction() retourne true alors PHP n'a pas besoin d'évaluer ce qui se trouve après le or, en revanche si maFonction() retoure false PHP doit évaluer la 2ème expression.

Et tant qu'on est sur les valeurs, on pourra signaler que l'on peut forcer le type d'une valeur lors d'un assignement en spécifiant simplement le type entre parenthèses juste après l'opérateur d'assignation. Par exemple :

PHP:
  1. <?php
  2. /* On récupère l'âge depuis un formulaire, mais il est
  3. * de type string, or on le veut de type int.
  4. */
  5. $age = (int) $_POST["age"];
  6. ?>

Je concluerai sur une dernière précision à propos de la sécurité : faites très attention à utiliser l'opérateur d'égalité (===) le plus possible au profit de l'opérateur d'équivalence (==) qui entraîne la conversion des types, ce qui peut mener à des abérations de logique ou des failles de sécurité (par exemple une faille de phpBB utilisait la conversion implicite des types pour devenir administrateur en modifiant simplement son identifiant de session...)

Voici donc un petit tour des valeurs en PHP, en espérant avoir été assez clair...

Add comment March 3rd, 2007


Calendar

September 2008
M T W T F S S
« Aug    
1234567
891011121314
15161718192021
22232425262728
2930  

Posts by Month

Posts by Category