[zf] Installer Zend framework sur son hébergement
Premier véritable jour de travaille sur Zend Framework. Aujourd’hui, je vais aborder l’installation initiale du framework, et la création de notre page d’accueil. Enfin, j’appel cela une page d’accueil, mais il s’agit simplement d’afficher que le framework est installé, et pris en charge. Il n’y aura rien de plus.
Petite remarque avant de commencé, j’ai décidé de faire les choses “correctement”. En conséquence, le framework sera récupéré par subversion (me permets de faire les mise à jour rapidement). De plus, je créerais un dépôt subversion, comme je l’avais précisé, pour le projet principal. Ce dépot sera accessible en lecture. vous pourrez donc, à tout moment, récupérer les sources qui ont été faites durant cette saga de l’été!
Source ZF
url: http://framework.zend.com/svn/framework/standard/trunk
Source zf-demo
url: http://subversion.visionweb.ch/usvn/svn/zf-demo/trunk
login: zfdemo
pass: zfdemo00
Remarque: accès en lecture seule uniquement! Si vous désirez participer à la saga, et pouvoir commiter, merci de m’envoyer un mail!
Commençons tout d’abords par récupérer les sources du framework. Pour cela, on se place dans le répertoire ou l’on désire les télécharger (en ligne de commande. Si vous préférez ne pas utiliser subversion, il vous suffit d’aller les télécharger: http://framework.zend.com/download/latest). Et un petit:
svn co http://framework.zend.com/svn/framework/standard/trunk zf
Nous permets de disposer, après un petit moment de téléchargement, des sources, librairies, etc… nécessaire à nos projets.
Il nous faut maintenant dire à Apache ou aller récupérer les librairies, afin d’éviter de devoir sans arrêt spcéifier le chemin complet. Pour cela, on va éditer notre fichier de configuration php.ini. On cherche la commande “include_path”, et on rajoute le chemin vers notre librairie (zf/library). Dans mon cas, j’ai place la librairie zf à la racine de mon home. Cela me permets de pouvoir partager ma librairie avec tout mes projets, sans avoir de chemin spécifique à l’un d’eux. De ce fait, mon include path contient dorénavant:
.:/usr/lib/php:/usr/local/lib/php:/home/zf/library
Cérons maintenant notre premier projet. Pour cela, Zend nous propose une commande, qui s’occupe de créer les fichiers et l’architecture de base. On se place donc à la racine de notre application, et on tape:
/chemin/vers/zf/bin/zf.sh create project zf-demo
Ce qui donne, chez moi:
/home/zf/bin/zf.sh create project zf-demo
Et si maintenant on se déplace depuis un navigateur web dans notre répertoire, on obtient un joli
Nous voila prêt pour la prochaine étape, c’est a dire la réalisation de notre application!
[saga] Débuter avec Zend framework 0/?
Cette fois, c’est décidé, je m’y mets…
Combien parmis vous ont dit cette phrase des centaines de fois… Et pour finir, rien n’a bougé d’un iota? Cependant, cette fois, j’ai décidé de *vraiment* m’y mettre! Et pour cela, rien de tel qu’un peu de motivation.
Cette motivation, je la ferais en obligeant une mise à jour régulière de ce blog. A chaque fois que j’avancerais dans mon projet, je rajouterais un post. Je ne pourrais pas certifier avoir un post par jour, néanmoins, je tenterais d’avoir un post par semaine au minimum!
Mais commençons par mettre en place le projet!
De quoi s’agit-il? Il s’agira de la création d’un mini site entièrement dynamique. Depuis une interface d’admin, on devra:
- ajouter / supprimer une page
- Ajouter/mettre à jour le contenu de la page
- Ajouter des news
- Mettre à jour les informations principales (titre, etc…)
- Mettre en place un accès restreint (visiteur)
- Permettres aux utilisateurs de s’inscrire
Voila qui fera la base de notre mini site. J’ai volontairement évité le traditionnel blog ou système de news. l’idée est d’avoir un produit complet, utilisable et réutilisable.
Le projet sera disponible sous subversion, en fonction de l’avancée. Chaque publication sera tagguée et donc disponible sur ce site (le repository sera en lecture, pour vous permettre de récupérer les sources). Le serveur sera http://www.zf-demo.com (actuellement vide, normal, on est à la version 0 :p). Vous devriez y voir l’avancée du projet!
A tout bientôt!
Le gentil renard sort (enfin) sa RC1 de firefox 3.5 !
Attendue depuis quelques temps déja, Mozilla nous sort (enfin) sa RC1 de sa version 3.5 ! Au menu de cette nouvelle mouture:
- This beta is now available in more than 70 languages – get your local version.
- Improved tools for controlling your private data, including a Private Browsing Mode.
- Better performance and stability with the new TraceMonkey JavaScript engine.
- The ability to provide Location Aware Browsing using web standards for geolocation.
- Support for native JSON, and web worker threads.
- Improvements to the Gecko layout engine, including speculative parsing for faster content rendering.
- Support for new web technologies such as: HTML5 video and audio elements, downloadable fonts and other new CSS properties, JavaScript query selectors, HTML5 offline data storage for applications, and SVG transforms.
Pour pen profiter pleinement (même si il ne s’agit pas encore d’une version stable, les RC (Release candidate) sont généralement pleinement opérationnelles!)
Plus d’infos et téléchargements: http://www.mozilla.com/en-US/firefox/3.5/releasenotes/
Faille de sécurité importante dans PhpMyAdmin
le 24 mars 2009, une importante faille de sécurité à été signalée dans phpmyadmin (Détail).
Alors qu’elle n’a été que peu utilisée par les hackers ces dernières semaines, voila qu’une importante vague est en cours d’exécution, afin de pénétrer les différents sites n’ayant pas encore mis à jour leurs version. Il est donc important et primordiale de vérifier la version de votre phpmyadmin, et de le mettre à jour (ou exiger de votre hébergeur sa mise à jour). En effet, une telle faille de sécurité permets au hackeur de prendre le contrôle de vos page (notamment l’upload de pages, etc…).
les versions impactées par cette faille sont:
- < 2.11.9.5.
- < 3.1.3.1.
Vous aurez l’information de votre version sur la page d’accueil de votre phpmyadmin. Si vous disposez d’une version inférieur à celle signalée, effectuez immédiatement votre mise à jour!
Comment mettre à jour votre serveur? (explication pour un serveur debian, mais valable pour les autres égalements):
- Connectez-vous en ssh sur votre serveur
- Recherchez votre installation de phpmyadmin (généralement sous /var/www/phpmyadmin). Si vous ne savez pas ou elle est, un “locate phpmyadmin” ou une lecture de votre vhost (dans /etc/apache2/site-enabled/*) devrait vous l’indiquer
- Copier votre ancien répertoire (mv phpmyadmin phpmyadmin.bak) afin d’avoir une sauvegarde
- téléchargez la nouvelle version (wget http://ftp.de.debian.org/debian/poli/main/p/phpmyadmin/phpmyadmin_3.1.5.orig.tar.gz pour la 3.1.5 ou wget http://superb-east.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-2.11.9.5-all-languages.tar.gz pour la 2.11.9.5)
- Décompressez la (tar xvzf phpMyAdmin-2.11.9.5-all-languages.tar.gz)
- Renommez la (mv phpMyAdmin-XXX phpmyadmin)
- copier le fichier config.inc.php de votre ancienne version a la nouvelle (cp phpmyadmin.bak/config.inc.php phpmyadmin/)
- N’oubliez pas de copier vos themes personnalisé, si vous en avez !
- vérifiez que vos liens fonctionnent à nouveau
Pensez quand meme à vérifier que les droits sont les mêmes (un ls -la vous permets de vérifier les droits du répertoire précédent, et un chown -R owner.group phpmyadmin vous permets de les mettres à jour si besoin).
Et surtout… ne prenez pas à légère ces problèmes de sécurités!!! Vous êtes responsable du contenu de vos sites web et serveurs… Et en cas de problème, c’est contre vous que le procès peut avoir lieu, en premier !!!
[Base] Procédure stockée et Trigger sous mysql
Que sont les procédures stockées? A quoi servent-elles?
Si je prends l’exemple de la programmation traditionnelle, une procédure stockée pourra être attribuée à une fonction. Plutôt que de réecrire sans arrêt la même chose, je crée une procédure stockée qui va me faire mon travail. Je peux lui passer des paramètres (ou non). Par contre, ma procédure ne me retournera rien. Elle se contente de faire ce que je lui demande (a contrario d’une function sous mysql qui elle pourra me retourner 1 ou plusieurs enregistrement)
Un exemple basic, tiré de la documentation MySQL:
delimiter //
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END //
delimiter ;
Il suffira de l’appeler (call simpleproc(@toto)) pour récupérer le retour du count. Notez les 2 commandes “delimiter” avant et après la création de la procédure stockée. C’est nécessaire afin de pouvoir disposer du ; de fin de requete dans la procédure, sinon mysql ne sait pas faire la différence entre le code dedans et dehors (il interpréterais le ; comme étant la fin du CREATE, et donc génère une erreur).
Et le trigger maintenant?
Pour ceux qui ont des notions d’éléctronique, le trigger est un élément qui réagit à un changement de statut (par exemple, on mets un trigger sur un état de sortie, et quand cet état change, on envois un signal. Il réagit donc non pas sur un état 0 ou 1, mais bien sur le changement d’état, de 0 VERS 1). Sous MySQL, c’est la même chose, ou presque. Le trigger va réagir à un update, insert ou delete d’une table bien précise, et va exécuter du code lorsque cela arrive.
L’utilité? par exemple mettre a jour par MySQL une table liée en MyISAM (cela évite que le développeur l’oublie dans son code PHP). Ou, et c’est à cela que je voulais en venir, mettre à jour une table intermédaire en MEMORY… Car c’est bien la que se trouve la puissance d’une optimisation de base de données… Réussir à mettre ensemble tout les outils mis à notre disposition…
Pour cela, et ce sera l’objet d’un autre billet, nous allons intégrer 3 outils de MySQL en une action:
- Une table MEMORY
- Un trigger
- Une procédure stockée
L’objectif? Disposer d’une table contenant de nombreuses données, ou des donnée provenant de multiples tables, disposant d’un temps d’accès très faible (je compte en 100 et 1000 fois plus rapide la récupération de donnée d’une table MEMORY a une table MyISAM…), mais en permanence à jour…
Mais, et ce sera la conclusion de ce billet, pourquoi ne pas utiliser une view, certains me diront? Effectivement, tant que les cas restent simples, avec peu de donnée, une view est efficace, mais quand on doit sythétiser des données venant de plusieurs tables, avec des if, des sous-requêtes, des jointures multiples, des opérations, on se retrouve rapidement à passer de tables a 10’000 données a plusieurs milliars dans la requete (table temporaire)!
A bientôt pour la suite
