programmation

compilateur-encoder php : alternative à zend guard ?

vendredi 1 décembre 2006

En voyant le prix de la version de Zend Guard anciennement Zend Encoder qui avoisinne les 1000$ certain ce sont lancé dans un projet open-source permettant une alternative gratuit pour interdire la lecture du code source dans des fichier php mais en fait surtout pour accélérer l’éxécution des script.

E-Accelerator a les même fonctions que zend guard. Et pour dire, anciennement cela s’appelait Turck MMCache seulement son fondateur s’est fait embaucher par zend 🙂
A l’époque ce freeware créait des opcode : non pas des bytecode mais pas loin. En gros ça évite au moteur de zend dans php de reparser le code mais il le compil quand même. On peut dire que c’est une pré-compilation.Toujours à l’époque, c’était encore plus optimisé que zend encoder.

Maintenant le projet a été repris par 2 dévellopeurs (Bart Vanbrabrant (belge), Hans Rakers (Allemand)). Leur principale pré-occupation est l’accélération de code malheureusement.
Je dis malheureusement parce que j’aurais bien aimé trouver un encodeur fiable et pas non plus avec un prix exorbitant. Il y a des codes-source qu’on aimerait cacher parce qu’on à pas envie que quelqu’un d’autre s’attribut la découverte d’une méthode mais qu’on aimerait quand même diffuser sans frais. Et on a donc pas l’ambition de se payer la licence zend guard…

Apparement et remalheureusement, en lisant un ticket sur le site de E-Accelerator, on dirait bien qu’ils vont totalement retirer la fonction d’encodage du programme pour l’instant… 🙁

Mise a jour 2009-08-29 :
Un petit retour d’expérience sur l’encodage de php : vous pouvez maintenant utiliser bcompiler.
Ce petit module php vous permettra de compiler vos script en bytecode php (opcode). Mais attention il est encore en version Beta, et il vous faudra respecter la compatibilité entre la version du bytecode et la version de l’extension. A part ça pas de problème 😀

Maintenant si vous voulez quelque chose de plus poussez je vous conseille Ioncube. Pour moins de 200$ vous pouvez encoder proprement votre code, et l’installation du decoder sur le serveur est bien plus aisé que Zend Guard. A ce prix la vous n’avez pas toutes les fonctionnalités d’encodage mais c’est un bon début et pour 5 fois moins cher que Zend… Cerise sur le gateau pour les petits budgets, Ioncube propose pour quelques dollars d’encoder vos fichier en ligne !

JSON contre serialize

mercredi 22 novembre 2006

Peut d’entre vous n’ont pas entendu parler de la syntaxe JSON qui permet de passer toutes sorte de variables d’un language à un autre.
Ce format est intégré à PHP depuis la version 5.2.0 grace au fonctions json_encode() et json_decode().

Cependant, à mon avis, ce format n’a pas d’intéret si l’on passe nos variables uniquement de javascript à php.
Pour commencer ce format n’est pas des plus optimisé… pour une chaine de caractère vous devez en échapper certains (\\, \’ …) ce qui pousse l’algo à repérer ces échappement et donc cela est plus lourd que le format retourné par la fonction serialize qui, elle, définie avant la chaine le nombre de characters qu’elle contient.
Même si il est intégré à PHP 5.2.0 il ne l’est pas dans les anciennes version ce qui vous poussera à utiliser une fonction utilisateur dans ce cas et donc cela rendra l’éxécution encore moins rapide.

L’avantage de ce format est qu’il se parse beaucoup plus rapidement au niveau javascript au détriment de la rapidité d’éxécution sur le serveur.

Pour ma part je préfère serialize(), fonction native de php, rapide, souvent dans le cache (elle est utilisé pour stocker les sessions) et permet de renvoyer la plus grosse charge de calcul aux utilisateurs grace à ma fonction.
Tant que je n’éssaye pas de faire une page avec autre chose que php, tout va bien.

javascript code parser/beautifiers/formater

mardi 14 novembre 2006

marre des scripts écrit sur une ligne et illisibles ?

un petit programme simple, rapide, gratuit : Javascript Code Improver

rien de tel pour fouiller adsense :p

Eclipse et PHP

mardi 10 octobre 2006

Depuis que le projet Eclipse a démarré, il a fait du chemin.
A la base devellopper pour créer des applications java, sa protabilité fut tel qu’une multitude de plug-ins se sont créer permettant de develloper sous divers languages avec des assistants utilisateurs qui vont parfois bien au-dela de certain éditeurs payant.

Et parmis ses plug-ins on retrouve bien entendu PHPEclipse, permettant l’intégration du PHP. Celui-ci inclus:
– la coloration du code (paramètrable)
– la gestion des class, des variables, en tenant compte des fichiers inclut (via include ou require par exemple)
– un débugger syntaxique avancé (avec reconnaissance des variables)
– l’implémentaion des définitions/commentaires de type PEAR
– la reconnaissance du système de template smarty
– les bulles d’aides des fonctions natives php ET de vos fonctions avec votre définition si il y a.
– l’implémentaion d’un navigateur DANS l’envirronnement Eclipse afin de générer les page via votre serveur (local ou internet)

La synchronisation CVS est inclu dans Eclipse. Seul point noir en cour de develloppement, la synchronisation FTP se fait à l’aide d’un autre plug-in (FTP & WebDAV) mais j’ai des erreurs de connection 4 fois sur 5 sur la plupart des serveurs.. J’attend avec impatience la mise à jour.

En complément de ceci, et comme si ça ne suffisait pas, IBM a soumis un plug-in permettant l’implémentaion total d’AJAX basé sur des framework existants (Dojo, Open Rico) et implémentant des adaptations pour les environnements J2EE/JSP et Apache/PHP: L’ATF (AJAX Toolkit Framework) est encore en cour develloppement mais vous pouvez déjà vous procurer les versions beta. Imaginer le bonheur de pouvoir débugger ses codes javascript correctement, regardez les vidéos pour baver un peu.

Eclipse est donc très prometteur et deviendra surement l’éditeur favoris de nombreux develloppeur dans un avenir proche.
Ai-je besion de vous rapeler sa gratuité ?
Dreamweaver n’a qu’a bien se tenir.

— EDIT —
Finalement la synchronisation FTP marche très bien! Je suppose que l’erreur était du à la récente installation du plug-in… cela dit ne compter pas vous connecter sur les serveur FTP de free vu leur timeout exessivement bas 🙁
Pour effectuer une synchronisation affichez la vue « synchronisation de l’équipe », ça vous paraitra plus clair 🙂
Allez quelques fonctionnalités de plus pour vous faire baver :
– visualisation des fichiers modifiés seulement (sur ftp ou sur local)
– comparaison diff avec éditeur intégré (vous savez, celui que dreamweaver n’intègre pas)
– intégration d’un mode de conflit si une nouvel version du fichier à été up sur le serveur pendant que vous travailler sur l’ancienne
Bon ben voila les autre éditeur peuvent tous allez se cacher, s’enterrer même.
Eclipse c’est de la balle 😀

comparer les différences entre fichiers

jeudi 5 octobre 2006

En créant un projet de subversion en php, je me suis rendu compte qu’il était assez dure d’afficher clairement les différences entre 2 fichiers sous php…

Quelques sources de class php sont fournies sur la toile seulement elle sont bien souvent trop gourmande et possèdent trop de bug pour pouvoir les utilisées correctement.

C’est pourquoi la commande diff sous linux existe et vous permet de faire cela dans un shell via la functioon php shell_exec ou encore grace aux guillemets obliques.

Vous n’aurez alors qu’a exécuté la commande suivante:

 

qui vous retournera quelque chose comme :

--- fichier1   2006-10-05 01:19:52.000000000 +0200
+++ fichier2   2006-10-05 01:14:20.000000000 +0200
@@ -1,7 +1,12 @@
 ablabla
+ablablaablablaabla
 ablablaablabla
-www
-ablablaablablaablabla
-abb
+ablablaablablaabla
+ablablaablablaabla
+ablablaablablaabla
+ablablaablablaabla
+ablabl
+ablablaablablaabla
+ablablaablablaabla
 ablabla
 test
\ Pas de fin de ligne à la fin du fichier.

Il ne restera plus qu’a parser le résultat.
Plusieurs options pour diff son disponibles: man diff
Voyez aussi diff3 qui permet de comparer 3 fichiers en même temps, et sdiff pour une représentation ligne-à-ligne (side-by-side).

javascript eval global

dimanche 1 octobre 2006

ça fait un peu près 1 mois que je cherche à exécuter mon code javascript contenu dans mes données chargées via AJAX. Tout le monde me dira qu’il existe eval, seulement voila, ceci ne marche uniquement pour le code éxécuté en live et non pour les déclaration de fonction.

En effet, même dans le framework du style prototype, eval() est déclaré dans le contexte de l’objet AJAX, autrement dit dans la fonction AJAX. Ainsi toute les fonctions déclarées dans eval ne sont disponibles que dans la fonction où l’on fait le eval().

un petit exemple pour m’expliquer :

span class="st0">'function test(){alert('test ok');}'//affiche function
  test(); // affiche 'test ok'
//affiche undefined
test(); // erreur : fonction test inconnu

ceci peut poser de gros problèmes pour déclarer des objects via AJAX :

//x est votre object XMLHttpRequest
'monconteneur'//maintenant que les données reçu on été placé dans la page,
    //il faut exécuter toutes les balise script :
'script'//return function
  }
}

seulement voilà : si maintenant vous avez un bouton avec dans l’action onClick une fonction qui est déclaré dans la page chargé, celle ci ne s’éxécutera pas car elle n’est pas déclaré dans un contexte global mais seulement dans la fonction onreadystatechange.

Mais, pour toi public, j’ai la solution. vous pouvez utiliser :

window.eval();
//ou encore :
var global = this; //dans un contexte global
//puis
global.eval();

vos function seront alors déclarée dans un contexte global.
var global = this; est utilisé pour forcé la compatibilité.

A noté que les différents framework tel que prototype n’exécute pas vos script via eval dans un contexte global (voir la function evalScripts pour prototype).

Je ne vous cache pas que j’ai galéré pour un truc tout con cependant astucieux 🙂

template php

lundi 18 septembre 2006

Comme beaucoup de webmaster, vous serez un jour amené à vouloir utilisé un système de template pour votre site, non seulement pour permettre la portabilité mais aussi pour le système de cache que beaucoup d’entre eux intègre.

Et comme moi, un jour, vous chercherez un comparatifs des différents systèmes de templates existant. 🙂

En voici un, certainement incomplet car le monde libre est infini : comparatif template php

Pour ma part j’ai adopté smarty pour des utilisations poussé. Mais vous n’aurez certainement pas besoin de toutes ses fonctions, si tel est le cas, penchez vous sur PHPlib, système simple mais rapide.

réduire la taille d’un code javascript

lundi 14 août 2006

Si vous voulez (appeler ça comme vous voudrez) réduire la taille, enlever les espaces blancs, comprésser, minimiser un code javascript afin que les données transmises soient moindre tout en n’affectant pas les performances, je vous propose un petit utilitaire écrit en une dixaine de language : jsmin

Update : sinon vous pouvez testé maintenant avec mon minimifier perso : jsxs 😉

javascript function serialize compatible PHP

samedi 5 août 2006

Un jour comme hier j’en ai eu marre de pas pouvoir passer mes variables PHP à javascript correctement. Et je me suis di « mais il y a la fonction serialize en PHP » alors j’ai rouillé sur le net une petite heure pour éssayer de trouver un script qui permette de déserializer (unserialise) en javascript…

Je me suis rendu conte qu’il avait tous besoin d’une class en javascript… Alors moi et mon égo surdimensionné nous déplaçâmes tout ces scripts mal itérés dans la corbeille et ouvrîmes une page blanche, décidé à écrire une fonction et non une classe.

voila le résultat 😀 Demo serialize javascript

Dernière version : xorax-serialize-1.2
mise à jour du support pour la deserialization des objets php


historique :
xorax-serialize-1.1 correction de bug mineur sur les boolean.
xorax-serialize

OVH *.php -> php5

lundi 31 juillet 2006

enfin OVH propose du php5 pour tout les scripts inscrit en *.php depuis peu de temps.

Pour cela, il suffit juste d’inclure un .htaccess avec à l’intérieur :
SetEnv PHP_VER 5
(source)

Je rectifie donc ma critique, OVH devient vient donc en concurrence avec 1and1 surtout que OVH fournie un espace sécurisé en https pour votre site (sous la forme « https://sllx.ovh.net/~votresite/ ») ce qui est non-négligeable.

Pour arriver à doubler 1&1 il faut encore qu’ils évitent les coupures de serveurs produites dernièrement et tout sera parfait.