Toute l'actualité francophone sur PHP en un seul flux

Mars 2008 – Rom's blog: Témoignage sur Sqlite pour 01net

Hier, 01net a publié un article sur Sqlite et son intégration dans Adobe Air. A cette occasion, j’ai été interviewé afin de donner mon avis sur cette technologie intégrée nativement dans PHP depuis la version 5.0 :


lire l’article

Mars 2008 – Apprendre-PHP.com: Sécuriser les mots de passe avec les hashs et les salts

Comme nous le savons tous, le but d'un mot de passe est avant tout de rester connu d'une personne ou d'un groupe de personne. Sa divulgation entraine alors la perte complète de son efficacité et de sa sécurité. Lorsque le mot de passe devient connu d'une personne tierce, alors cette dernière peut par exemple s'approprier des droits sur une application et compromettre son fonctionnement normal. Un mot de passe est une donnée extrêmement sensible et convoitée par des pirates, quelle que soit l'application qui l'utilise.

Mars 2008 – Nexen.net: Alertes sécurité des applications PHP et MySQL, édition 185

Image pour le titre du contenu


PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.5 et 4.4.8; MySQL 5.0.51 (communauté) , 4.1.22, ainsi que 5.1.23-beta et 6.0.3.
Les mises à jour sont recommandées vers ces versions.



7 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Drupal, Joomla, PHP Nuke, Plume CMS, WordPress, Xoops et ming



Mars 2008 – Nexen.net: Actualité de développement PEAR, edition 185

Image pour le titre du contenu
5 paquets ont été mis à jour cette semaine :

PEAR est la bibliothèque de composants PHP.

 



 

Mars 2008 – Nexen.net: PHP 5.2.6RC1 sur la ligne de départ

Image pour le titre du contenu
Ilia Alshanetsky publie la première version candidate pour PHP 5.2.6, la RC1. C'est une version de stabilité, qui corrige 97 bugs, et met à jour PCRE vers la version 7.6. Ilia annonce un cycle de publication court, ce qui vous incite à le télécharger rapidement, pour le compiler localement et s'assurer que tout va bien.
D'un autre coté, celle que l'on attend tous, la version 5.3, est disponible sur le site de snaps, comme d'habitude, avec un chargement énorme de fonctionnalités nouvelles.
Faites chauffer les compilateurs.

Mars 2008 – Nexen.net: Quand DISTINCT n'est pas la bonne solution

Image pour le titre du contenu
Parfois, la solution la plus rapide n'est pas toujours la meilleure. Si une requête de jointure produit plusieurs fois la même ligne, est-ce que DISTINCT est la bonne solution ? C'est clairement un cas où on guérit les symptômes, et non pas la cause du mal. Guiseppe Maxia en a plus à vous dire à ce sujet.

Mars 2008 – Nexen.net: Ovidentia 6.6.2 disponible

Depuis Février 2008, Ovidentia 6.6.2 est disponible en téléchargement. Cette nouvelle version intègre de nombreuses évolutions fonctionnelles depuis la version 6.5.2. Parmi les évolutions notables de la 6.6.2 : * Droits par défaut sur les Catégories de thèmes d'articles * Filtres et tris supplémentaires sur les listes du Gestionnaire de tâches * Editeur WYSIWYG dans le gestionnaire de tâches * Containeurs OvML pour le gestionnaire de tâches * Duplication d'Organigrammes * Thésaurus étendu aux répertoires de fichiers * Application de droits sur les sous-répertoires du gestionnaires de fichiers

Mars 2008 – Nexen.net: Logiciel de facturation en PHP

L'entreprise EditeurScripts à mis au point un progiciel permettant la création de devis factures, avoirs, ... au format PDF. Celui-ci convient parfaitement aux PME voulant s\'offrir un logiciel de qualité avec des documents 100% personnalisés grâce à des fonds de facture interchangeables.

Mars 2008 – PHP Index: Ovidentia 6.6.2

Depuis février 2008, Ovidentia 6.6.2 est disponible en téléchargement.
Cette nouvelle version intègre de nombreuses évolutions fonctionnelles depuis la version 6.5.2.

Parmi les évolutions notables de la 6.6.2 :

* Droits par défaut sur les Catégories de thèmes d'articles
* Filtres et tris supplémentaires sur les listes du Gestionnaire de tâches
* Editeur WYSIWYG dans le gestionnaire de tâches
* Containeurs OvML pour le gestionnaire de tâches
* Duplication d'Organigrammes
* Thésaurus étendu aux répertoires de fichiers
* Application de droits sur les sous-répertoires du gestionnaires de fichiers

Depuis février 2008, Ovidentia 6.6.2 est disponible en téléchargement.
Cette nouvelle version intègre de nombreuses évolutions fonctionnelles depuis la version 6.5.2.

Parmi les évolutions notables de la 6.6.2 :

* Droits par défaut sur les Catégories de thèmes d'articles

Il est possible d'appliquer des droits par défaut sur une Catégorie de thèmes d'articles. Ces droits seront automatiquement appliqués pour tout thème créé ultérieurement dans cette Catégorie, et restent éventuellement modifiables.

La mise à jour en 6.6.2 est sans effet sur les Catégories et Thèmes déjà existants.

* Filtres et tris supplémentaires sur les listes du Gestionnaire de tâches

On peut désormais filtrer les listes de tâches par date de début, date de fin et/ou en distinguant les tâches achevées des tâches en cours de réalisation.

De plus, les listes, jusque là triées par défaut par date de début, sont triables par l'utilisateur par Nom, Type, Date de début, Date de fin,

* Editeur WYSIWYG dans le gestionnaire de tâches

L'écran de création de tâches s'est maintenant enrichi de l'éditeur WYSIWYG que vous utilisez dans Ovidentia, et vous permet de mettre en forme le texte de votre tâche, mais surtout de créer des liens vers des articles, fichiers, FAQ...

* Containeurs OvML pour le gestionnaire de tâches

Le langage s'est enrichi de trois containeurs permettant respectivement de remonter les informations des Espaces projets, des Projets, et des Tâches. Plus d'information dans la documentation OvML.

* Duplication d'Organigrammes

En allant dans Administration > Organigrammes et en cliquant sur le nom d'un organigramme, vous pouvez non seulement éditer le nom et la description de l'organigramme, mais également dupliquer cet organigramme. L'original et la copie constitueront deux organigrammes indépendants : les modifications de l'un n'affectent pas l'autre.

Ils seront en revanche tous deux basés sur le même annuaire. Si l'organigramme "original" était basé sur l'arborescence de groupe et l'annuaire Utilisateur, la copie sera elle aussi basée sur l'annuaire Utilisateur, mais ne pourra pas exploiter les groupes pour créer des entités.

* Thésaurus étendu aux répertoires de fichiers

Le Thésaurus est désormais une entrée à part dans les sections Administration et Utilisateur (comme les Articles, les Faq, etc...). Les répertoires du gestionnaire de fichiers peuvent désormais exploiter les mots-clés renseignés dans le Thésaurus, et se limiter à ces seuls mots-clés, ou continuer à fonctionner comme avant (ce qui est le comportement par défaut).

* Application de droits sur les sous-répertoires du gestionnaires de fichiers

Cette fonctionnalité longtemps attendue est enfin réalisée. Désormais, un gestionnaire de répertoires de fichiers peut créer des sous-répertoires sur lesquels des droits et des options particulières s'appliqueront.

Cette dernière évolution impacte fortement l'organisation de votre répertoire d'upload. Nous vous recommandons vivement d'effectuer une sauvegarde de votre environnement (base de données, fichiers/répertoires WWW ainsi que les fichiers/répertoires d'upload) avant toute mise à jour.

Le chemin d'accès aux fichiers changeant à l'application de cette mise à jour, les liens composés à la main et pointant directement vers un fichier ne fonctionneront plus. Les liens générés par l'éditeur WYSIWYG ($File ou $Folder) continueront bien sûr à fonctionner.

Proposé par Nicolas

Mars 2008 – Nexen.net: 10 pires CAPTCHA de l'univers

Image pour le titre du contenu
Bon, c'est peut être exagéré, mais vous rirez sûrement beaucoup à lire ou essayer les CAPTCHA proposés sur le site de John Willis. Ils sont tous délirants.
Merci à Philippe Gamache pour ce lien.

Mars 2008 – Glagla.org: Pensez à intégrer Zend Framework dans votre framework habituel ?

Un article intéressant présente l'opportunité que propose le Zend Framework de s'intégrer dans d'autres frameworks. En effet, comme cela a été déjà discuté sur ce site, ZF a la capacité de proposer un ensemble de classes autonomes (ZF me fait assez penser à PEAR de ce point de vue) présentant ...

Mars 2008 – Apprendre-PHP.com: Classe de connexion à MySQL en PHP5.

Classe de gestion simplifiée de connexion à MySQL en PHP5. Cette classe dispose de sa propre gestion des erreurs. Elle renvoit des exceptions de type MySQLException.

Mars 2008 – Nexen.net: Outiller la qualité PHP

Image pour le titre du contenu
L\'AFUP (Association Française des Utilisateurs de PHP) propose un nouveau rendez-vous sur Paris le 25 Mars 2008.
Ce rendez-vous sera consacré au theme suivant : \"Outiller la qualité PHP\" comprenant la Stratégie, les réflexes et les bonnes pratiques pour un développement web durable.
Pour plus d\'information, il suffit de vous rendre directement sur la page du site de l\'AFUP.

Mars 2008 – Nexen.net: Record d'adoption de PHP 5 : +2,5%

Image pour le titre du contenu
PHP 5.2 devient la deuxième version de PHP la plus populaire : durant le mois de Février 2008, PHP 5.2 a dépassé PHP 4.3, comme 2eme version populaire. Ce mois de février a d'ailleurs vu un taux record d'adoption de PHP : +2,5% des sites web dans le monde ont franchi le pas, établissant un nouveau record mondiale.
vitesse.adoption.200802.png Le graphique ci-dessous vous montre d'ailleurs l'évolution de la vitesse d'adoption de PHP : le graphique est clairement ascendant, et montre que PHP 5 est en phase d'adoption. La saturation du marché arrivera lorsque cette vitesse redescendra. Il reste encore du potentiel a exploiter avant d'en arriver là.

Mars 2008 – PHP Index: PhpMyAdmin 2.11.5

La version 2.11.5 de PhpMyAdmin vient de paraître.

Cette nouvelle version corrige 9 failles de sécurité de type injection SQL, il est donc recommandé de migrer vers cette version.

Télécharger
Description des corrections apportées

Proposé par Fabien LACHAUD

Mars 2008 – z-f.fr: Stats et roadmap à jour

Forum: Brèves
Auteur: philippe
Écrit le: Tue, 04 Mar 2008 09:01:40 +0100
Dernier message: Tue, 04 Mar 2008 09:01:40 +0100

Mars 2008 – PHP Index: Drupal 6.1

Quelques semaines à peine après la parution Drupal 6.0 voici sa première version de maintenance, la version 6.1.

Au programme de cette nouvelle version, plusieurs corrections de failles de sécurité et d'autres bugs mineurs. Il est donc vivement recommandé aux utilisateurs de Drupal 6.0 de migrer au plus vite vers la version 6.1.

Télécharger
Détail des corrections apportées

Proposé par Fabien LACHAUD

Mars 2008 – PHP Index: TYPO3 4.1.6 et 4.2 Beta3

TYPO3 4.2 est maintenant disponible en version Beta 3. Cette nouvelle version n’apporte que quelques améliorations mineures par rapport aux deux précédentes.

Parmi celles-ci, on notera que :

  • des modifications ont été apportées au niveau du support de l’UTF-8.
  • l’ajout d’une option permettant de désactiver le paramètre no_cache.
  • la nouvelle barre d’outils à été améliorée.
La version finale sera disponible fin mars et nécessitera au minimum PHP 5.2. A noter aussi que la version 4.1.6 de TYPO3 est disponible en téléchargement. Il s’agit d’une version destinée à corriger plusieurs bugs présents dans les versions 4.1.

Télécharger TYPO3 4.1.6
Télécharger TYPO3 4.2 Beta3

Mars 2008 – Hello Design: Découvrir les outils de la qualité en PHP

L'AFUP (Association Française des Utilisateurs de PHP) propose un nouveau rendez-vous sur Paris le 25 Mars 2008.

Ce rendez-vous sera consacré au theme suivant : "Outiller la qualité PHP" comprenant la Stratégie, les réflexes et les bonnes pratiques pour un développement web durable.

Pour plus d\'information, il suffit de vous rendre directement sur la page du site de l'AFUP.

 

Pour en savoir plus... cliquez ici 

Mars 2008 – Nexen.net: RoundCube 0.1-stable

Image pour le titre du contenu
RoundCube Webmail est un navigateur à base de client IMAP multilingue avec une interface utilisateur.
Il prévoit toutes les fonctionnalités que vous attendez d'un client e-mail, y compris le support MIME, carnet d'adresses, un dossier de manipulation, le message de vérification orthographique et de la recherche.
RoundCube Webmail est écrit en PHP et requiert une base de données MySQL ou Postgres.
L'interface utilisateur est entièrement skinnable utilisant XHTML et CSS 2.

Mars 2008 – Glagla.org: Instancier un objet dynamiquement sans eval()

eval() est décidément un gouffre à performance ! Voici le script que j'ai utilisé pour comparer les performances de l'instanciation d'un objet avec eval ou avec new. (j'utilise php 5.2.5). <?php $nb_iteration = 400000; class toto { public $raoul; } $class_name = 'toto'; $start_time = microtime(true); for ($i=0; $i <= $nb_iteration; $i++) { eval ('$objet = new toto();'); } $end_time ...

Mars 2008 – PHP Québec: 3/14 18:30 Conférence PHP Québec : Party de fermeture

The PHP Quebec Conference team is pleased to invite you to legendary PHP Quebec Conference closing party.

Join the speakers, sponsors and organizers and celebrate the success of the 2008 PHP Quebec Conference and experiment the festive spirit behind the PHP community.

We will be meeting for a festive and cultural diner where you will discover the aboriginal and the Nouvelle-France cuisine in a traditional setup. Musicians, comedians and various games will sure show you the spirit that existed in the Nouvelle-France.

Back in 2008, the party will continue at the bar Les deux Pierrots.
Joins us for a good time guaranteed!

In order to participate in the activity, you need to register by Thursday 13th at 18:00. To register please send an email to ylarrivee@phpquebec.com. Leave your name, phone number, how many people will come with you.

Location
- Le Cabaret du Roy (http://www.oyez.ca/Cabaret/accueil.html)
- Les deux Pierrots (http://www.lespierrots.com/)

City: Montreal
Date : March 14th
Time: 6:30
Facebook : http://www.facebook.com/event.php?eid=22086497920
UpComing : http://upcoming.yahoo.com/event/448501

===================================

L'équipe PHP Québec vous invite au party de clôture de la Conférence PHP Québec le vendredi 14 Mars.

Venez célébrer le succès de la conférence PHP Québec 2008 avec les conférenciers, commanditaires et organisateurs de la conférence l’esprit festif de la communauté PHP.

La soirée débutera à 18 :30 par un repas festif à l’aire de la Nouvelle-France. Découvrez la cuisine du terroir Québécois ainsi que des spécialités Amérindiennes dans un décor d’époque. Les comédiens, musiciens ainsi que les divers jeux vous immergerons dans l’ambiance festive de la Nouvelle-France.


De retour en 2008, la fête se poursuivra au bar chansonniers Les Deux Pierrots.
Une expérience à ne pas manquer!

Afin de pouvoir participer à cette activité vous devez vous inscrire avant le jeudi 13 mars à 18h00, en envoyant un courriel à ylarrivee@phpquebec.com. Laissez vos coordonnés (nom, prénom, téléphone) et le nombre de personnes qui seront avec vous.

Lieu :
- Le Cabaret du Roy (http://www.oyez.ca/Cabaret/accueil.html)
- Les deux Pierrots (http://www.lespierrots.com/)
Ville: Montréal
Date : 14 mars
Heure: 18 :30
Facebook : http://www.facebook.com/event.php?eid=22086497920
UpComing :http://upcoming.yahoo.com/event/448501

Mars 2008 – PHP Québec: 3/15 11:00 Cabanne à sucre PHP Québec

L'équipe de la Conférence PHP Québec vous invite à déjeuner à la Cabane à Sucre.

C'est une occasion unique pour tous ceux qui ne peuvent venir à la conférence de rencontrer les auteurs du langage, les conférenciers, les sponsors et les organisateurs de la conférence, tout en profitant du bon temps des sucres.

Afin de pouvoir participer à cette activité vous devez vous inscrire avant le jeudi 13 mars à 18h00, en envoyant un courriel à ylarrivee@phpquebec.com. Laissez vos coordonnés (nom, prénom, téléphone) et le nombre de personnes qui seront avec vous.

De plus, nous sommes à la recherche de personnes possédant un véhicule pour faire du co-voiturage. Si vous avez des places libres, merci de bien vouloir nous en faire part.

Lieu : Sucrerie de la Montage
Ville: Rigaud
Heure: 11:00
Map: http://tinyurl.com/2yk6dd
Facebook : http://www.facebook.com/event.php?eid=8202249573
UpComing : http://upcoming.yahoo.com/event/448416/

===================

The PHP Quebec Conference team is pleased to invite you to its traditional post conference Sugar Sack brunch.

It’s a unique opportunity for all community members who were not able to meet with the speakers/sponsors at the conference to come and enjoy a good brunch after in a casual atmosphere.

In order to participate in the activity, you need to register by Thursday 13th at 18:00. To register please send an email to ylarrivee@phpquebec.com. Leave your name, phone number, how many people will come with you.

We are also looking for people that would like to help with the transportation. Please let us know.

Location : Sucrerie de la Montage
City: Rigaud
Time: 11:00
Map: http://tinyurl.com/2yk6dd

Facebook : http://www.facebook.com/event.php?eid=8202249573
UpComing : http://upcoming.yahoo.com/event/448416/

Mars 2008 – Nexen.net: PHP et windows server 2008

Image pour le titre du contenu
La société Zend, très connue dans le language PHP, vient annoncer le portage de PHP et de l'ensemble de leurs produits sur des serveurs Windows Server 2008.
Rappelons que PHP est un langage de scripts libre coté serveur et à une présence très importante sur internet. Il est souvent associé à la plate-forme d'applications Web open source LAMP sous un environnement Linux.

Mars 2008 – Nexen.net: Définition de la maladie COPS

Image pour le titre du contenu
COPS signifie Cranky Ol 'PHP'er syndrome (Syndrome Grincheux de 'PHP'er)... C'est la définition que sous entend Travis Swicegood.
Travis Swicegood a travers son blog, décrit les problèmes de cette drole de maladie car meme si c'est dans l'esprit humouristique, nous pouvons penser qu'il a été confronté à celle-ci.
Alors peut-etre que vous aussi, vous l'avez attrapé !!!
PS : pour voir l'article, il faut cliquer sur le lien avec le clic droit, nouvelle fenetre

Mars 2008 – PHP Québec: Conférence PHP Québec & activités de réseautage (12-13-14 mars)

L'équipe de PHP Québec est fier de vous invitez à la conférence PHP Québec et
au Salon de l'emploi OpenSource.

Dernière chance de vous inscrire à la Conférence PHP Québec 2008.

Quand : 12 au 14 mars 2008
Où : Hôtel Sofitel, 1155 Sherbrooke Ouest (Métro Peel), Montréal, Québec

Quelques places sont encore disponibles pour assister à la Conférence PHP
Québec 2008 qui propose, cette année, une journée de laboratoires
pratiques, le mercredi, suivie de deux jours de conférences sur les
sujets de l'heure reliés à PHP et aux logiciels libres, le jeudi et
vendredi.


Cliquer ici pour vous inscrire: http://conf.phpquebec.com/fr/tarif

Ne manquez pas le tout nouveau Salon de l'emploi & Cocktail des
technologies Open Source qui aura lieu le mercredi 12 mars 2008 dès
15h30 sur le lieu de la Conférence. Le salon de l'emploi est ouvert à
tous et reste une occasion idéale pour recruter des ressources
talentueuses, élargir votre réseau de contact ou propulser votre
carrière de l'avant. Cet événement est commandité par MySQL/Sun.



Cliquer ici pour vous inscrire gratuitement au salon de l'emploi:
http://conf.phpquebec.com/fr/emplois


Activités avenir :
- 6 Mars :
Rencontre pre-conférence (Montréal)

8 Mars :
PHP Cheers pre-conférence (Québec)

12 Mars :
Salon de l'emplois OpenSource PHP Québec

- 12-14 Mars :
Conférence PHP Québec

- 14 Mars :
Party de fermeture de la conférence PHP Québec

- 15 Mars :
Cabane à sucre PHP Québec

- 19 Mars :
Laboratoires PHP à Québec

- 17-18 Mai :
Codefest PHP Québec 2.1



===============


Hello, The PHP Québec team is pleased to invite you to the PHP Québec
Conference & JobFair.

Last change to attend Conférence PHP Québec 2008.

When : March 12th to 14th, 2008
Where : Hôtel Sofitel, 1155 Sherbrooke Ouest (Métro Peel), Montréal,
Québec

A few tickets are still available to attend the Conférence PHP Québec
2008. This year, the Conference proposes a prequel day of PHP Labs,
some very practical sessions that will be held on Wednesday, followed by
the full 2 days conferences on many hot subjects related to PHP and Open
Source software, on Thursday and Friday.


Click here to register : http://conf.phpquebec.com/en/tarif

Don't miss the brand new Open Source technologies JobFair & Cocktail
that will be held on the Wednesday, starting at 3:30 PM. The JobFair
is open to everyone and is a good opportunity to recruit talented
resources. enlarge your social network or give your career a boost
ahead. This event is sponsored by MySQL/Sun.


Click to register for the JobFair for free:
http://conf.phpquebec.com/en/emplois

Upcoming events :

- March 6th :
Pre-Conference Meeting (Montréal)

March 8th :
Pre-Conference PHP Cheers (Québec City)

Mars 12th:
OpenSource JobFair & Cocktail

- March 12th-14th :
PHP Quebec Conference

- March 14th :
PHP Quebec Conference closing party

March 15th :
Sugar Shack PHP Quebec

- March 19th :
PHP Lab (Quebec City)

- May 17th-18th :
Codefest PHP Québec 2.1

Mars 2008 – Nexen.net: ExtJS pour PHP : ExtPHP, ou PHP-Ext?

Image pour le titre du contenu
Sur le site Ajaxian, on découvre 2 interfaces PHP pour extJS. ExtJS est un framework Javascript, qui permet de produire nombre de widget utiles : onglets, fenêtres d'outils, arbres, grilles, formulaires, etc. ExtJS est écrit en JavaScript, et les bibliothèques ExtPHP et PHP-Ext (notez la variété de noms...) permettent de produire les instructions JS en notation objet PHP.
J'ai découvert ExtJS ce matin, et la bibliothèque à l'air particulièrement utile et efficace. Les bibliothèques PHP se présentent à point pour faire le relais depuis du code PHP vers cette bibliothèque. A suivre...

Mars 2008 – Nexen.net: Vidéo PHP et MySQL, édition 35

Image pour le titre du contenu
Voici les 5 dernières vidéos PHP et MySQL.


Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.



N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.

Mars 2008 – Nexen.net: Actualité de développement PECL, edition 191

Image pour le titre du contenu
6 paquets ont été mis à jour cette semaine :

  • en rar (0 visite) : manipulations des fichiers .rar

  • en imagick (0 visite) : interface avec la bibliothèque graphique ImageMagick

  • en SCA_SDO (0 visite) : Service Component Architecture (SCA) et Service Data Objects (SDO) pour PHP

  • en sqlite3 (0 visite) : sqlite 3

  • en xrange (0 visite) : Itérateur d'intervalle pour SPL

  • en inclued (0 visite) : Liste des inclusions dans un script PHP


PECL est la bibliothèque d'extensions C de PHP.

 



 

Mars 2008 – Nexen.net: Un guide pour parler efficacement aux clients en technologie

Image pour le titre du contenu
Six revisions propose un guide pour savoir préparer au mieux ses relations avec les clients.

  • Connaissez leur niveau d'expertise technique

  • Utilisez des exemples pratiques

  • Restez proche des besoins de base

  • Restez simple

  • Incitez-les à poser les questions

  • Restez vous-mêmes

Mars 2008 – Nexen.net: 4 nouveaux quiz MySQL

Image pour le titre du contenu
Carsten Perdersen publie 4 nouveaux quiz sur MySQL : petits trucs sur ORDER, Distinct, structures de tables et les clés étrangères.

Mars 2008 – Nexen.net: Deux trucs pour accélerer le traitement SQL

Image pour le titre du contenu
Peter Zaitsev publie deux trucs pour accélérer le traitement de requêtes SQL :
dans le cas d'un GROUP BY sur des chaînes de caractères, qui prendrait du temps à s'exécuter, vous pouvez gagner en performance en faisant le regroupement sur le CRC32 de la colonne, au lieu de la valeur originale. La conversion en entier conduit a une consommation réduite de mémoire, et de meilleures performances. Il faut alors noter que CRC32 peut produire des valeurs doubles, ce qui en fait un comptage approximatif.
Pour travailler sur une grande table, utilisez une sous-requête pour lire uniquement les premières lignes.

Mars 2008 – Nexen.net: Entrainement au phishing : phishme.com

Image pour le titre du contenu
phishme est un site d'entrainement contre le phishing. En quelques clics, vous pouvez monter votre propre site de phishing, et envoyer un mail à une liste d'employés de votre compagnie pour voir quel va être leur réaction. Le site publie alors une statistiques de clics (combien d'employés ont cliqués sur le phish), et une évolution dans le temps de l'activité du phishing. L'application note même le fait que les personnes ont rempli le faux formulaire.

Mars 2008 – PHP Québec: 3/6 18:30 Rencontre pre-conférence

English version below

---

En remplacement de la rencontre mensuelle de mars, PHP Québec vous invite à vous joindre aux organisateurs de la conférence et aux conférenciers sur Montreal dans un souper informel. Le souper se déroulera au 3 Brasseurs.

Afin de réserver pour un nombre de personnes adéquat, veuillez confirmer votre participation par téléphone (514-913-2245) ou par courriel (lphuberdeau@phpquebec.org) avant 16h.

Les 3 Brasseurs
1658, rue Saint-Denis
Montréal, Québec

Facebook : http://www.facebook.com/event.php?eid=24087100880
Upcoming : http://upcoming.yahoo.com/event/448653

---

In replacement to the PHP Quebec monthly meeting, the organisation of the conference invites you to join the organizers and the speakers in Montreal to an informal dinner. The dinner will be at the 3 Brasseurs.

In order to reserve for the right amount of people, please confirm your participation by phone (514-913-2245) or email (lphuberdeau@phpquebec.org) before 4 PM.

Les 3 Brasseurs
1658, rue Saint-Denis
Montréal, Québec

Facebook : http://www.facebook.com/event.php?eid=24087100880
Upcoming : http://upcoming.yahoo.com/event/448653

Mars 2008 – PHP Index: NetExplorer: explorez vos fichiers sur le web avec AJAX

Si vous possédez un serveur WEB, vous avez surement était confronté à un problème courant : impossible de gérer ses fichiers depuis son navigateur internet.

Ce problème est désormais du passé ! Grâce à NetExplorer, une application Ajax/Web 2.0 réalisée en PHP, il vous sera possible de gérer le contenu d'un serveur Web à l'aide d'une interface graphique et ce depuis votre navigateur internet préféré.

L'équipe de NetExplorer s'est approchée le plus possible d'un système d'exploitation classique que nous connaissons tous. La navigation au sein des fichiers est intuitive et les fonctionnalités disponibles sont nombreuses et variées, de la simple création de répertoire à la gestion des archives zip directement sur le serveur.
Vous allez enfin pouvoir retrouver votre bureau sur votre serveur Web.
N'attendez plus, découvrez l'explorateur de fichiers AJAX NetExplorer !


Proposé par NetExplorer

Mars 2008 – Rom's blog: Mise à Jour de WampServer 2.0

Je viens de mettre en ligne 3 nouveaux addons pour WampServer :

- Apache 2.2.8
- Apache 2.0.63
- MySQL 5.0.51a

J’en ai également profité pour mettre à jour WampServer 2.0 (qui passe donc en 2.0b), qui profite également au passage d’une mise à jour de PHPmyadmin (2.11.5) et de quelques corrections mineures.

Pour ceux qui ont déjà installé la version 2.0a, je conseille d’installer les addons plutôt que de mettre la version 2.0b par dessus. Normalement, l’upgrade devrait fonctionner sans problème, mais j’avoue ne pas avoir testé tous les cas de figure possibles et imaginables, donc il vaut mieux éviter.

Bon dev à tous ;-)

Mars 2008 – Nexen.net: MySQL 6.0.4 disponible

Image pour le titre du contenu
MySQL 6.0.4, avec la dernière version de Falcon, est disponible au téléchargement. MySQL 6.0 inclut essentiellement le nouveau moteur Falcon, développé pour MySQL par Jim Starkey. MySQL 6 n'inclut pas encore le moteur Maria, de Monty Widenius (il faut la version 5.1.24-maria pour cela).
MySQL 6.0.4 apporte 6 correctifs de sécurité, portant sur la réplication, les partitions, yaSSL, rename table, federated table, alter table. Ces problèmes ont été corrigés dans les versions 5.0.48 à 51a, et 5.1.20 à 5.1.23. Un total de 262 bugs ont été corrigés.

Mars 2008 – Nexen.net: Alertes sécurité des applications PHP et MySQL, édition 186

Image pour le titre du contenu


PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.5 et 4.4.8; MySQL 5.0.51 (communauté), 5.1.23-beta et 6.0.4.
Les mises à jour sont recommandées vers ces versions.



7 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Drupal, Gallery, Horde, Joomla, PHP Nuke, WordPress et phpMyAdmin




Mars 2008 – Nexen.net: Le meilleur du mois de février 2008

Image pour le titre du contenu

Mars 2008 – Nexen.net: MySQL AB a déposé 3 brevets aux USA

Image pour le titre du contenu
J'ai écouté avec beaucoup d'intérêt l'émission 'Sun and MySQL Townhall', publiée sur Google. Zack Urlocker, Jonathan Schwartz et Rich Green discutent du rachat de MySQL par Sun, et abordent les questions d'intégration.
Parmi les points qui n'avait échappé jusqu'à présent, c'est que Sun dispose de 12000 brevets, et que MySQL dispose aussi de 3 brevets. Malgré les campagnes anti-brevet que mène la compagnie, ils ont déposé 3 brevets auprès du bureau des brevets USA, autour de points techniques pour le cluster. Je n'en ai pas trouvé en Suède, ni France, ni Allemagne, ni Europe, (mais la barrière de la langue est parfois impossible).
Dans la vidéo, Sun et MySQL affichent la même politique de dépôt de brevets : c'est un mouvement défensif, destiné à protéger les clients et la communauté. Il semble que MySQL AB préfère ne pas voir de brevets du tout, mais que s'ils existent, il vaut mieux les utiliser.
Ma première réaction a été une grande surprise. Les explications qui vont avec cette découverte me paraissent totalement raisonnables, mais un peu risquée pour l'avenir, et assez paradoxal avec les déclarations anti-brevet. Et vous, qu'en pensez-vous?
Note : la mention des brevets est autour de la minute 23 de la vidéo.

Mars 2008 – Nexen.net: Simple Spreadsheet : tableur en ligne

Image pour le titre du contenu
Simple Spreadsheet est un projet soeur de simple-groupeware, et se destine à être une alternative de Google Spreadsheet. Grâce à une interface Javascript évolué, on retrouve les sensations d'un tableur classique : mise en forme, création de graphiques, éditions de formules. Il manque peut-être diverses formes d'exportations (seul csv est géré). Le tout peut aussi fonctionner entièrement localement, sans l'aide de Apache ou PHP, qui ne sont nécessaires que pour les graphiques. C'est donc un tableur entièrement en JavaScript.

Mars 2008 – Nexen.net: Actualité de développement PEAR, edition 186

Image pour le titre du contenu
9 paquets ont été mis à jour cette semaine :

  • en CodeGen_PECL (0 visite) : Outil de génération d'extension PECL à partir d'une description XML

  • en CodeGen (0 visite) : Outils de création de générateur de code qui fonctionnent à partir de fichiers XML

  • en Crypt_Xtea (0 visite) : Implementation de l'algorithme Tiny Encryption Algorithm (TEA) (New Variant).

  • en HTML_TagCloud (0 visite) : Génère un nuage de tag en HTML

  • en Crypt_XXTEA (0 visite) : Implémentation du chiffrement XXTEA

  • en Net_MAC (0 visite) : Validation et formatage d'adresses MAC

  • en pearweb_channelxml (0 visite) : channel.xml pour pear.php.net

  • en Crypt_GPG (0 visite) : GNU Privacy Guard (GPG)

  • en Services_ProjectHoneyPot (0 visite) : Paquet d'interface avec l'API de ProjectHoneyPot.org.


PEAR est la bibliothèque de composants PHP.

 



 

Mars 2008 – Lapin Blanc: De jolies URLs pour optimiser votre référencement

Je vais vous présenter ici une technique de ré-écriture d’URL en PHP. Nous l’appellerons URL Rewriting via PATH_INFO. Celle-ci est un peu particulière, elle est indépendante d’Apache. Elle fonctionnera même si votre hébergeur désactive le ModRewrite ou si vous utilisez un serveur web alternatif. Prenons (...)

Mars 2008 – Lapin Blanc: Bien postuler au Google Summer of Code 2008

Cette année encore, Google propose le Summer of Code ! Ce programme offre une bourse de l’ordre 4 000 $ à des étudiants pour qu’ils participent à des projets Open Source pendant leurs vacances. Fort de mon expérience de l’édition passée, je vais tenter de vous expliquer comment être sélectionner et mener (...)

Mars 2008 – Nexen.net: PHP-GTK 2

Image pour le titre du contenu
Après de nombreux mois d'attente depuis la version béta, voici la sortie de PHP-GTK 2 en version finale.
Pour rappel PHP-GTK est une extension de PHP qui permet de créer des applications graphiques pour Windows et Linux.
Dans cette version, nous pouvons trouver :
- Amélioration de l'API
- Support de GTK+ jusqu'a 2.12
- Custom Gtypes
- ...

Mars 2008 – Prendre un Café: Symfony 1.1 beta, tour du propriétaire - Installation

Il y a quelques jours, Fabien a annoncé la disponibilité de Symfony 1.1 beta 1 dans le dépôt du projet. Symfony 1.1 est un changement majeur au niveau architecture, et la compatibilité ascendante est rompue en de nombreux points. Pour un outil éminemment basé sur les conventions, cela implique une réappropriation de ces dernières quand elles ont changé - mais c'est là le prix à payer pour bénéficier des nouvelles fonctionnalités. Et elles valent le coup !

Ce billet sera donc le premier d'une série destinée à explorer les fonctionnalités phares de cette preversion. On commence par le commencement avec la procédure d'installation.

Remarques préliminaires

Nous ne verrons pas la procédure de mise à jour d'un projet en symfony 1.0 vers la version 1.1[1]. On verra ça plus en détail sur ce blog si les CNTP le permettent. Pour l'heure, on partira donc d'un projet vierge en 1.1.

Installation de Symfony 1.1

Il faut pour l'heure installer Symfony 1.1 à partir des sources subversion ; voici une démarche possible, en admettant que vous disposez d'un environnement Unix/Linux[2] :

$ mkdir vendor && cd vendor
$ svn co http://svn.symfony-project.com/branches/1.1/ symfony11
$ sudo ln -s `pwd`/symfony11/data/bin/symfony /usr/bin/symfony11

Je crée ici un lien symbolique symfony11 accessible depuis /usr/bin, ce qui permettra de gérer aussi bien des projets en 1.0 qu'en 1.1[3].

Pour vérifier que tout s'est bien déroulé, vous pouvez lancer cette commande :

$ symfony11 -V
symfony version 1.1.0-DEV (/Users/niko/www/vendor/symfony11/lib)

Création d'un nouveau projet

Grâce à notre nouvelle installation isolée de Symfony 1.1, on peut créer un projet et une nouvelle application main via cette série de commandes :

$ cd /path/to/workspace
$ mkdir sf11test && cd sf11test
$ symfony11 generate:project sf11test
$ ./symfony generate:app main

Vous noterez que toutes les commandes ont été renommées par rapport à la version 1.0 et qu'elles utilisent désormais des espaces de noms spécifiques à certains domaines : generate:, propel:, plugins:, log:, etc. Pour lister l'ensemble des tâches en lignes de commande disponibles, vous pouvez lancer la commande symfony11 telle quelle, ou utiliser l'executable symfony disponible à la racine de votre projet :

$ ./symfony

Notez que l'emploi de symfony11 ou ./symfony a la racine de votre projet ont ici strictement le même effet, puisque les deux exécutables référencent la même installation de Symfony.

Il nous reste à créer un VHost Apache[4] minimaliste pour accéder à notre projet au travers de notre navigateur :

<VirtualHost *>
  ServerName   local.sf11test.org
  DocumentRoot %PROJECT_ROOT%/web
  <Directory "%PROJECT_ROOT%/web">
    AllowOverride All 
    Allow from All 
  </Directory>
  Alias /sf    %VENDOR_ROOT%/symfony11/data/web/sf
  ErrorLog     %PROJECT_ROOT%/log/error.log
  CustomLog    %PROJECT_ROOT%/log/access.log common
</VirtualHost>

N'oubliez pas de remplacer les chaînes %PROJECT_ROOT% et %VENDOR_ROOT% par les chemins système correspondant (respectivement la racine du projet et la racine de votre répertoire vendor créé précédemment).

On ajoutera également une entrée dans le fichier /etc/hosts pour avoir la résolution du nom local.sf11test.org localement :

127.0.0.1       local.sf11test.org

Si toutes les étapes ont été correctement suivies et après avoir rechargé la configuration d'Apache, en lançant notre navigateur préféré sur l'adresse local.sf11test.org, nous obtenons :

Symfony 1.1 default homepage

Ça vous rappelle quelque chose ? ;-)

La suite au prochain épisode, avec les formulaires dont la gestion a été entièrement revue en Symfony 1.1.

Edit : J'ai modifié l'url du dépôt pour faire pointer vers la branche 1.1, qui évolue constamment, comme suggéré par Fabien en commentaire :)

Pour ceux qui veulent mettre à jour du tag vers la branche, il faut lancer cette commande à la racine de votre répertoire vendor :

$ svn switch http://svn.symfony-project.com/branches/1.1/ symfony11

Un petit ./symfony cc s'imposera dans vos projets utilisant le dépôt.

Notes

[1] La procédure est pour le moment documenté dans ce fichier sur le dépôt.

[2] Enfin je veux dire, je ne m'occuperai pas de Windows ;)

[3] En admettant bien sûr que vous disposiez déjà d'une installation fonctionnelle de la 1.0 ;)

[4] Comme toujours, mod_rewrite doit être activé.

Mars 2008 – Apprendre-PHP.com: Résultats du concours de tutoriels

Cela fait déjà plus de deux semaines que le concours de tutoriels s'est achevé et toujours pas de nouvelles des résultats. C'est de ma faute, je n'étais pas trop présent ces derniers jours... Entre les cours et le boulot, je n'ai pas trouver le temps de m'occuper...

Mars 2008 – Nexen.net: Résultats du concours de tutoriels apprendre-PHP

Image pour le titre du contenu
Hugo Hamon publie les concurrents et le gagnant du concours de tutoriel PHP : c'est David Drapeau, qui gagne, avec son article "nstaller un environnement LAMP 6 sur Debian".
Voici la liste des concurrents, tous publiés en ligne.

  • Migration de PHP4 vers PHP de Cyril Pierre de Geyer

  • Installer un environnement LAMP 6 sur Debian de David Drapeau

  • Imagfilter() : les effets spéciaux de Christophe Villeneuve

  • Introduction aux Cross Site Request Forgeries ou Sea Surf de Damien Carret

Mars 2008 – Hello Design: PHP & MySQLi

Depuis PHP 5, de nouvelles possibilités nous sont offertes pour la réalisation de pages internet, par exemple l'utilisation de MySQL améliorée, appelé MySQLi.

Un article a été réalisé pour le site ASP-PHP.net pour montrer deux nouvelles approches entre le langage PHP et une base de donnée, et par conséquent l'utilisation de deux interfaces :

  • Une interface orienté orientée objet
  • Une interface procédurale

 

Pour connaitre la suite de l'article, il suffit de vous rendre directement sur le site :

PHP & MySQLi... Cliquez ici

Mars 2008 – Glagla.org: Propel : afficher la dernière requête effectuée

echo Propel::getConnection()->getLastExecutedQuery(); Certes la barre de débogage de symfony peut vous renseigner. Mais avec 7200 requêtes dans votre page vous êtes bien content de pouvoir générer une trace spécifique ;-) (à afficher ou écrire dans un log). via prendre un Snippet.

Mars 2008 – Prendre un Café: Symfony 1.1 beta, tour du propriétaire - Les formulaires

Nous venons de voir la procédure d'installation de la beta1 de Symfony 1.1. Nous allons maintenant rentrer un peu plus dans les détails des nouvelles fonctionnalités en commençant par les formulaires.

La gestion des formulaires avec Symfony 1.1

La nouvelle gestion des formulaires est l'une des fonctionnalités majeures de cette nouvelle mouture du framework. Elle propose une séparation claire entre couche de contrôle, couche de définition et couche de présentation des données, soit un bon vieux pattern MVC des familles.

Pour illustrer ces fonctionnalités, nous allons retrousser nos manches et créer un formulaire de contact basique. On commence par initialiser un nouveau module contact dans l'application main de notre projet sf11test initié précédemment :

$ ./symfony generate:module main contact

Création d'une classe de formulaire

Nous allons créer une classe qui représentera notre formulaire de contact, que nous stockerons dans le fichier apps/main/lib/ContactForm.class.php. Cette classe étendra la classe de base sfForm et surchargera sa méthode de configuration afin de définir les champs de formulaire et les différents validateurs associés. Nous définirons quatre champs (appelés widgets en Symfony 1.1) :

  • Le nom de l'expéditeur, sous la forme d'un champs de saisie textuelle (<input type="text"/>)
  • Son adresse email, également sous la forme d'un champs de saisie textuelle
  • Le sujet de son message, sous la forme d'une boîte de sélection (<select/>)
  • Le texte de son message, sous la forme d'un champs texte multilignes (<textarea/>)
<?php
class ContactForm extends sfForm
{
  public function configure()
  {
    // Widgets
    $topics = sfConfig::get('app_contact_topics', array());
    $widgetSchema = new sfWidgetFormSchema(array(
      'topic'   => new sfWidgetFormSelect(array('choices' => $topics)),
      'name'    => new sfWidgetFormInput(),
      'email'   => new sfWidgetFormInput(),
      'message' => new sfWidgetFormTextarea()
    ));
    $widgetSchema->setNameFormat('contact[%s]'); // HTML field names format
    $this->setWidgetSchema($widgetSchema);
 
    // Validators
    $this->setValidators(array(
      'topic'   => new sfValidatorRegex(array('pattern' => '/[a-z_]/')),
      'name'    => new sfValidatorString(array('min_length' => 2,
                                               'max_length' => 45)),
      'email'   => new sfValidatorAnd(array(new sfValidatorEmail(),
                                            new sfValidatorString(array('max_length' => 100)))),
      'message' => new sfValidatorString(array('min_length' => 10)),
    ));
  }
}

Au passage, nous ajoutons les sujets possibles de message dans le fichier de configuration apps/main/config/app.yml :

all:
  contact:
    topics:
      carrots_request: Do you have carrots?
      eggs_request:    Do you have eggs?

Marquons un arrêt pour examiner de plus près ce que nous venons d'écrire :

  • Nous avons ajouté 4 widgets à notre formulaires,
  • Nous avons défini et paramétré leurs validateurs associés,
    • Au passage, vous noterez qu'il est possible de spécifier plusieurs validateurs pour un même champs, comme c'est ici le cas pour le champs email
  • Nous avons défini le format de nommage des champs de formulaire et choisi une syntaxe à base de tableau pour manipuler plus aisément les données dans notre action,
  • Nous avons déporté une partie de la configuration textuelle dans un fichier externe dédié, pour en faciliter la maintenance.

N'oublions pas de purger le cache de Symfony, car nous venons d'ajouter un nouvel objet php :

$ ./symfony cc

Interaction avec le formulaire depuis le contrôleur de l'application

Éditons maintenant le fichier apps/main/modules/contact/actions/actions.class.php pour y définir l'action par défaut du module[1] :

<?php
class contactActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $form = new ContactForm();
    if ($request->isMethod('post')) // If HTTP method is POST
    {
      // Bind submitted values to the contact form instance
      $form->bind($request->getParameter('contact'));
      // Validate the form
      if ($form->isValid()) 
      {
        // Retrieve submitted values
        $values = $form->getValues(); 
        // ... Send your message here using submitted values
        // Then redirect user to the homepage with a one-shot message
        $this->getUser()->setFlash('notice', 'Message sent');
        $this->redirect('@homepage');
      }
    }
    // Publish form instance to the view
    $this->form = $form;
  }
}

Ici, dans l'ordre :

  • On instancie un objet de formulaire de contact
  • Si la méthode HTTP est POST :
    • On assigne les paramètres de la requête correspondant aux champs du formulaire de contact à ce dernier
    • On lance la validation, et si c'est valide :
      • On effectue les opérations nécessaires (traitement, redirection, etc.)

Vous noterez que tous les sinon sont gérés automatiquement par le framework de façon transparente (mais ces comportements par défaut sont toujours surchargeables) :

  • Par défaut le formulaire présenté sera vierge[2],
  • Les champs seront automatiquement préremplis en cas d'erreur de validation,
  • Les erreurs seront contextualisées par rapport aux champs.

Rendu du formulaire dans la vue

Enfin, il nous reste à créer un template pour présenter le formulaire et éventuellement afficher un message à l'utilisateur, dans notre vue gérée au travers du fichier apps/main/modules/contact/templates/indexSuccess.php :

<?php if ($sf_user->hasFlash('notice')): ?>
  <p class="notice"><?php echo $sf_user->getFlash('notice') ?></p>
<?php endif; ?>
 
<form action="<?php echo url_for('contact/index') ?>" method="post">
  <table>
    <?php echo $form ?>
    <tr>
      <td></td>
      <td><input type="submit" /></td>
    </tr>
  </table>
</form>

Si on charge la page /main_dev.php/contact, on a le résultat suivant :

Symfony 1.1 test form

Au passage si vous regardez la source, une protection anti CSRF est automatiquement gérée de façon transparente.

Bien entendu, le mode de rendu par défaut utilise un tableau pour la mise en forme, mais il existe un autre décorateur plus sémantique à base de liste. Pour l'utiliser, modifions notre classe ContactForm :

<?php
class ContactForm extends sfForm
{
  public function configure()
  {
   // ...
    $this->widgetSchema->setFormFormatterName('list');
  }
}

Il conviendra bien entendu d'adapter le template pour enlever les balises tables. On peut aussi imaginer de créer notre propre décorateur HTML. Par exemple, créeons la classe sfWidgetFormSchemaFormatterDiv comme suit :

<?php
class sfWidgetFormSchemaFormatterDiv extends sfWidgetFormSchemaFormatter
{
  protected
    $rowFormat       = "<div class=\"form-row\">\n  %error%%label%\n  %field%%help%\n%hidden_fields%</div>\n",
    $errorRowFormat  = "<div class=\"form-errors\">\n%errors%</div>\n",
    $helpFormat      = '<div class="form-help">%help%</div>',
    $decoratorFormat = "<div>\n  %content%</div>";
}

Encore une fois, modifions notre classe ContactForm pour l'utiliser (après avoir purgé le cache symfony, comme il se doit) :

<?php
class ContactForm extends sfForm
{
  public function configure()
  {
   // ...
    $this->widgetSchema->setFormFormatterName('div');
  }
}

Rendu des widgets

Vous me direz, un simple <?php echo $form ?> n'est pas très satisfaisant du point de vue de l'intégration HTML, qui nécessite bien souvent de prendre la main finement sur le code html généré. Le framework de formulaires de Symfony 1.1 apporte une solution en permettant de générer le rendu de chacun des widgets de façon indépendante

Imaginons par exemple que nous souhaitions gérer spécifiquement la présentation du champ name de notre formulaire ; notre template devient alors :

<?php if ($sf_user->hasFlash('notice')): ?>
  <p class="notice"><?php echo $sf_user->getFlash('notice') ?></p>
<?php endif; ?>
 
<form action="<?php echo url_for('contact/index') ?>" method="post">
  <table>
    <?php echo $form['topic']->renderRow() ?>
    <tr>
      <th><?php echo $form['name']->renderLabel() ?></th>
      <td>
        <?php echo $form['name']->renderError() ?>
        <?php echo $form['name']->render(array('class' => 'toto')) ?>
      </td>
    </tr>
    <?php echo $form['email']->renderRow() ?>
    <?php echo $form['message']->renderRow() ?>
    <tr>
      <td></td>
      <td><input type="submit" /></td>
    </tr>
  </table>
</form>

Vous noterez qu'on accède ici aux différents widgets du formulaire au moyen de clés de tableaux classiques ; c'est tout simplement car la classe sfForm implémente l'interface ArrayAccess de la SPL. C'est très pratique !

Le nerf de la guerre : la génération de formulaires à partir d'objets Propel

Ayant été à une lointaine époque un fervent adepte de PEAR::FormBuilder, brique permettant de générer des formulaires à partir d'instance d'objets de données ORM, j'étais curieux de voir comment cette fonctionnalité demandée par les développeurs depuis longtemps allait être implémentée dans Symfony 1.1 au travers de l'ORM Propel, bundlé par défaut[3].

Après avoir configuré un accès à notre SGBD préféré[4], nous allons définir une table contact_demand dans notre fichier config/schema.yml pour y stoker nos demandes de contacts :

propel:
  contact_demand:
    id:
    name:    { type: varchar, size: 45, required: true }
    email:   { type: varchar, size: 100, required: true }
    topic:   { type: varchar, size: 255, required: true }
    message: { type: longvarchar, required: true }
    created_at:

On lance rapidement la tâche de création de la table et des objets ORM associés :

$ ./symfony propel:build-all
$ ./symfony cc

Maintenant, allons faire un tour dans le répertoire lib/model pour voir ce qui a été généré. Surprise, des objets de formulaires ont été automatiquement créés pour nous !

Jetons un oeil plus particulièrement au fichier lib/form/base/BaseContactDemandForm.class.php :

<?php
class BaseContactDemandForm extends BaseFormPropel
{
  public function setup()
  {
    $this->setWidgets(array(
      'id'         => new sfWidgetFormInputHidden(),
      'name'       => new sfWidgetFormInput(),
      'email'      => new sfWidgetFormInput(),
      'topic'      => new sfWidgetFormInput(),
      'message'    => new sfWidgetFormTextarea(),
      'created_at' => new sfWidgetFormDateTime(),
    ));
 
    $this->setValidators(array(
      'id'         => new sfValidatorPropelChoice(array('model' => 'ContactDemand', 'column' => 'Id', 'required' => false)),
      'name'       => new sfValidatorString(),
      'email'      => new sfValidatorString(),
      'topic'      => new sfValidatorString(),
      'message'    => new sfValidatorString(),
      'created_at' => new sfValidatorDateTime(array('required' => false)),
    ));
 
    $this->widgetSchema->setNameFormat('contact_demand[%s]');
 
    $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
 
    parent::setup();
 
  }
 
  public function getModelName()
  {
    return 'ContactDemand';
  }
}

Cela ne vous rappelle rien ? C'est presque quasiment ce que nous avions écrit manuellement précédemment dans notre classe ContactForm. On notera également la présence dans le fichier lib/form/ContactDemandForm.class.php de la classe ContactDemandForm, cette dernière héritant de BaseContactDemandForm.class.php, ce qui nous permettra de surcharger tout ou partie de ses méthodes pour adapter le formulaire généré à nos besoins.

En l'occurrence, il nous faut adapter un peu la méthode configure() pour retrouver notre sélecteur de sujets et réappliquer nos validateurs. Voici le code de la classe ContactDemandForm modifiée en conséquence :

<?php
class ContactDemandForm extends BaseContactDemandForm
{
  public function configure()
  {
    // Widgets
    $topics = sfConfig::get('app_contact_topics', array());
    $this->setWidgets(array(
      'id'      => new sfWidgetFormInputHidden(),
      'topic'   => new sfWidgetFormSelect(array('choices' => $topics)),
      'name'    => new sfWidgetFormInput(),
      'email'   => new sfWidgetFormInput(),
      'message' => new sfWidgetFormTextarea()
    ));
 
    // Validators
    $this->setValidators(array(
      'id'         => new sfValidatorPropelChoice(array('model'    => 'ContactDemand',
                                                        'column'   => 'Id',
                                                        'required' => false)),
      'topic'      => new sfValidatorRegex(array('pattern' => '/[a-z_]/')),
      'name'       => new sfValidatorString(array('min_length' => 2,
                                                  'max_length' => 45)),
      'email'      => new sfValidatorAnd(array(new sfValidatorEmail(),
                                               new sfValidatorString(array('max_length' => 100)))),
      'message'    => new sfValidatorString(array('min_length' => 10)),
      'created_at' => new sfValidatorDateTime(array('required' => false)),
    ));
 
    $this->widgetSchema->setNameFormat('contact_demand[%s]');
    $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
  }
}

On va maintenant modifier notre action pour prendre en compte notre nouvelle classe de formulaire liée à notre objet Propel :

<?php
class contactActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $form = new ContactDemandForm();
    if ($request->isMethod('post')) // If HTTP method is POST
    {
      // Bind submitted values to the contact form instance
      $form->bind($request->getParameter('contact_demand'));
      // Validate the form
      if ($form->isValid())
      {
        // Save submitted values in form's ContactDemand object
        $form->save();
        // Then redirect user to the homepage with a one-shot message
        $this->getUser()->setFlash('notice', 'Message sent');
        $this->redirect('@homepage');
      }
    }
    // Publish form instance to the view
    $this->form = $form;
  }
}

Ainsi, un simple $form->save() nous permet de persister en base les données soumises par l'utilisateur au travers du formulaire autogénéré. Un sacré gain de productivité en phase de prototypage, assurement !

En conclusion

Voilà, ce n'est bien évidemment là qu'une infime partie de ce que peut faire le nouveau système de gestion de formulaires de Symfony 1.1, mais c'est un peu à reculons que l'on retourne à l'ancien système ;-)

Notes

[1] Nous ne créons pas de route pour le moment, même si ce serait là une bonne pratique, afin de ne pas surcharger inutilement le contenu de ce tutorial, déjà bien assez dense comme ça :-)

[2] On aurait bien entendu pu proposer des valeurs par défaut.

[3] Le mécanisme de génération de code devrait permettre de proposer facilement la même fonctionnalité pour Doctrine prochainement.

[4] Je vous laisse le soin de vous référer au tutoriel existant sur ce même blog ;-)

Mars 2008 – Nexen.net: Détecter les besoins de refactorisation

Image pour le titre du contenu
A l'aide de PHP_CodeSniffer, Raphael Stolt publie 2 méthodes pour détecter les méthodes qui sont trop longues, et les classes qui ont trop de méthodes. De plus, PHP_CodeSniffer s'emploie à surveiller les violations de standards de programmation, ce qui en fait un outil pratique pour surveiller son code statiquement.
Raphael signale aussi 2 projets dont la communauté peut s'inspirer (et le fait déjà) : PMD, (Programming Mess Detector) et CheckStyle, issus du monde Java.

Mars 2008 – Nexen.net: Le wiki PHP.net

Image pour le titre du contenu
Dans le but de donner plus d'informations à la communauté, et de faire participer plus de monde, un wiki est maintenant organisé sur le site de php.net. Il a pour but de rassembler les discussions et les projets qui se rapportent à PHP. On y trouve ainsi le groupe d'assurance qualité, de documentation, les summer code de Google, les demandes de commentaires sur les prochaines évolutions de PHP.

Mars 2008 – Nexen.net: Comment embaucher un bon administrateur MySQL

Image pour le titre du contenu
Prenez le temps de vous préparer, de rédiger une bonne offre d'emploi, et postez-la sur votre site d'entreprise et ceux que vos administrateurs vous recommanderons. Puis, lors de l'entretien, soyez attentifs à sa passion pour le métier, sa manière de se former, ses horizons externes, son niveau de collaboration et la spécialisation de ses compétences.
Il s'avère que l'offre sur le marché MySQL est largement inférieure à la demande. De plus en plus de postes se créent pour MySQL, mais le nombre de candidat est très faible. C'est pourtant le bon moment pour prendre des responsabilités et gagner du galon dans les entreprises.

Mars 2008 – Nexen.net: PHP Québec 2008 : c'est parti

Image pour le titre du contenu
Encore quelques heures, et ce sera le début de PHP Québec 2008. Philippe Gamache et moi-même, accompagné de Rob Richard et Ilia Alshanetsky ouvriront le bal des laboratoires. Apres trois mois de préparations, et un essai grandeur nature la semaine dernière, notre application est bien pleine de vulnérabilités : la découverte et l'exploitation de ces problèmes sera l'objectif de nos étudiants du jour.
Je vous tiendrai au courant durant la conférence, et vous pouvez surveiller les photos.

Mars 2008 – PHP Index: DrupalCampParis2

Le DrupalCampParis2 se déroulera le 19 avril 2008 à l'espace La Cantine, 151 rue Montmartre, Passage des Panoramas, 12 Galerie Montmartre, 75002 Paris. http://barcamp.org/DrupalCampParis2

Le DrupalCampParis2 se déroulera le 19 avril 2008 à l'espace La Cantine, 151 rue Montmartre, Passage des Panoramas, 12 Galerie Montmartre, 75002 Paris.

Un BarCamp est une rencontre d'un week-end, une non-conférence ouverte qui prend la forme d'ateliers-événements participatifs où le contenu est fourni par les participants qui doivent tous, à un titre ou à un autre, apporter quelque chose au Barcamp. C'est le principe "pas de spectateur", "tous participants". L'événement met l'accent sur les toutes dernières innovations en matière d'applications internet, de logiciels libres et de réseaux sociaux.

SiliconSentier fournit l'espace (LaCantine) AF83 se charge de l'organisation.

Pour vous inscrire et plus de détails allez voir sur: http://barcamp.org/DrupalCampParis2

Proposé par Ori Pekelman

Mars 2008 – Prendre un Café: Symfony 1.1 beta, tour du propriétaire - L'internationalisation (i18n)

Dans la liste des tâches nouvellement ajoutées en Symfony 1.1, on remarque une section dédiée à l'internationalisation :

i18n
  :extract            Extracts i18n strings from php files
  :find               Finds non "i18n ready" strings in an application

Et oui, la fonctionnalité dont tous les gens qui ont un jour travaillé sur des applications internationalisées en Symfony 1.0 ont rêvé a enfin été ajoutée : une tâche d'extraction des chaînes de caractères à traduire, avec génération et mise à jour des fichiers de traductions XLIFF :)

Si vous avez suivi les précédents tutoriels, vous devez disposer d'un projet sf11test, d'une application main et d'un module contact.

On va activer la gestion de l'internationalisation dans l'application en éditant le fichier de configuration apps/main/config/settings.yml comme suit :

[...]
all:
  [...]
  .settings:
    [...]
    i18n:                   on
    [...]
    standard_helpers:       [Partial, Cache, Form, I18N]
    [...]
    default_culture:        en

On part du principe que la langue par défaut sera l'anglais (en). Ajoutons quelques chaînes internationalisées dans le template apps/main/modules/contact/templates/indexSuccess.php au moyen du helper __() :

<h2><?php echo __('Contact us') ?></h2>
<p><?php echo __('Drop us a message using the form below:') ?></p>
<form action="<?php echo url_for('contact/index') ?>" method="post">
  <table>
    <?php echo $form ?>
    <tr>
      <td></td>
      <td><input type="submit" value="<?php echo __('Send your message') ?>" /></td>
    </tr>
  </table>
</form>

Maintenant, lançons la commande d'extraction des chaînes à traduire pour notre future version française, en lui demandant poliment de générer automatiquement le fichier de traduction et de supprimer automatiquement les entrées orphelines :

 $ ./symfony i18n:extract --auto-save --auto-delete main fr
>> i18n      extracting i18n strings for the "main" application
>> i18n      found "3" new i18n strings
>> i18n      found "0" old i18n strings
>> i18n      saving new i18n strings
>> i18n      deleting old i18n strings

Le fichier apps/main/i18n/fr/messages.xml a été généré, examinons son contenu :

<?xml version="1.0"?>
<xliff version="1.0">
  <file source-language="EN" target-language="fr" datatype="plaintext"
    original="messages" date="2008-03-13T11:13:45Z"
    product-name="messages">
    <body>
      <trans-unit id="1">
        <source>Contact us</source>
        <target></target>
      </trans-unit>
      <trans-unit id="2">
        <source>Drop us a message using the form below:</source>
        <target></target>
      </trans-unit>
      <trans-unit id="3">
        <source>Send your message</source>
        <target></target>
      </trans-unit>
    </body>
  </file>
</xliff>

Il ne nous reste plus qu'à traduire nos chaînes en remplissant les balises <target></target> en conséquence pour traduire notre application en français. Si l'on venait à modifier notre template en supprimant, modifiant ou ajoutant de nouvelles chaînes, la tâche d'extraction se chargerait de mettre à jour nos fichiers de traduction en conséquence, tout en préservant le travail déjà effectué :)

Mars 2008 – Lapin Blanc: Sécurisez votre blog Wordpress !

L’installation par défaut de Wordpress pose quelques gênants problèmes de sécurité. Nous allons nous employer à les corriger. Cachez le contenu des répertoires internes Par défaut, Wordpress ne bloque pas l’accès à tous les répertoires nécessaires à son fonctionnement que le public ne devrait pas pouvoir (...)

Mars 2008 – Nexen.net: 51% des sites Web sous Apache en février 2008

Image pour le titre du contenu
Pour faire fonctionner le langage PHP, nous avons besoin d'un serveur.
Le plus répondu depuis de nombreuses années concerne Apache comme le montre les tous derniers chiffres relatifs aux technologies Web côté serveurs, et aux usages des concepteurs de site que propose le site : Journal du net.
L'article montre aussi d'autres valeurs touchant le PHP. Le sondage pourra vous servir de résultats complémentaires que Nexen.net propose tous les mois.

Mars 2008 – Nexen.net: PAMP : PHP sur Mobile

Image pour le titre du contenu
Les mobiles prennent de plus en plus de la place dans notre vie, et c'est dans la logique de voir arriver PAMP (Personal Apache, MySQL et PHP), sur le principe de Wamp, Xampp, Mamp que nous connaissons déjà.
Pamp est actuellement développer sur des mobiles S60 de Nokia de 3eme génération et demande 128 Mo de RAM.

Mars 2008 – Prendre un Café: Symfonians en VF

Je viens de mettre en ligne la version française de Symfonians[1]. J'ai préféré utiliser un sous-domaine pour définir la langue courante plutôt qu'un paramètre supplémentaire dans la requête, car le routing de Symfony implique de le gérer pour chacune des route (ou si y'a une astuce, je suis preneur.)

Ici, je détecte le sous domaine et en fait la langue courante de l'utilisateur au moyen d'un filtre. Pour ceux que ça intéresse, en voici le code :

<?php
class i18nSubdomainFilter extends sfFilter
{
  public function execute($filterChain)
  {
    if ($this->isFirstCall())
    {
      $context = $this->getContext();
      $request = $context->getRequest();
      $host_parts = explode('.', $request->getHost());
      if (count($host_parts) > 2) // We have at least a subdomain
      {
        $subdomain = strtolower($host_parts[0]);
        $enabled_cultures = sfConfig::get('app_cultures_enabled', array());
        if (array_key_exists($subdomain, $enabled_cultures))
        {
          sfConfig::set('sf_current_culture', $subdomain);
          $context->getResponse()->addMeta('language', $subdomain, true);
          $context->getUser()->setCulture($subdomain);
        }
      }
    }
    $filterChain->execute();
  }
}

Notez que je définis la liste des langues disponibles dans le fichier app.yml, pour éviter les blagues et gérer les domaines pour chacun des environnements que j'ai configuré[2] :

prod:
  cultures:
    enabled:
      en:    http://symfonians.net/
      fr:    http://fr.symfonians.net/

L'activation du filtre se fait dans le fichier filters.yml :

i18nSubdomain:
  class:    i18nSubdomainFilter

Et roule ma poule, mon routing reste strictement intact :-)

Notes

[1] 690 chaînes à traduire en deux heures, doit sans doûte rester du débris :p

[2] J'ai dautre part une action qui me permet de rediriger l'utilisateur vers la version traduite de la page courante, mais je vous fais grâce du code.

Mars 2008 – Arnaud Limbourg: Pourquoi il faut désactiver display_errors dans le php.ini sur les serveurs de prod

Si vous allez sur le site de http://www.shopalize.com en ce moment il y a des chances que vous voyez ceci:

J'en profite pour rappeler qu'il est impératif de mettre la directive display_errors à "off" et mettre en place un fichier de log via error_log à la place.

Mars 2008 – Arnaud Limbourg: Pourquoi il faut désactiver display_errors dans le php.ini sur les serveurs de prod

Si vous allez sur le site de http://www.shopalize.com en ce moment il y a des chances que vous voyez ceci:

J'en profite pour rappeler qu'il est impératif de mettre la directive display_errors à "off" et mettre en place un fichier de log via error_log à la place.

Mars 2008 – Arnaud Limbourg: Pourquoi il faut désactiver display_errors dans le php.ini sur les serveurs de prod

Si vous allez sur le site de http://www.shopalize.com en ce moment il y a des chances que vous voyez ceci:

J'en profite pour rappeler qu'il est impératif de mettre la directive display_errors à "off" et mettre en place un fichier de log via error_log à la place.

Mars 2008 – Nexen.net: Actualité de développement PECL, edition 192

Image pour le titre du contenu
6 paquets ont été mis à jour cette semaine :

  • en pdflib (0 visite) : création de fichiers PDF

  • en imagick (0 visite) : interface avec la bibliothèque graphique ImageMagick

  • en ingres (0 visite) : Interface avec la BDD Ingres de CA

  • en timezonedb (0 visite) : base de données de fuseaux horaires pour PHP

  • en PDO_INFORMIX (0 visite) : pilote IBM Informix IDS pour PDO

  • en SCA_SDO (0 visite) : Service Component Architecture (SCA) et Service Data Objects (SDO) pour PHP


PECL est la bibliothèque d'extensions C de PHP.

 



 

Mars 2008 – Nexen.net: Actualité de développement PEAR, edition 187

Image pour le titre du contenu
14 paquets ont été mis à jour cette semaine :

PEAR est la bibliothèque de composants PHP.

 



 

Mars 2008 – Nexen.net: Alertes sécurité des applications PHP et MySQL, édition 187

Image pour le titre du contenu


PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.5 et 4.4.8; MySQL 5.0.51 (communauté) , 5.1.23-rc et 6.0.4.
Les mises à jour sont recommandées vers ces versions.



12 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Drupal, Gallery, Horde, Invision Power Board, Joomla, Mantis, PHP Nuke, Smarty, WordPress, Xoops, phpBB et phpMyAdmin



Mars 2008 – Nexen.net: Vidéo PHP et MySQL, édition 36

Image pour le titre du contenu
Voici les 5 dernières vidéos PHP et MySQL.


Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.



N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.

Mars 2008 – Nexen.net: Fin des ventes d'éléphpants 2007 le 21 mars

Image pour le titre du contenu
C'est avec beaucoup de tristesse que je vous annonce que les éléphpants 2007 sont en fin de stock. Il me reste une petite famille de 22 éléphpants disponible, que je pourrais envoyer d'ici vendredi.
Si vous êtes intéressés, prenez vite commande auprès de nexen.net sur le lien ci-dessous, ou bien auprès de votre revendeur local : par exemple, l'AFUP en détient encore les premiers stocks mondiaux, devant Oracle.
Après le 21 mars, les première et deuxième générations d'éléphpants ne seront plus vendus ici, et nous auront entamé la production 2008, soit la troisième génération. Je vous en reparle durant cette semaine.

Mars 2008 – Lapin Blanc: Plugin pour intégrer Scoopeo à votre blog Wordpress

Scoopeo, c’est le plus populaire des digg-like francophone. Scoopeo est un aggrégateur de liens. Ceux-ci sont classés suivant les votes des visiteurs. Le site permet également de poster des commentaires à propos des pages publiées. C’est une pratique répandue chez les blogueurs de faire apparaître (...)

Mars 2008 – PHP Index: Soirée Sun-MySQL Community

I N V I T A T I O N

Soirée MySQL-Sun Community

Mercredi 2 avril 2008 à PARIS

Afin de célébrer la fusion Sun-MySQL, une série de rencontres avec la communauté est organisée dans de nombreuses capitales mondiales.


En France l'événement aura lieu le 2 avril à Paris. Cette rencontre festive permettra à l’ensemble des développeurs de la communauté open source d’échanger autour des aspects techniques de la fusion et de rencontrer quelques VP Sun-MySQL.


Cette rencontre aura lieu de 18h00 à 23h00 :

Patricks Irish Pub,

33 rue de Montreuil, Paris 11ème
( à 5 mn de Bastille et Gare de Lyon – Ligne 8, Metro Faidherbe-Chaligny )


-- OPEN BAR de 18h00 à 20h00 --
PAF : GRATUIT


Venez nombreux !

Dress c o d e : very casual


*** RSVP avant le 21 Mars à vloquet@alx-communication.com

Pour tout renseignement, tel. : 06 68 42 79 68

Proposé par AL'X Communication

Mars 2008 – Nexen.net: register_shutdown_function, pour mourir proprement

Image pour le titre du contenu
register_shutdown_function est une des fonctions les plus méconnues de PHP. Elle permet d'enregistrer du code qui sera exécuté après la fin du script, que ce soit un arrêt normal ou pas (temps d'éxécution, mémoire, etc.). Elle permet à une bibliothèque d'enregistrer des actions d'extinction ou simplement de prendre le temps de refermer des ressources proprement, comme un fichier XML, une ressource délicate ou créer un cache.
register_shutdown_function est maintenant remplacée par le destructeur des objets en PHP 5, qui remplit le même rôle de nettoyeur. Mais à moins de programmer 100% objet, register_shutdown_function aura toujours sa place dans votre trousse à outil.

Mars 2008 – Nexen.net: How we build scalable web applications

Image pour le titre du contenu
"There is lots of information available on how to build scalable web applications. I thought it would be nice to share a little bit of how we at Ibuildings build scalable web applications.
Often we're dealing with large applications that need to scale very well. Sometimes this is due to high load/traffic but, it can also be that the web application is used in many ways. For example an application can have a heavily used CRM like back-end system. The front-end website uses the same system to publish information from it. You can imagine that if you didn't set it up correctly and the load increases on the back-end, it affects the website users and vice versa"

Mars 2008 – Nexen.net: Développer une extension PHP pour Skype

Image pour le titre du contenu
'"Durant le BarCamp MayFlower, il y a quelques semaines, nous avons eu un projet prometteur et intéressant : développer une extension PHP pour Skype. En fait, ce projet était la fusion de deux autres projets : le premier était le développement d'une extension pour PHP, car cinq des six membres avaient de l'expérience. Et l'autre était l'extension Skype, dont le but est de produire de nouvelles fonctions PHP pour envoyer des messages de chat avec Skype."

Mars 2008 – Nexen.net: Introduction à PHP 5.3

Image pour le titre du contenu
Vous voulez tout savoir de PHP 5.3, hormis sa date de sortie probable? Alors, il est temps de jeter un oeil aux slides de PHP Québec de Ilia Alshanetsky, qui rassemble tout dans un format compact de 29 slides : les espaces de noms (name space), __DIR__, mysqlnd, les performances, __callStatic(), ?:, late state binding, SSL, INI, SPL, Date, getOpt(), XSLT, NOWDOC, garbage collector, SQLite. Pfiou....

Mars 2008 – Nexen.net: Fonction MySQL du jour : semaine 2

Image pour le titre du contenu
Carsten Perdersen a lancé la "MySQL Function of the Day" (fonction MySQL du jour) : une série de présentations sur les fonctions et opérateurs disponibles dans MySQL. Insipré du funcaday de PHP, le but des proposer une dose journalière de trucs, entre Aha! et Ho-hum, je connaissais", en fonction de votre expérience MySQL. Vous pouvez lire la liste complète sur le navigateur, ou bien suivre via RSS.

Mars 2008 – Nexen.net: Talend, Pentaho Kettle et Informatica

Image pour le titre du contenu
Talend, Pentaho Kettle et Informatica fournissent tous les trois des outils d'intégration de données : ils prennent des données en source, appliquent des transformations et fournisse les données traitées pour complément d'analyse. Ces opérations sont scriptées pour être répétables, et sont à la source de la BI : business intelligence. Jonathan Levin a comparé les trois.

Mars 2008 – Nexen.net: Comment j'analyse les requêtes lentes

Image pour le titre du contenu
Pour analyser les requêtes lentes, il y a plusieurs étapes :

  • Se faire expliquer le sens de la requête

  • Installer une version de tests de la base

  • Analyser le code SQL

  • Simplifier la requête

  • Vérifier les nouvelles performances, et recommencer si besoin

  • Livrer

Mars 2008 – Nexen.net: deux groupes Linkedin : PHP et MySQL

Image pour le titre du contenu
Deux groupes de professionnels ont été créés sur Linkedin, pour rassembler la communauté PHP et MySQL : le groupe AFUP, pour les professionnels PHP français, et le groupe MySQL, qui est anglophone. Si vous êtes déjà inscrit sur ce réseau social, il est temps de le faire. Il y a déjà plus de 60 inscrits à l'AFUP, et beaucoup plus encore pour MySQL.
Et bien sûr, je dispose aussi de mon profile, même si je ne suis pas un groupe à moi tout-seul.

Mars 2008 – Nexen.net: Simplicité et web applications

Image pour le titre du contenu
Ce cartoon est tellement vrai, que j'ai eu l'impression qu'il avait regardé sur des applications que je connais pour s'inspirer!

Mars 2008 – Nexen.net: Avantages et limitations de PHP

Image pour le titre du contenu
Après le fameux " You Used PHP to Write WHAT?!" de CIO, ces derniers ont décidé de laisser la parole à John Coggeshall, éminent contributeur de PHP et leader du Zend Framework, pour faire un état des lieux beaucoup plus équitable et équilibré. La série d'article de CIO a pour but de montrer les limitations de différents langages de programmation.
Pour le problème Web, il semble que cela soit le typage faible qui soit un problème pour les développeurs qui viennent à PHP, alors que c'est une fonctionnalité inhérente du langage. Pour la sécurité, ce n'est pas PHP qui est peu sécuritaire, mais bien le style de programmation qu'il encourage. Enfin, si le prototypage est une force de PHP, c'est aussi une faiblesse quand on doit lancer des projets à long terme.

Mars 2008 – Arnaud Limbourg: Deux nouveaux podcasts du Forum PHP 2007

Deux nouveaux podcasts enregistrés lors du Forum PHP 2007 viennent de sortir !

C'est comme toujours par ici:

http://feeds.feedburner.com/forumphp2007

Mars 2008 – Hello Design: Soirée MySQL-Sun Community

Une invitation a été lancée pour la fusion Sun-MySQL. L'auteur de "Construisez votre application : PHP & MySQL - MySQLi - PDO" sera présent pour cet événement alors pourquoi pas vous ?

------------------------------------------------------------

 

I N V I T A T I O N

 

Soirée MySQL-Sun Community

Mercredi 2 avril 2008 à PARIS



Afin de célébrer la fusion Sun-MySQL, une série de rencontres avec la communauté est organisée dans de nombreuses capitales mondiales.

Mars 2008 – Arnaud Limbourg: Deux nouveaux podcasts du Forum PHP 2007

Deux nouveaux podcasts enregistrés lors du Forum PHP 2007 viennent de sortir !

C'est comme toujours par ici:

http://feeds.feedburner.com/forumphp2007

Mars 2008 – Nexen.net: Sun et MySQL, par Guy Kawasaki

Image pour le titre du contenu
Entrevue de Guy Kawasaki et Marten Mickos, au sujet du rachat de MySQL par SUn.
Question : avez-vous des inquiétudes du fait que MySQL risque d'être dirigée comme une "grande entreprise"?
Réponse: J'ai eu ce type de craintes lorsque nous étions déjà une startup! La complaisance et l'arrogance peuvent survenir sans que vous ne vous en aperceviez, dans n'importe quelle organisation. Pour l'éviter, nous avons pris des mesures spécifiques. Nous avons publié notre logiciel en GPL, nous exposant ainsi au risque du fork. Cela nous force à continuer de progresser."
C'est la première fois que je vois la GPL utilisée comme système de motivation et organisation d'entreprise.

Mars 2008 – Nexen.net: PHP et MySQL rejoignent le Google Summer of Code

Image pour le titre du contenu
PHP et MySQL ont été choisis, comme les années précédentes, pour participer au Google Summer of Code, un système de bourse pour les étudiants, où Google commandite le travail d'universitaires qui se consacrent à des projets Open Source.
Une liste d'idée de projets ont été déjà émises, pour les deux projets, et devraient fournir des sujets à de nombreux candidats. En 2006, William Candillon, avait travaillé sur phpAspect.
Les sujets PHP et MySQL s'adressent à des mordus du code C, mais d'autres projets utilisants PHP et MySQL sont aussi acceptés : Joomla, Pentaho, Drupal, Wordpress, Wikimedia, Coppermine ou Moodle.

Mars 2008 – Nexen.net: Vidéo PHP et MySQL, édition 37

Image pour le titre du contenu
Voici les 5 dernières vidéos PHP et MySQL.


Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.



N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.

Mars 2008 – Nexen.net: PHP-GTK2 est arrivé

Image pour le titre du contenu
La dernière version de PHP-GTK2 a été livré le 29 février dernier. Elle apporte principalement le support de GTK+ 2.6 jusqu'en 2.12, et une compatibilité partielle vers GTK 2.8, qui devrait être finalisée prochainement.
PHP-GTK est une interface de PHP avec la bibliothèque graphique de GTK et permet de réaliser des interfaces graphiques en PHP.

Mars 2008 – Nexen.net: DOM XML pour manipuler des documents

Image pour le titre du contenu
Alejandro Gervasio publie un dossier bientôt complet sur les manipulations de noeuds XML via l'extension DOM. DOM est une des API de PHP pour manipuler des documents XML : elle permet l'ajout, le retrait ou la modification de noeuds, avec une gamme impressionnante de fonctions. Si vaste, cette gamme, qu'il est parfois difficile de comprendre comment on va faire pour réaliser certaines opérations simples.

Mars 2008 – Nexen.net: Une autorisation pour publier du code PHP?

Image pour le titre du contenu
Alan Knowles publie une petite revue des CMS légers, et, dans le but d'en faire un choix, a fait une analyse du code source d'un point de vue qualité. Pour 12 CMS, il a identifié une moyenne de 3 problèmes, choisis dans cette liste :

  • Utilise des define pour la configuration

  • Hiérarchie de dossiers stupide

  • Noms de fichiers abscons

  • Espaces de noms de classes stupide

  • Beaucoup d'assignation de variables Smarty

  • CMS en un seul fichier

  • Le site a été piraté

  • Code non lisible

  • Données sérialisées qui se prennent pour une base de données

  • Fichiers mélangés

  • Mélange de PHP et HTML

  • if() imbriqués

  • Contourne les register_globals

  • Utilise des MAJUSCULES pour les globales

  • Non disponible

Mars 2008 – Nexen.net: 5 perles de chez PEAR

Image pour le titre du contenu
Akash Mehta vous propose de découvrir 5 classes de PEAR qui vous ferons gagner beaucoup de temps en développement :

  • Services_Akismet

  • HTTP_Request

  • Archive_Tar

  • Spreadsheet_Excel_Writer

  • XML_Parser

Mars 2008 – Nexen.net: Actualité de développement PECL, edition 193

Image pour le titre du contenu
5 paquets ont été mis à jour cette semaine :

  • en pdflib (0 visite) : création de fichiers PDF

  • en imagick (0 visite) : interface avec la bibliothèque graphique ImageMagick

  • en ingres (0 visite) : Interface avec la BDD Ingres de CA

  • en timezonedb (0 visite) : base de données de fuseaux horaires pour PHP

  • en PDO_INFORMIX (0 visite) : pilote IBM Informix IDS pour PDO


PECL est la bibliothèque d'extensions C de PHP.

 



 

Mars 2008 – Nexen.net: MySQL Quiz 14 à 17

Image pour le titre du contenu
Carsten Perdersen publie 4 nouveaux quizz MySQL, pourtant sur les jointures et les maximum, les collations, les instructions CASE, et la gestion des droits.
Il poursuit ses 'semaines de la fonction MySQL', où il présente tous les jours une nouvelle fonction MySQL utile ou inconnue (ou les deux).

Mars 2008 – Nexen.net: Recherche floue en PHP

Image pour le titre du contenu
Ce dossier en deux partie est consacré à la recherche floue en PHP. Elle explique comment mettre en place un système de recherche flou, qui accepte de nombreuses variations de mots et des fautes d'orthographe.
La recherche se base sur les mécanismes de soundex et levenstein, pour établir la proximité entre la chaîne de recherche et les textes pré-analysés dans une base de données.

Mars 2008 – PHP Index: Symfony : correctif sur l'installation de plugins

Un problème avec le canal PEAR vient d'être corrigé, la commande plugin-install installait des anciennes versions de plugins au lieu des dernières.

Afin d'y remédier, le plus simple sera de mettre à jour chaque plugin via la commande :
> php symfony plugin-upgrade symfony/myPluginNamePlugin

La commande suivante vous listera vos plugins installés :
> php symfony plugin-list

Retrouvez l'article sur le blog symfony

Mars 2008 – Apprendre-PHP.com: Remplacement dynamiques des acronymes et abréviations

A l'heure du « Web sémantique », on découvre beaucoup d'applications qui disposent d'une transformation automatique de leurs acronymes, abréviations et définitions présents dans le corps de leurs pages. Cette fonctionnalité apporte une valeur ajoutée non négligeable aux pages web et n'est finalement pas si compliqué que ça à mettre oeuvre. Ce tutoriel vous apporte une solution simple et efficace qu'il vous sera possible de mettre en œuvre très rapidement sur votre site. Pour réaliser cet exercice, nous nous appuierons sur une base de données MySQL et une classe PHP 5.

Mars 2008 – Nexen.net: PHP se greffe sur Ruby

Image pour le titre du contenu
Une nouvelle possibilité est ouverte pour les developpeurs de PHP, de pouvoir maintenant réaliser des fonctions que nous connaissons en PHP (par exemple la fonction fopen) et d'obtenir les équivalents en Ruby on Rails en ne connaissant pas ce langage.
La liste des fonctions évoluera régulièrement d'après l'annonce de l'équipe qui réalise ce kit, mais déjà il existe de nombreuses fonctions comme la gestion des chaines de caractères, les expressions régulières, le systeme de fichiers...

Mars 2008 – Apprendre-PHP.com: Remplacer des acronymes dans un texte

Cette portion de script illustre le principe de transformation d'acronymes dans une chaine de caractères composées de tags HTML. Ce code ne transforme pas les acronymes s'ils se trouvent dans un marqueur HTML mais uniquement s'il se trouve entre deux tags consécutifs.

Mars 2008 – Nexen.net: Actualité de développement PEAR, edition 188

Image pour le titre du contenu
9 paquets ont été mis à jour cette semaine :

  • en PHP_CompatInfo (0 visite) : Recherche les versions et extensions minimum pour exécuter un script PHP

  • en Net_LDAP (0 visite) : Interface objet pour LDAP

  • en Net_IDNA (0 visite) : Code d'encodage et décodage

  • en Net_Sieve (0 visite) : Gestion des serveurs de temps

  • en Services_Digg (0 visite) : Interface PHP pour Digg

  • en Services_Akismet (0 visite) : Client PHP pour Askimet (REST)

  • en Net_LDAP2 (0 visite) : Interface orientée objet pour LDAP

  • en PEAR_Size (0 visite) : Détermine l'espace disque d'un paquet

  • en Services_Google (0 visite) : Interface avec Google SOAP


PEAR est la bibliothèque de composants PHP.

 



 

Mars 2008 – Nexen.net: Alertes sécurité des applications PHP et MySQL, édition 188

Image pour le titre du contenu


PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.5 et 4.4.8; MySQL 5.0.51 (communauté) , 5.1.23-rc et 6.0.4.
Les mises à jour sont recommandées vers ces versions.



8 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Gallery, Invision Power Board, Joomla, PHP Nuke, PostNuke, WordPress, Xoops et phpMyAdmin



Mars 2008 – Nexen.net: MySQL Conference : +32%

Image pour le titre du contenu
Tim O'reilly constate que déjà la conférence MySQL a attiré 32% de visiteurs de plus que l'an dernier, à la même époque. Il attribue cela à l'acquisition récente de MySQL par Sun, qui a envoyé un message fort à la communauté. Je suis sur que cela est effectivement un signal dans l'industrie de l'informatique, et je serai curieux de voir si les deux communautés, celle de MySQL et celle de Sun, on répondu à l'appel de la même façon.
Jusqu'à présent, il y a 5 français qui se sont enregistrés à la conférence, que j'ai presque entièrement contacté, et je n'ai pas encore repéré les francophones hors France, alors n'hésitez pas à vous manifester pour que nous puissions nous rencontrer sur place.
Je présenterai une conférence de trucs et astuces en requêtes SQL, et sûrement quelques éléphpants, et peut être aussi un dauphin en peluche... wait and see!

Mars 2008 – Hello Design: Une nouvelle forme de pyramide PHP

Voici quelques semaines, nous parlions d'un record de pyramide avec des petits ElePHPants PHP comprenant 8 niveaux avec 36 ElePHPants... Vous pouvez la revoir en cliquant ici.

Pendant les conférences PHP Quebec, qui s'est déroulé du 12 au 14 mars, il a été créé une nouvelle catégorie de pyramide avec des gros ElePHPants. Il a été réalisé une pyramide avec les 15 derniers gros éléPHPants PHP.

Pour voir la réalisation, elle se trouve disponible sur le site de Nexen.net ou directement sur le lien suivant : cliquez ici

Nous leur disons BRAVO.

Par ailleurs, vous pouvez voir les autres photos de cet évènement.

 

 

Mars 2008 – Nexen.net: 7 péchés capitaux en PHP

Image pour le titre du contenu
Après sa descente contre les CMS légers, Alan Knowles reprend les problèmes qu'il a rencontré, et liste les caractéristiques qu'il recherche dans un CMS acceptable.

  • Defines pour la configuration

  • Organisation des dossiers

  • Extensions de fichiers

  • Si votre code est public, ne vous couvrez pas de ridicule

  • N'attrappez pas le syndrome 'pas inventé ici'

  • Eviter l'imbroglio fonctionnel

  • Ne pas mélanger PHP et HTML

Mars 2008 – Nexen.net: Rencontre PHP sur Lyon, le 3 Avril

Image pour le titre du contenu
Je vous donne rendez-vous le 3 Avril sur Lyon, pour une rencontre AFUP autour de PHP :

  • architectures PHP, par Jérome Renard : outils et techniques pour organiser son application PHP

  • premiers contacts avec PHP 6, par Damien Seguy : comment se préparer à la future version de PHP


Les horaires sont de 19h00 à 21h00 env. Après les conférences, on ira se sustenter dans un établissement local.
Le lieu de la conférence n'est pas encore connu, alors restez en contact via nexen.net.

Mars 2008 – Nexen.net: Esapi

Image pour le titre du contenu
Le but de ESAPI est de proposer à partir d'une interface simple toutes sortes de fonctions de sécurité pour vos développements PHP.
L'architecture de ESAPI est très simple puisque une série de classes vous est proposée et encapsule la clé des opérations de sécurité.

Mars 2008 – Prendre un Café: Le code de Symfonians en open source

Tout est dans le titre, je viens de mettre en place une instance Trac/SVN dédiée au projet, le code est libéré et publié sous licence CC-BY-SA 3.0.

Je pense que la publication du code source de l'application est essentiellement utile dans le cadre d'un apprentissage de Symfony, le code étant tout de même très orienté métier.

Edit : Rapido, un petit screencast d'installation de Symfonians à partir des sources depuis subversion :

Télécharger le screencast (QuickTime MOV, ~88 Mo)

Mars 2008 – Nexen.net: 10 outils modernes pour le développement PHP

Image pour le titre du contenu
De nombreux outils modernes permettent la réalisation de développement en PHP. Une liste d'outils modernes ont été regroupé sur le site de DaveDeveloppement.
La liste d'outils concerne surtout :
- Les tests automatisés
- analyseur de code
- Outil de construction de projet
- Debogueur
- Outil de documentation
- Framework
- Systeme de Gestion
- Logiciel de suivi de paquet
Il existe bien sur d'autres outils alternatifs par rapport à la liste.

Mars 2008 – PHP Index: Symfony 1.0.12

Deux mois après la précédente version, le framework Symfony 1.0.12 vient de sortir.

De nombreuses corrections ont été apportées (plus de 30 tickets clôturés) concernant notamment d'importants problèmes de sécurité et de plugins sous Windows, correction de la barre d'outils de débogage utilisant Xdebug, du générateur d'admin...

Il vous est fortement conseillé de mettre à jour vos projets.

Retrouvez le ChangeLog

Mars 2008 – Nexen.net: PHP 5.3 : +30% de performances

Image pour le titre du contenu
Johannes Schülter annonce que PHP 5.3 apporte 30% d'accélération par rapport aux versions précédentes. Ces chiffres ont été obtenus avec l'utilisation de différents CMS écrits en PHP, qui affichent tous un gain de performances impressionnant, rien qu'en changeant de version. Si vous n'y croyez pas, essayez donc vous-même sur votre CMS maison, et envoyez les résultats à Johannes, qui se fera un plaisir de tout collecter.
Au passage PHP 5.3 est toujours à tester, ainsi que PHP 5.2.6RC2.

Mars 2008 – Nexen.net: Dernières nouvelles de MySQL

Image pour le titre du contenu
Philip Antoniades, MySQL Systems Engineering Manager, donnait une conférence à New York PHP hier soir, et Ronald Bradford rapporte que la compagnie a reçu l'aide de 60 à 80 ingénieurs Sun : voila qui pourrait accélérer le calendrier poussif de publication. Aviez-vous noté que la dernière version GA (Generaly available) de MySQL date de novembre 2005? Oui, plus de 6 mois et 2 ans avant... Ronald rapporte aussi que MySQL 5.1 GA devrait sortir au deuxième trimestre, sans préciser l'année.
Autres points à noter : Sun va ajouter MySQL à son offre d'hébergement de base de données sur network.com, et est en train de mesurer les performances sur Solaris. Enfin, Marten Mickos, l'ancien PDG de MySQL, porte maintenant le titre de Senior Vice President Database.
A noter que Mercredi prochain, il y a une rencontre MySQL/Sun avec la communauté pour discuter de tous ces points.

Mars 2008 – Nexen.net: Obfuscateur MySQL

Image pour le titre du contenu
Un obfuscateur MySQL est un logiciel qui modifie suffisamment les tables et colonnes d'une base de données, les données et les requêtes, pour qu'elles ne soient plus reconnaissables et puisse être postées dans un forum ou à l'interface de bogue de MySQL.
Cet outil pourrait libérer des quantités impressionnantes de rapporteurs de bogues, qui envoient souvent des rapports à l'éditeur, du genre 'MySQL contient un bug' mais qui refusent de produire un cas d'utilisation, car 'les données sont confidentielles'.
Arjen Lentz sera le mentor de ce Google Summer of Code, et je ne peut que vous encourager à postuler.
 
 
 SELECT bribes.senator_name
 
 FROM mafia_projects
 
 LEFT JOIN bribes
 
 ON (YEAR(mob_projects.bribe_given) = bribes.date_taken)
 
 WHERE secret_field = 'secret_value'
 

Deviendrait
 
 
 SELECT char_field (width 20; not null; no index)
 
 FROM myisam_table (size 500, row_format: fixed)
 
 LEFT JOIN innodb_table (size 100)
 
 ON (YEAR(date_field(not null)) = int_field
 
 WHERE enum_field = valid_value_from_enum
 

Mars 2008 – Nexen.net: Mieux protéger vos accès MySQL

Image pour le titre du contenu
Il y a souvent des identifiants de bases de données à mettre dans les scripts PHP : si vous êtes dans ce cas là, voici quelques idées pour renforcer votre sécurité.
Eviter d'utiliser un nom d'utilisateur trop unique. Unique, au sens de google: oui, prenez le nom d'utilisateur de votre base, et voyez ce que google vous répond.

  • S'il y a aucun résultat, c'est aussi bon signe.

  • S'il y a quelques résultats, c'est mauvais signe. Vérifiez que vous n'y êtes pas.

  • S'il y a trop de résultats, c'est bon signe.

  • Réduisez les avec mysql_connect ( ou votre fonction de connexion), pour vous assurer que rien ne traîne avec votre mot de passe

  • Précisez votre recherche dans vos sites , via site: dans la ligne de recherche


Ces quelques étapes vous permettront de vérifier que votre nom d'utilisateur ne train pas trop dans les moteurs de recherche. Les surprises pourraient être très désagréables, notamment si le code PHP a été publié temporairement sans être traité par PHP, et que Google Cache a tout noté.
Une fois que vous avez fait tout cela, essayez d'utiliser vos identifiants Web pour vous connecter à distance sur votre serveur de base : il est recommandé de ne pas pouvoir le faire, et d'avoir des identifiants séparés pour cela.
Avec ces quelques étapes, vous devriez être rassurés sur ces aspects.

Mars 2008 – PHP Index: Asbru Web Content Management v6.7

Version 6.7 of the Asbru Web Content Management system for PHP, ASP and JSP/Java has been released.

The new version 6.7 of the Asbru Web Content Management system expands the system's e-commerce and access restriction capabilities.

E-Commerce Features Expanded
In this latest release 6.7 of the Asbru Web Content Management system it is now possible to export details about orders and items included in each order directly from the system's GUI. The new version of the system also enables an extended set of user account details to be displayed to registered users. These details include the user's registered delivery details, invoice details and many more.

Access Restriction Capabilities Expanded
The new version of the Asbru Web Content Management system also includes improved handling of website-wide access restrictions. In particular access restriction configuration options have been added to enable access permissions to be inherited between different roles. For example you may choose whether a user with access to publish should also have access to view and update the content as well.

In addition to the enhancements listed above the new version includes a number of minor enhancements:

* Display/output of data from external databases.
* Formatted display of additional date/time attributes.
* Improved RSS channel extension.
* Improved Google/search engine sitemap extension.

For an online trial of the new version of the Asbru Web Content Management system: http://wcm.asbrusoft.com.

About Asbru Web Content Management
The Asbru Web Content Management system is a full-featured and ready to use out-of-the-box enterprise level solution. It is available for PHP, ASP and JSP/Java and runs on Microsoft Windows, Linux, Unix and Mac OS X. The system enables users to update web content through Internet Explorer, Mozilla/Firefox and Safari web browsers. For more information about Asbru Web Content Management: http://wcm.asbrusoft.com.

Proposé par David Fisher

Mars 2008 – Apprendre-PHP.com: Overviews du Framework Symfony 1.1 Bêta 2

Depuis le début de cette semaine, les développeurs Symfony (comme moi) ont eu la chance de découvrir deux suprises dont l'une est de taille. La première a été dévoilée samedi 22 mars et concerne la branche 1.0 du framework Symfony. La seconde, quant à elle, a été annoncée hier tard...

Mars 2008 – PHPortail: Conseils pour du code PHP moderne (26/03/08)

LiveWire nous propose une collection de conseils pour écrire correctement et rapidement du code PHP.

Cette liste provient de son expérience sur les forums de développeurs, et répond à de...

Mars 2008 – PHPortail: PHPUnit 3.2.9 à 3.2.16 (26/03/08)

Depuis nos dernières annonces, Sebastian Bergmann nous annonce la sortie de PHPUnit 3.2.9 à 3.2.16.

En raison de la longueur, je ne traduirais pas chacun des problèmes réglés :

PHPUnit...

Mars 2008 – PHPortail: Introduction aux tests unitaires avec PHPUnit 3.1 (26/03/08)

«Le langage PHP est un langage de programmation flexible, permissif et facile à appréhender. Les principes et contraintes de conception généralement imposées dans les langages à vocation...

Mars 2008 – PHPortail: De retour (26/03/08)

Après quelques mois, les nouvelles sont de retour.

Nous allons mettre les nouvelles les plus importantes des semaines précédentes, ainsi que toutes les nouvelles.

Quelques changements sont...

Mars 2008 – PHPortail: Sécurité : les huit grandes menaces attendues en 2008 (26/03/08)

Christophe Guillemin dresse la liste des huit plus grandes menaces qui planent sur le monde informatique pour 2008.

1. attaque sur les réseaux sociaux
2. attaque autour des mondes...

Mars 2008 – PHPortail: Mambo 4.6.3 (26/03/08)

La version 4.6.3 du CMS Mambo est sortie la veille de Noël. Cette nouvelle version n'apporte pas de grande nouveauté, mais corrige quelques bogues, ainsi que des failles de sécurité au niveau de...

Mars 2008 – PHPortail: Le match des accélérateurs : APC, Zend et XCache (26/03/08)

Mike Willbanks a testé pour vous trois accélérateurs :

* APC : projet disponible sur pecl et qui devrait être intégré à PHP 6
* Xcache : par les auteurs de lighthttpd
* Zend...

Mars 2008 – Nexen.net: PHP to the Moon

Image pour le titre du contenu
Le site PHP to the Moon propose un ensemble d'outils PHP pour réaliser des applications de qualité avec du PHP.
Le site propose différents outils :
- Outils dynamiques (test unitaires, debuggueur,différentes mesures)
- Outils statiques (analyse, securité)
Un outil a été présenté lors du dernier rendez-vous de l'AFUP (Association Français des Utilisateurs de PHP) permettant de gérer l'ensemble des outils existant du marché. L'outil est à mon avis très prométeur.

Mars 2008 – Nexen.net: La modération selon boing-boing

Image pour le titre du contenu
Teresa Nielsen Hayden, modératrice sur le site de boing-boing a publié sous forme de question / réponse les méthodes qu'elle et les modérateurs du site utilisent pour valider les commentaires qui passent sur le site.
La stratégie est sans détour, et fait un tri sévère entre les commentaires utiles et les autres. J'aime beaucoup la technique de dévoyellation : quand un message est sur la mauvaise voie, mais pas encore totalement déclassé, il est publié sans les voyelles. Il est donc encore lisible, mais avec un effort du lecteur... ou de l'auteur.
En lisant les questions et les réponses, j'ai retrouvé tellement de situations que j'ai vécu sur nexen.net, et d'autres sites. C'est réconfortant de voir que d'autres sites recoivent des critiques qui sont finalement passe-partout.

Mars 2008 – Nexen.net: PHP 5.2.6RC3

Image pour le titre du contenu
Allez télécharger la troisième Release Candidate, pour la compiler et la tester : make test !

Mars 2008 – Nexen.net: Vidéo PHP et MySQL, édition 38

Image pour le titre du contenu
Voici les 5 dernières vidéos PHP et MySQL.


Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.



N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.

Mars 2008 – Nexen.net: Actualité de développement PECL, edition 194

Image pour le titre du contenu
5 paquets ont été mis à jour cette semaine :

  • en APC (0 visite) : cache PHP alternatif

  • en timezonedb (0 visite) : base de données de fuseaux horaires pour PHP

  • en phar (0 visite) : support des fichiers d'archives PHP : .phar

  • en spread (0 visite) : Interface PHP pour Spread

  • en uuid (0 visite) : Support des fonctions uuid


PECL est la bibliothèque d'extensions C de PHP.

 



 

Mars 2008 – Kamelot Blog: Apero PHP à Lille et Leuven


Apéro PHP lillois, le mardi 15 avril 2008

Le prochain Apéro PHP à Lille est prévu pour le 15 avril 2008. Rendez-vous à 19h30 au Café Citoyen - 7 place du vieux marché aux chevaux, près du métro République.

Inscriptions : aperophp


Pour la Belgique, faute de temps avec le déménagement, j'ai un peu oublié l'apéro php de mars. On le fera donc à Leuven, le vendredi 4 avril, au Café des sports (comme pour les meeting mysql)

Inscriptions : en commentaire sur ce blog ou sur aperophp ou sur facebook : c'est là que ca se passe.

Ca sera l'occasion de parler de phpbelgium

Il y a 2 entrées

Plus d'info sur les apéros PHP belges de 2008 ici

Mars 2008 – PHPortail: Le nouveau visage de pear.php.net (28/03/08)

Helgi ormar Þorbjörnsson annonce une nouvelle version du site Web de PEAR : si elle semble assez cosmétique en apparence, il faut saluer le travail de forçat que Helgi a entrepris pour arriver à...

Mars 2008 – PHPortail: RunCMS 1.6.1 (28/03/08)

Pour rappel, RunCMS opère dans la lignée des CMS comme PHPnuke et Xoops dont il est le descendant.
Il est réalisé en langage PHP et utilise MySQL pour accéder aux différentes données

Il...

Mars 2008 – PHPortail: Amazon SimpleDB pour Symfony (28/03/08)

Nicolas Perriault annonce : "Je viens de publier une version alpha du nouveau plugin pour Symfony, qui utilise le tout nouveau service Amazon SimpleDB : sfAmazonSimpleDBPlugin. Ce plugin est en...

Mars 2008 – PHPortail: Pixy : un scanneur SQL pour filtrer vos requêtes (28/03/08)

Pixy est un script PHP qui sert de scanneur SQL et qui vient s'interposer entre les clients et le serveur SQL de telle façon que les requêtes soient filtrées. Cela permet d'éviter les injections...

Mars 2008 – PHPortail: Mantis 1.1.0 stable (28/03/08)

Mantis est un logiciel libre de suivi de bogues. Il est écrit en PHP et utilise les bases de données, MySQL, MY SQL et PostGreSQL.

Il peut être utilisé sur la plupart des environnements...

Mars 2008 – PHPortail: Un serveur AMP sur iPhone (28/03/08)

Romain Bourdon a réussi à installer un serveur Apache-MySQL et PHP sur son iPhone. Après avoir mis en place la connexion SSH et un terminal, il a pu charger les applications et les configurer....

Mars 2008 – PHPortail: Techniques de performance en PHP (28/03/08)

Mike Willibanks passe en revue les différentes techniques qui permettront d'accélérer votre site PHP.

* Cache d'opcode
* Précalculs
* Cache de variables
* Cache de fichiers
* Cache en...

Mars 2008 – PHPortail: AFUP: Architectures PHP et Premiers contacts avec PHP 6 (28/03/08)

Un double Rendez-vous que propose AFUP autour de PHP dans la ville de Lyon.

Ce rendez-vous se décomposera sous la forme de 2 minis-conférences d’une heure chacune avec comme thème...

Mars 2008 – PHPortail: Créez une application pour Facebook en PHP (28/03/08)

"Je dois admettre qu'écrire une application pour FaceBook est plutôt cool. J'ai donc décidé d'en créer un qui utilise cette plate-forme. J'ai écrit cette application en PHP, et j'ai pensé...

Mars 2008 – PHPortail: Un répondeur automatique de courriel en PHP (28/03/08)

« Il est très pratique pour les utilisateurs de communiquer avec une application ou une compagnie, via courriel, mais il n'est pas forcément très facile aux employés de cette dernière de...

Mars 2008 – Nexen.net: Alertes sécurité des applications PHP et MySQL, édition 189

Image pour le titre du contenu


PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.5 et 4.4.8; MySQL 5.0.51 (communauté) , 5.1.23-rc et 6.0.4.
Les mises à jour sont recommandées vers ces versions.



6 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Gallery, Invision Power Board, Joomla, Smarty, e107 et phpBB



Mars 2008 – Nexen.net: Actualité de développement PEAR, edition 189

Image pour le titre du contenu
11 paquets ont été mis à jour cette semaine :

  • en Pager (0 visite) : Pagination des résultats

  • en DB_Table (0 visite) : Basé sur PEAR DB, avec des types de données abstraits

  • en PHP_CompatInfo (0 visite) : Recherche les versions et extensions minimum pour exécuter un script PHP

  • en PEAR_Info (0 visite) : Informations sur l'installation PEAR

  • en DB_ldap (0 visite) : Interface DB à un serveur LDAP

  • en Date (0 visite) : Classes de gestion des dates et fuseaux horaires

  • en Console_Table (0 visite) : Construction de tables pour la console

  • en Services_Blogging (0 visite) : Accédez à votre blogue avec PHP

  • en Tree (0 visite) : Gestion dynamique d'arbres, avec support des bases et XML

  • en XML_sql2xml (0 visite) : Retourne du XML à partir d'une requête SQL

  • en DB_ldap2 (0 visite) : Pilotes de bases de données pour LDAP v2 et v3


PEAR est la bibliothèque de composants PHP.

 



 

Mars 2008 – PHP News: [Vidéo] Initiation à l’AJAX. Envoi en GET/POST, conseils et démonstrations

Get the Flash Player to see this player.

Cette vidéo aborde les points suivants :

  • Initiation à l’AJAX
  • Avantages à utiliser POST à la place de GET
  • Quelques mots sur l’UTF-8, de la base de donnée au serveur, du serveur au client et inversement, tout devrait être UTF-8 natif
  • L’implémentation de l’objet XMLHttpRequest dans les navigateurs
  • Construction de classe objet en javacript, méthodes d’instances et méthodes statiques.
  • Firefox et Firebug pour le débuggage

Cette vidéo n’aborde pas encore :

  • Construction de réponses en JSON (à venir) et XML (ne sera pas développé car ma préférence va clairement au JSON).

Voici les fichiers sources utilisés dans la vidéo :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Ajax</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
Hello world.

{

}

<input type="button" onclick="doPost();" value="doPost"/>
<input type="button" onclick="doGet();" value="doGet"/>
<input type="button" onclick="doPostGet();" value="doGet + doPost"/>

<hr/>

<div id="responsePost" style="float:left"></div>
<div id="responsePostGet" style="float:left;margin-left:300px"></div>
<div id="responseGet" style="float:right"></div>

</div>

<script type="text/javascript">
//<![CDATA[

//Objet Ajax à instancier
var Ajax = function()
{
var current = this;
this.xhr = Ajax.getXhr();
this.ondone = function(data){ /* debug */ };

this.post = function(strUrl, strArgs)
{
this.xhr.open('POST', strUrl);
this.xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset:UTF-8');
this.xhr.onreadystatechange = function()
{
if(current.xhr.readyState == 4 && current.xhr.status == 200)
current.ondone(current.xhr.responseText);
};
this.xhr.send(strArgs); //arg1=value1&arg2=value2...
};
this.get = function(strUrl)
{
this.xhr.open('GET', strUrl); //http://domain/script.php?arg1=value&arg2=va%20lue2...
this.xhr.onreadystatechange = function()
{
if(current.xhr.readyState == 4 && current.xhr.status == 200)
current.ondone(current.xhr.responseText);
};
this.xhr.send();
};
}

//Méthode Static
Ajax.getXhr = function()
{
if(window.XMLHttpRequest)
{
return new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
try
{
return new ActiveXObject('Msxml2.XMLHTTP');
}
catch(e)
{
try
{
return new ActiveXObject('Microsoft.XMLHTTP');
}
catch(e)
{
throw new Error('XMLHTTP not found');
}
}
}
}

function doPost()
{
var a	=	new Ajax();
a.ondone = function(data)
{
document.getElementById('responsePost').innerHTML = data;
};
a.post('index.php' , 'a=1&b=2');
}

function doGet()
{
var a	=	new Ajax();
a.ondone = function(data)
{
document.getElementById('responseGet').innerHTML = data;
};
a.get('index.php?a=1&b=2&c=3');

}

function doPostGet()
{
var a	=	new Ajax();
a.ondone = function(data)
{
document.getElementById('responsePostGet').innerHTML = data;
};
a.post('index.php?arg1=value1&arg2=value2' , 'a=1&b=2');
}

//]]>
</script>

</body>
</html>

Et le fichier php :


<?php

header('Content-Type: text/html; charset=UTF-8');

echo 'POST :<pre>';

print_r($_POST);

echo '<pre>';

echo 'GET :<pre>';

print_r($_GET);

echo '<pre>';

echo 'Requête effectuée';

Mars 2008 – PHP News: [HOW-TO] Server dédié : Apache, Lighttpd, MySQL, PHP, DNS, FTP, POSTIX, MRTG, astuces sous Slackware Linux

Voici un tutorial que j’ai réalisé en premier lieu sur le forum de support OVH. Il s’adresse à toute personne souhaitant mettre en place un server dédié, qu’il soit chez OVH ou non, qu’il soit sous Slackware ou non (je n’utiliserai “le” système de package propre à Slackware uniquement pour installer des librairies, outils de compilation et pour la mise à jour du système. La majorité des installations propre au “serveur web” seront détaillées et effectuées via configure/make/make install qui est la base commune à tous les Linux).

Il est réalisé sous Slackware 10.2.

Vous le suivez à vos risques et périls et il n’est pas forcément exhaustif

Le nom host du serveur donné ici sera ns10000.

1. Livraison du serveur, premières vérifications

Premières vérifications qui peuvent éviter quelques soucis dans un futur proche (problèmes réellement rencontrés) :

  • Vérification host
Code:
#ping ns10000 ping: unknown host ns10000

En fait le fichier host était bancal (ça commencait mal ) :

Code:
#cat /etc/hosts 127.0.0.1 localhost 91.121.14.48 2-ns10000.ovh.net ns10000

On corrige en (avec vi ou en ramenant ça chez soi en sftp, on installe nano dès qu’on peut) :

Code:
127.0.0.1 localhost 91.121.14.48 ns10000.ovh.net ns10000
  • Vérification horloge
Code:
#date

La date était elle aussi en retard de deux mois.

Premier problème rencontré :

Mettre à jour la date du serveur en l’enregistrant dans le bios grâce à la commande hwclock ne marche pas.

Code:
#hwclock –show select() to /dev/rtc to wait for clock tick timed out
Code:
#hwclock –systohc –debug hwclock from util-linux-2.12p Using /dev/rtc interface to clock. Last drift adjustment done at 1137365083 seconds after 1969 Last calibration done at 1137365083 seconds after 1969 Hardware clock is on UTC time Assuming hardware clock is kept in UTC time. Waiting for clock tick… select() to /dev/rtc to wait for clock tick timed out …got clock tick
Code:
#hwclock –set –date=”09/11/07 13:56:00″ –utc –debug Issuing date command: date –date=”09/11/07 13:56:00″ +seconds-into-epoch=%s response from date command = seconds-into-epoch=1189511760 date string 09/11/07 13:56:00 equates to 1189511760 seconds since 1969. hwclock from util-linux-2.12p Using /dev/rtc interface to clock. Last drift adjustment done at 1137365083 seconds after 1969 Last calibration done at 1137365083 seconds after 1969 Hardware clock is on UTC time Assuming hardware clock is kept in UTC time. Waiting for clock tick… select() to /dev/rtc to wait for clock tick timed out …got clock tick
Code:
select() to /dev/rtc to wait for clock tick timed out

Une recherche sur Google nous indiquera qu’il existe un bug avec les Intel dualcore et que l’on peut contourner le problème en utilisant l’option “–directisa” avec hwclock

Code:
#hwclock –help | grep directisa –directisa access the ISA bus directly instead of /dev/rtc

Autant vous dire tout de suite que ca ne marchera pas mieux (bus isa inexistant ?)

Code:
root@ns10000:/# hwclock –show –directisa root@ns10000:/#

et que jusqu’à présent je n’ai pas trouvé comment enregistrer dans le bios du serveur la bonne date. Je suis donc obligé de la mettre à jour à chaque (rare) reboot (grâce à NTP que nous verrons plus loin)

  • Installation de nano

Nano est très pratique et on en a tout le temps besoin. Installons le en priorité

root@ns10000:/home# wget http://repository.slacky.eu/slackwar…6-i486-1sl.tgz

root@ns10000:/home# installpkg nano-2.0.6-i486-1sl.tgz

  • Utilisateur autre que root

Afin de se logger avec un autre utilisateur que root, on crée un nouvel utilisateur (ici “toto”)que l’on n’oublie pas de placer dans le groupe wheel (pour pouvoir se logger en root depuis cet user) :

Code:
# useradd -g users -G wheel -s /bin/bash toto # passwd toto

Une fois effectué, tenter de vous connecter en SSH avec cet utilisateur, puis de vous loggeur en root.

  • Modification de sshd_config

Attention, les modifications suivantes empecheront les techs OVH d’accèder à votre serveur. A vos risques et périls de les effectuer

On change le port par défaut pour éviter une bonne partie de scan, on interdit au root de se connecter directement (on se connectera avec l’utilisateur “toto”)

Code:
/etc/ssh/sshd_config
Code:
Port 8655 PermitRootLogin no PermitEmptyPasswords no AllowUsers toto SyslogFacility AUTH LogLevel INFO

On restart (et on ne stop surtout pas !) le démon :

Code:
root@ns10000:/etc/rc.d# ./rc.sshd restart

Vous vous connecter maintenant en utilisant votre nouvel utilisateur non root sur le nouveau port.

2. Mise à jour de la distribution avec slackpkg

  • Téléchargement de slackpkg
Citation:
#cd /home/

#wget http://heanet.dl.sourceforge.net/sou…1-noarch-2.tgz

#installpkg slackpkg-2.61-noarch-2.tgz

  • Configuration de slackpkg

On désactive la vérification GPG (GPG n’est pas installé pour le moment (on évite ainsi le message de rappel récurrent suivant à chaque fois qu’on utilise slackpkg) :

Code:
gpg package not found! Please disable GPG in /etc/slackpkg/slackpkg.conf or install the gnupg package. To disable GPG, edit slackpkg.conf and change the value of the CHECKGPG variable to off - you can see an example in the original slackpkg.conf.new file distributed with slackpkg.

On active un des miroirs des paquets slackware-10.2 en décommantant une des lignes du michier mirrors :

Code:
/etc/slackpkg/mirrors
Code:
http://ftp.belnet.be/packages/slackware/slackware-10.2/

Note : On peut tout a fait passer en slackware 12, cependant certaine mise à jour touchant au coeur du système sont à faire avec précaution. Dans ce tutorial nous restons en Slackware 10.2

On peut maintenant mettre à jour la liste interne des paquets de slackpkg :

Code:
#slacpkg update

Et ensuite demander la liste des paquets upgradables :

Code:
#slackpkg upgrade-all

http://hiboox.com/lang-fr/image.php?img=xu81a9er.png

A vous ensuite de choisir quels paquets vous souhaitez mettre à jour.

3. Installer le nécessaire pour les compilations

Utilisons l’outil de package de la distribution pour récupérer les compilateurs et dépendances nécessaires par la suite.

Dans un premier temps regardons ce qui est installé :

Code:
# slackpkg search glib The list below shows all packages with the selected pattern. … [ installed ] - glibc-solibs-2.3.5-i486-6_slack10.2 [ installed ] - glibc-zoneinfo-2.3.5-noarch-8_slack10.2 [uninstalled] - glib-1.2.10-i386-2 [uninstalled] - glib2-2.6.6-i486-1 [uninstalled] - glibc-2.3.5-i486-5 [uninstalled] - glibc-i18n-2.3.5-noarch-5 [uninstalled] - glibc-profile-2.3.5-i486-5

Nous pouvons ainsi installer :

Code:
# slackpkg install glib # slackpkg install glib2 # slackpkg install glibc

Idem pour gcc :

Code:
# slackpkg install gcc
Code:
# slackpkg search gcc The list below shows all packages with the selected pattern. [ installed ] - gcc-4.1.2-i486-1 [ installed ] - gcc-g++-4.1.2-i486-1 [uninstalled] - gcc-gfortran-4.1.2-i486-1 [uninstalled] - gcc-gnat-4.1.2-i486-1 [uninstalled] - gcc-java-4.1.2-i486-1 [uninstalled] - gcc-objc-4.1.2-i486-1 [uninstalled] - gcc-g77-3.4.6-i486-1

Les outils de compilation sont installés. Ils nous manque plus que les kernels-headers aussi nécessaires. Nous allons télécharger les sources complètes du noyau de la machine qui les contient (et nous pourrons ainsi envisager ultérieurement de toucher au noyau).

Tout d’abord enlevons les éventuels kernel-headers/sources déjà installés et qui ne sont pas forcément ceux du noyau sur lequel vous êtes (slackware 10.2 est prévu pour tourner sur un noyau 2.4.32, vous disposez alors des kh/s 2.4.32 dans les dépots unqiuement. Si vous êtes passé en slackware 12, vous aurez les kh/s 2.6.21.5):

Noyau de la machine :

Code:
# uname -r 2.6.21.5-grsec-xxxx-grs-ipv4-32
Code:
#slackpkg remove kernel-headers #slackpkg remove kernel-source

Est ce propre ?

Code:
cd /usr/src/ && ls -lh

devrait etre vide, sinon faite un peu de nettoyage

Dl des sources complètes relatives au noyau, décompression et lien symbolique :

Code:
root@ns10000:/usr/src# wget http://www.eu.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.5.tar.gz root@ns10000:/usr/src# tar xvf linux-2.6.21.5.tar.gz root@ns10000:/usr/src# ln -s /usr/src/linux-2.6.21.5 linux

On n’oublie pas :

Code:
root@ns10000:/usr/src# cd linux/ root@ns10000:/usr/src# make mrproper

Tant qu’on y on peut préparer le terrain à une futur recompilation du noyau.

Code:
# cd /usr/include root@ns10000:/usr/include# ln -s /usr/src/linux/include/linux linux root@ns10000:/usr/include# ln -s /usr/src/linux/include/asm-i386 asm root@ns10000:/usr/include# ln -s /usr/src/linux/include/asm-generic asm-generic

Et voila, nous avons de quoi compiler les logiciels que nous allons utilisez et de toucher aussi à la recompilation du noyau (qui ne sera cependant pas aborder ici)

Suite :

  • Configuration des compilations : CFLAGS/CXXFLAGS

A titre informatif si vous ne souhaiter pas utiliser les Flags de compilation par défaut :

Cela dépend de votre architecture et de votre version de gcc. Pour les Intel Core 2 Duo et une version de gcc < 4.3 vous pouvez utiliser lors des configure :

Code:
# ./configure … CFLAGS=”-march=prescott -O3 -pipe -fomit-frame-pointer”

Pour les futurs gcc (>= 4.3), une nouvelle préselection sera dispo :

Code:
# ./configure … CFLAGS=”-march=core2 -O3 -pipe -fomit-frame-pointer”

Vous pouvez déterminer quels sont les bonnes options d’architecture à utiliser grâce au script gcccpuopt :

http://www.pixelbeat.org/scripts/gcccpuopt
Pour enregistrer vos préférences sur le shell courant, vous pouvez enregistrer la valeur des CFLAGS qui sera réutilisée à chaque compilation. Faites de même pour les flags c++ CXXFLAGS

Code:
export CFLAGS=”-march=prescott -O3 -pipe -fomit-frame-pointer”

Et en l’enregistrant dans votre fichier /etc/profile pour la conserver définitivement.

Code:
# nano /etc/profile
Code:
# /etc/profile: This file contains system-wide defaults used by # all Bourne (and related) shells. # Set the values for some environment variables: #[...] export CFLAGS=”-march=prescott -O3 -pipe -fomit-frame-pointer” export CXXFLAGS=”${CFLAGS}” #[...]

Je vous invite à consulter pour une explication de ces options/optimisations :

http://www.linux-kheops.com/doc/man/…an1/gcc.1.html

http://gentoo-wiki.com/Safe_Cflags#I…_51xx. 2F53xx

http://forums.gentoo.org/viewtopic-t…-start-25.html

4. Apache

  • Prerequis : Installation de zlib

Je vais compiler ici Apache 2.0.x avec le module mod_deflate qui permet la compression du flux de sortie. Ce module utilise la bibliothèque Zlib qu’il faut donc installer. Nous utilisons slackpkg pour installer cette librairie (la dernière version se trouve sur les miroirs, pas forcément utile de la compiler nous-même)

Code:
slackpkg install zlib

On se créer un dossier de compilation où on y désarchive Apache (libre à vous d’installer la version d’Apache que vous souhaiter. N’oubliez pas que pour compiler Apache 2.2 il vous faudra installer APR en version >= 1.0):

Code:
root@ns10000:~# mkdir /home/compilation root@ns10000:~# cd /home/compilation root@ns10000:/home/compilation# wget http://apache.fastorama.com/dist/httpd/httpd-2.0.61.tar.gz root@ns10000:/home/compilation# tar xvf httpd-2.0.61.tar.gz root@ns10000:/home/compilation# cd httpd-2.0.61 root@ns10000:/home/compilation/httpd-2.0.61# make clean

Un make clean n’est pas du tout inutile (experience inside) !

  • Configuration de la compilation

C’est à vous de savoir quels modules APache vous souhaitez conserver ou enlever, la compilation suivante n’est donnée qu’à titre indicatif :

Code:
root@ns10000:/home/compilation/httpd-2.0.61#./configure –prefix=/usr/local/apache2 –enable-so –enable-deflate –enable-headers –disable-actions –disable-imap –disable-userdir root@ns10000:/home/compilation/httpd-2.0.61#make

On vérifie que Apache s’est compilé avec les bons modules (c’est à votre avantage de ne pas compiler des modules dont vous ne vous servirez jamais) :

Code:
root@ns10000:/home/compilation/httpd-2.0.61# ./httpd -l Compiled in modules: core.c mod_access.c mod_auth.c mod_include.c mod_deflate.c mod_log_config.c mod_env.c mod_headers.c mod_setenvif.c prefork.c http_core.c mod_mime.c mod_status.c mod_autoindex.c mod_negotiation.c mod_dir.c mod_alias.c mod_so.c

C’est OK on peut l’installer :

Code:
root@ns10000:/home/compilation/httpd-2.0.61# make install
  • Configuration rapide d’Apache

Dans ce tutoriel je ne vais me servir d’Apache uniquement pour traiter du contenu dynamique (PHP). Tout le contenu statique sera distribué par Lighttpd qui fera aussi service de frontal. C’est un couple très efficace niveau performance.

Disons que nous allons hébergés sur ce serveur au moins 2 sites internet indépendants. (site1.com et site2.net)

  • Création du user httpd sous lequel tourner Apache
Code:
root@ns10000:/home# groupadd www root@ns10000:/home# useradd httpd -g nogroup -s /bin/false root@ns10000:/home# usermod -L httpd #lock le compte

Le groupe www va nous servir pour le serveur FTP

  • Création du répertoire htdocs
Code:
#mkdir /home/htdocs #mkdir /home/htdocs/site1.com #mkdir /home/htdocs/site2.net
Code:
nano /usr/local/apache2/conf/httpd.conf

Vous pouvez modifier les parametres suivants :

Code:
User httpd Group nogroup #Nous ne desservons que du PHP, nous pouvons désactiver le keepalive KeepAlive Off #Port 8070 sera destiné au virtualhost pour site1.com Listen 127.0.0.1:8070 #Port 8080 sera destiné au virtualhost pour site2.net Listen 127.0.0.1:8080 DocumentRoot “/home/htdocs” NameVirtualHost 127.0.0.1:8070 NameVirtualHost 127.0.0.1:8080 <VirtualHost 127.0.0.1:8070> DocumentRoot /home/htdocs/site1.com ServerName www.site1.com </VirtualHost> <VirtualHost 127.0.0.1:8080> DocumentRoot /home/htdocs/site2.net ServerName www.site2.net </VirtualHost>

Vous remarquer ici qu’apache n’écoute que sur l’interface locale. En effet nous allons nous servir de Lighttpd comme serveur frontal et utiliser son module mod_proxy pour forwarder les requetes de contenu dynamique vers Apache selon le port qui définira de quel site il s’agit

5. Lighttpd 1.4.18

  • Prérequis : PCRE

On va avoir besoin du support du module pcre dans lighttpd pour écrire entre autres nos règles de proxy. Il nous faut l’installer avant d’effectuer la compilation de lighty sinon ca ne marchera pas

Code:
root@ns10000:/home/compilation# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.4.tar.gz root@ns10000:/home/compilation# tar xvf pcre-7.4.tar.gz root@ns10000:/home/compilation# cd pcre-7.4/ root@ns10000:/home/compilation/pcre-7.4/# .configure –help #Choisissez vos options spécifiques ou simplement ./configure root@ns10000:/home/compilation/pcre-7.4/# make && make install
  • Lighttpd

C’est toujours à vous de chosir quoi compiler. Ce sont des exemples pour une utilisation spécifique qui ne vous coniendra pas forcément

Code:
root@ns10000:/home/compilation# wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.gz root@ns10000:/home/compilation# tar xvf lighttpd-1.4.18.tar.gz root@ns10000:/home/compilation# cd lighttpd-1.4.18 root@ns10000:/home/compilation/lighttpd-1.4.18# ./configure –disable-ipv6 –with-bzip2 –with-pcre

–with-bzip2 : Pour pouvoir utilser le module de compression mod_compress (l’équivalent de mod_deflate sous Apache)

Finalement :

Code:
root@ns10000:/home/compilation/lighttpd-1.4.18# make && make install
  • Configuration rapide de Lighttpd

User sous lequel va tourner Lighttpd

Code:
root@ns10000:/home# useradd lighttpd -g nogroup -s /bin/false root@ns10000:/home# usermod -L lighttpd #lock le compte

Fichier de log

Code:
root@ns10000:/home# cd /var/log/ root@ns10000:/var/log# mkdir lighttpd root@ns10000:/var/log# touch error.log root@ns10000:/var/log# chown lighttpd lighttpd/ root@ns10000:/var/log# chmod 744 lighttpd/

Configuration

Code:
nano /etc/lighttpd.conf

Suite

Code:
#On active les modules que l’on souhaite server.modules = ( “mod_rewrite”, “mod_redirect”, “mod_access”, “mod_status”, “mod_simple_vhost”, “mod_proxy”, “mod_compress”, “mod_expire” ) #Paramètres primaires server.document-root = “/home/htdocs” server.username = “lighttpd” server.groupname = “nogroup” #Mod_compress : mise en place d’un cache de compression sur certain type mime pour éviter de compresser à chaque fois compress.filetype = (”text/html”, “text/plain”, “text/css”, “text/javascript”, “text/xml”) #N’oubliez pas de créer le répertoire et lui donner les bons droits (idem que pour le fichier et répertoire de log) compress.cache-dir = “/home/lighttpd_cache/” #Ce qu’on a fait en haut server.errorlog = “/var/log/lighttpd/error.log” #Trés important, n’envoyez pas vos fichiers php non interprété ! Lighttpd ne dessert ici que le statique et reconnait les fichiers php qu’en tant que texte. static-file.exclude-extensions = ( “.php”, “.inc”, “htaccess”, “htpasswd” ) #Frontal server.port = 80 # #Quelques règles d’exemples # #redirection vers le www $HTTP["host"] =~ “^site1\.com” { url.redirect = (”(.*)” => “http://www.site1.com$1″) } $HTTP["host"] =~ “^site2\.net” { url.redirect = (”(.*)” => “http://www.site2.net$1″) } $HTTP["host"] == “www.site1.com” { server.document-root = “/home/htdocs/site1.com/” #Nous laissons Apache desservir les fichiers index.* Cf. post 8 de dam23 et post 9 $HTTP["url"] == “/” { proxy.server = ( “” => ( ( “host” => “127.0.0.1″, “port” => 8070 ) ) ) } #Forward du contenu dynamique (fichiers php) vers apache proxy.server = ( “.php” => ( ( “host” => “127.0.0.1″, “port” => 8070 ) ) ) } $HTTP["host"] == “www.site2.net” { server.document-root = “/home/htdocs/site2.net/” #Nous laissons Apache desservir les fichiers index.* Cf. post 8 de dam23 et post 9 $HTTP["url"] == “/” { proxy.server = ( “” => ( ( “host” => “127.0.0.1″, “port” => 8080 ) ) ) } proxy.server = ( “.php” => ( ( “host” => “127.0.0.1″, “port” => 8080 ) ) ) }
  • Démarrage de Lighttpd

On lance Lighttpd depuis root. Lighttpd se chargera ensuite de dropper ses privilèges pour obtenir ceux du user “lighttpd” spécifié.

Code:
root@ns10000:~# /usr/local/sbin/lighttpd -f /etc/lighttpd.conf root@ns10000:~# ps aux | grep light lighttpd 17972 0.0 0.1 4464 3172 ? S Dec10 0:35 /usr/local/sbin/lighttpd -f /etc/lighttpd.conf

On consulte les éventuelles erreurs de démarrage grâce au fichier de log :

Code:
root@ns10000:~# tail /var/log/lighttpd/error.log

Normalement tout devrait être OK

Mysql

Nous installons MySQL avant PHP car nous avons besoin du package MySQL-devel lors de la compilation de PHP. Autant tout installer en même temps.

Nous allons installer MySQL (Server + Client + devel) à partir des packages RPM fourni par MySQL. J’updaterai ce message pour ajouter une version “compilation du serveur” (à la place d’une installation par package RPM du serveur) et ferai un bench pour comparer ces deux approches d’installation.

Je vous invite à consulter ce lien pour savoir comment sont compilés ces packages RPM :

http://dev.mysql.com/doc/refman/5.0/…-binaries.html

http://dev.mysql.com/doc/refman/5.0/…k-options.html

  • Installation de RPM

Nous installons tout d’abord avec slackpkg le gestionnaire RPM pour slackware :

Code:
slackpkg install rpm
  • Récupération des RPM (merci OVH )
Code:
root@ns10000:/home/compilation# wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-server-5.0.45-0.i386.rpm/from/http://mir2.ovh.net/ftp.mysql.com/ root@ns10000:/home/compilation# wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-client-5.0.45-0.i386.rpm/from/http://mir2.ovh.net/ftp.mysql.com/ root@ns10000:/home/compilation# wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-devel-5.0.45-0.i386.rpm/from/http://mirrors.ircam.fr/pub/mysql/ root@ns10000:/home/compilation# wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-shared-5.0.45-0.i386.rpm/from/http://mirrors.ircam.fr/pub/mysql/
  • Installation des RPM

Sous Slackware il faut forcer l’installation et bypasser le contrôle des dépendances pour installer correctement un RPM

Code:
root@ns10000:/home/compilation# rpm -Uvh –nodeps –force MySQL-server-5.0.45-0.i386.rpm root@ns10000:/home/compilation# rpm -Uvh –nodeps –force MySQL-client-5.0.45-0.i386.rpm root@ns10000:/home/compilation# rpm -Uvh –nodeps –force MySQL-devel-5.0.45-0.i386.rpm root@ns10000:/home/compilation# rpm -Uvh –nodeps –force MySQL-shared-5.0.45-0.i386.rpm

Nous allons effectuer les différentes actions afficher lors de l’installation des RPM

  • User et group mysql

On supprime d’éventuel user/group existant, on met les bon droit sur le répertoire ou sera stocké notre socket (si vous utilisez le socket .sock de mysql bien sûr)

Code:
root@ns10000:~# userdel mysql root@ns10000:~# groupdel mysql root@ns10000:~# groupadd mysql root@ns10000:~# useradd -g mysql mysql root@ns10000:~# usermod -d /var/lib/mysql -s /bin/false mysql root@ns10000:~# cd /var/lib root@ns10000:/var/lib# chown -R mysql:mysql /var/lib/mysql

Nous allons placer le répertoire data de MySQL sur /home (qui dispose chez OVH par défaut de 90% de l’espace disque)

Code:
root@ns10000:~# mkdir /home/mysql root@ns10000:~# chown mysql:mysql /home/mysql

On configure ensuite my.cnf selon ce que l’on vient d’effectuer. (toutes les options ne sont pas affichées, seulement celles à créer ou modifier)

Code:
nano /etc/my.cnf
Code:
[client] socket = /var/lib/mysql/mysql.sock [mysqld] long_query_time = 2 datadir= /home/mysql log-warnings=2 log-error=/home/mysql/mysql.log socket = /var/lib/mysql/mysql.sock

On installe les tables par défaut de MySQL

Code:
#sh /usr/bin/mysql_install_db

On place un mot de passe root avec mysqladmin

Code:
#mysqladmin -u root password ‘motdepasse’

Vous trouverez dans /usr/share/mysql/ le script mysql.server que vous pouvez placer dans /etc/rc.d

Et au final vous pouvez lancer MySQL (ligne de commande en exemple !)

Code:
root@ns10000:/etc/rc.d# sh /etc/rc.d/mysql.server start –skip-innodb –skip-bdb –log-warnings=2 & root@ns10000:/etc/rc.d# Starting MySQL SUCCESS!

C’est tellement bien quand ça marche directement

PHP 5.2.5

  • Prérequis (selon vos besoins) : Libxml, Libpng, Libcurl, Libjpeg
Code:
root@ns10000:~# slackpkg install libxml root@ns10000:~# slackpkg install libxml2 root@ns10000:~# slackpkg install libpng

Si la compilation vous manque et que vous voulez les dernières versions de libcurl et libjpeg (non à jour sur les dépots 10.2) :

Code:
root@ns10000:/home/compilation# wget http://curl.haxx.se/download/curl-7.17.1.tar.gz && cd curl-7.17.1 && ./configure && make && make install root@ns10000:/home/compilation# wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz && jpegsrc.v6b && ./configure –enable-static –enable-shared –prefix=/usr && make && make install
  • Compilation de PHP

Toujours en exemple, ne compiler que ce dont vous avez besoin !

Code:
root@ns10000:/home/compilation# wget http://fr3.php.net/get/php-5.2.5.tar.gz/from/fr.php.net/mirror root@ns10000:/home/compilation# tar xvf php-5.2.5.tar.gz && cd php-5.2.5 root@ns10000:/home/compilation/php-5.2.5# ./configure –prefix=/usr/local/php5 –with-apxs2=/usr/local/apache2/bin/apxs –with-mysql=/usr/lib/mysql –with-libxml-dir=/usr/local/lib –with-gd –with-curl –with-zlib-dir –with-png-dir –with-jpeg-dir –without-sqlite –enable-ftp –enable-zip –enable-sockets –enable-exif –enable-mbstring –disable-ipv6 –disable-cgi –disable-short-tags root@ns10000:/home/compilation/php-5.2.5# make && make test

Une fois les tests effectués on peut installer et suivre scrupulesement les indications d’installation (si la modification de httpd.conf a réussie etc …):

Code:
root@ns10000:/home/compilation/php-5.2.5# make install

L’installeur de PHP a normalement été à même de détecter et d’ajouter à la configuration Apache le nécessaire à l’interprétation des fichiers PHP. Vous devez disposez maintenant des lignes suivantes dans /usr/local/apache2/conf/httpd.conf

Code:
LoadModule php5_module modules/libphp5.so #apache ne sert pas de statique, mais nous l’utilisons pour desservir les fichiers index DirectoryIndex index.html index.php AddType application/x-httpd-php .php

Note : Cf. post #8 et #9 : Pour récuperer l’adresse IP du client dans les scripts PHP, il ne faut pas utiliser la variable $_SERVER['REMOTE_ADDR'] mais $_SERVER['HTTP_X_FORWARDED_FOR'] car $_SERVER['REMOTE_ADDR'] aura pour valeur 127.0.0.1 étant donné que la requête traité par Apache (et donc par le script) provient de Lighttpd.
Vous pouvez ensuite configurer votre php.ini puis installer ZendOptimizer par exemple

Suite

  • Démarrage d’Apache

Vous devez lancer Apache en root, il droppera lui même les privilèges root pour garder ceux du user “httpd”

Code:
root@ns10000:~# cd /usr/local/apache2/bin root@ns10000:/usr/local/apache2/bin# ./apachectl start root@ns10000:/usr/local/apache2/bin#

Ensuite consulter les éventuelles erreurs de démarrage dans le fichier de log :

Code:
root@ns10000:/usr/local/apache2/bin# cd ../logs root@ns10000:/usr/local/apache2/bin# tail error_log [Mon Dec 31 14:24:54 2007] [notice] Apache configured — resuming normal operations

Normalement tout devrait être OK.

proFTPD

Je vous propose d’installer proFTPD, d’y créer un superadmin “ftp_admin” ayant tout pouvoir sur tout htdocs/, un admin “ftp_admin_site1″ qui aura tout pouvoir sur htdocs/site1.com, et de paramétrer les autorisations d’accès

  • Installation
Code:
root@ns10000:~# cd /home/compilation/ root@ns10000:/home/compilation# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.1.tar.gz root@ns10000:/home/compilation# tar xvf proftpd-1.3.1.tar.gz root@ns10000:/home/compilation# cd proftpd-1.3.1 root@ns10000:/home/compilation# ./configure –help #faites vos choix de compilation ou configurer directement pour les choix par défaut root@ns10000:/home/compilation# make && make install
  • Préparation avant configuration

ProFTPd nécessite un shell valide pour que les utilisateurs puissent se connecter. Un shell “est valide” si il figure dans le fichier /etc/shells

Code:
root@ns10000:~#cat /etc/shells /bin/bash root@ns10000:~#

Nos utilisateurs “ftp_admin” et “ftp_admin_site1″ auront pour shell /bin/false, il faut donc rajouter ce shell :

Code:
root@ns10000:~# echo “/bin/false” >>/etc/shells

Sinon nous aurions eu l’erreur suivante lors du login :

Code:
227.w86-198.abo.wanadoo.fr[86.198.198.198]): USER ftp_admin (Login failed): Invalid shell: ‘/bin/false’
  • Création des users
Code:
root@ns10000:~# groupadd ftpusers root@ns10000:~# useradd -s /bin/false -d /home/htdocs/ -g ftpusers ftp_admin root@ns10000:~# passwd ftp_admin root@ns10000:~# useradd -s /bin/false -d /home/htdocs/site1.com -g ftpusers ftp_admin_site1 root@ns10000:~# passwd ftp_admin_site1

Attention ! un shell sur /bin/false empeche le login via SSH, mais n’empeche pas d’utiliser des outils non shell : authentification, portforwarding etc …

Donc on rajoute explicitement dans notre fichier sshd_config :

Code:
nano /etc/ssh/sshd_config
Code:
DenyUsers ftp_admin, ftp_admin_site1
  • Le fichier /etc/ftpusers

Ce fichier contient la liste des utilisateurs étant banni de login via FTP.

Par défaut on ajoute tout le monde présent sur le système (via les logins présents dans /etc/passwd), on rajoute aussi anonymous, mais on enlève ftp_admin et ftp_admin_site1

Code:
root@ns10000:~# cat /etc/passwd | cut -f1 -d: > /etc/ftpusers root@ns10000:~# echo anonymous >> /etc/ftpusers root@ns10000:~# nano /etc/ftpusers #Enlever les users FTP root@ns10000:~# cat /etc/ftpusers root bin daemon adm lp sync shutdown halt mail news uucp operator games smmsp rpc sshd gdm pop nobody anonymous … etc
  • Configuration rapide

Extrait de configuration à modifier/ajouter

Code:
root@ns10000:~# nano /etc/proftpd.conf
Citation:
ServerName “ns1000-FTP”

ServerType standalone

DefaultServer on

# Set the user and group under which the server will run.

User nobody

Group nogroup

SystemLog /var/log/proftpd.log

#To cause every FTP user to be “jailed” (chrooted) into their home

DefaultRoot ~

# Autoriser l’usage de /etc/ftpusers

UseFtpUsers on

# Bar use of SITE CHMOD by default

<Limit SITE_CHMOD>

DenyAll

</Limit>

# Configuration des users

<Directory /home/htdocs>

<Limit WRITE>

AllowUser ftp_admin

DenyAll

</Limit>

<Limit READ>

AllowUser ftp_admin

DenyAll

</Limit>

</Directory>

<Directory /home/htdocs/site1.com>

<Limit WRITE>

AllowUser ftp_admin

AllowUser ftp_admin_site1

DenyAll

</Limit>

<Limit READ>

AllowUser ftp_admin

AllowUser ftp_admin_site1

DenyAll

</Limit>

</Directory>

  • Les pemissions sur /home/htdocs

Bien sur cela dépend de votre installation et de vos besoins ! Ceci n’est qu’à titre indicatif !

Qui est le propriétaire ? ftp_admin : rwX (x que sur les dossiers et non les fichiers)

Qui est le groupe ? ftpusers : rwX

Que doit pouvoir faire Lighttpd/Apache : Lire (écrire pour certain script PHP ?) : rX

Code:
root@ns10000:/home/htdocs# chown -R ftp_admin:ftpusers * root@ns10000:/home/htdocs# chmod -R u=rwX,g=rwX,o=r-X *

A vous de spécifier les droits précis sur les répertoires qui doivent être accessible en écriture par Apache

Mars 2008 – Nexen.net: Freedom 2.10

Image pour le titre du contenu
Freedom signifie "FREE DOcument Management" est un systême de gestion de documents d'entreprise réalisé en PHP avec une base de donnée POstGreSQL.
Il permet la structuration de tout type d'information et une création rapide d'application collaborative par simple définition du modèle de donnée.
Les possibilités sont nombreuses par exemple :
- Comme une GED structuré / ECM de manière native
- Comme un ERP par définition de familles de documents "métier"
- Comme un CRM par définition de familles de documents "métier"
- Comme un HelpDesk par définition de familles de documents "métier"
- Comme Agenda PArtagé
- Comme une GED Fichier

Mars 2008 – PHP Québec: 6/5 19:00 PHP Quebec - Montreal

L'équipe de PHP Quebec de Montréal vous invite aux rencontres mensuelles qui ont lieu tout les premiers Jeudi du mois dans les locaux de l'ETS.

Marc St-Gelais, du RÉSEAU de la coopération du travail du Québec, accompagné de l'équipe de Kaki Design Communication Marketing, présenteront la coopérative de travail, un modèle dynamique d'entreprise qui met en premier plan la gestion démocratique et la création d'emplois de qualité.

En deuxième partie, David Avenante introduira certaines stratégies de test d’application PHP, dont les tests d’interfaces PHP à l’aide de l’outil Selenium. Cette présentation n'a pas pu avoir lieu lors de la rencontre précédente.

Vous aimeriez faire une presentation ou vous avez un sujet a proposer pour cette rencontre, veuillez contacter les organisateurs board@phpquebec.com

Confirmez votre présence sur :
FaceBook: http://www.facebook.com/event.php?eid=12039964377
Upcoming : http://upcoming.yahoo.com/event/466424/

Date : 5 Juin 2008
Heure : 19h00
Lieu : École de technologie supérieure
Salle : B4416
Metro: Bonaventure
Carte : http://www.etsmtl.ca/zone2/enbref/rendre.html
Ville : Montreal

Mars 2008 – PHP Québec: 4/3 19:00 PHP Quebec Montreal

L'équipe de PHP Quebec de Montréal vous invite aux rencontres mensuelles qui ont lieu tout les premiers Jeudi du mois dans les locaux de l'ETS.

En première partie, Anna Filia nous introduira à FLEX.
Louis-Philippe Huberdeau poursuivra avec ça présentation 'Grandir l'équipe avec le contrôle de révision'

Vous aimeriez faire une présentation ou vous avez un sujet a proposer pour cette rencontre, veuillez contacter les organisateurs board@phpquebec.com

Des prix de présence seront distribués.

Confirmé votre présence sur
facebook :http://www.facebook.com/event.php?eid=10193402426
upcoming : http://upcoming.yahoo.com/event/466423/

Date : 3 Avril 2008
Heure : 19h00
Lieu : École de technologie supérieure
Salle : B3420
Metro: Bonaventure
Carte : http://www.etsmtl.ca/zone2/enbref/rendre.html
Ville : Montreal

Événement avenir :

3 Avril
Introduction à FLEX
Grandir l'équipe avec le contrôle de révision

1 Mai
Introduction à la conception de test unitaire


16-18 Mai
CodeFest PHP Québec 2.1
http://www.codefest.ws


Au plaisir de vous-y voir.

Mars 2008 – PHP Québec: 5/1 19:00 PHP Quebec Montreal

L'équipe de PHP Québec de Montréal vous invite aux rencontres mensuelles qui ont lieu tout les premiers Jeudi du mois dans les locaux de l'ETS.

En première partie, Sylvain Racine nous introduira à la génération d’image vectoriel ainsi qu’aux diverses composantes du format SVG. Plusieurs cas d’utilisations en milieu professionnel seront à l’appui.

En deuxième partie, David Avenante introduira certaines stratégies de test d’application PHP, dont les tests d’interfaces PHP à l’aide de l’outil Selenium.

Vous aimeriez faire une présentation ou vous avez un sujet a proposer pour une rencontre, veuillez contacter les organisateurs board@phpquebec.com

Confirmez votre présence sur
facebook : http://www.facebook.com/event.php?eid=9716129398
Upcoming : http://upcoming.yahoo.com/event/525612/

Date : 1 Mai 2008
Heure : 19h00
Lieu : École de technologie supérieure
Salle : B4416
Metro: Bonaventure
Carte : http://www.etsmtl.ca/zone2/enbref/rendre.html
Ville : Montréal

Prochaines rencontres :
17-18 Mai : CodeFest PHP Québec 2.1
http://www.codefest.ws

5 Juin : PHP Québec Montréal
http://tinyurl.com/5juos6

1 Août : PHPBeer Montréal

2 Août : Barbecue PHP Québec
http://tinyurl.com/5x82o9


===========================

The PHP Quebec team invites you to it’s monthly meetings held every first Thursday at L’École de technologies superieure.

Sylvain Racine will show us how to generate scalable vector images and the various SVG components with PHP.

David Avante, will follow up with a presentation on how to test PHP applications and explain multiple techniques such as UI testing with Selenium.

You would like to propose a talk or would like to hear more about a specific topic? Send an email to board@phpquebec.com

Confirm your presence on :
facebook : http://www.facebook.com/event.php?eid=9716129398
Upcoming : http://upcoming.yahoo.com/event/525612/
Date : 1 Mai 2008
Time : 7 :00pm
Location : École de technologie supérieure
Room : B4416
Metro: Bonaventure
Map : http://www.etsmtl.ca/zone2/enbref/rendre.html
City : Montréal

Upcoming events :
Mai 17th-18 : CodeFest PHP Québec 2.1
http://www.codefest.ws

Juin 5th : PHP Québec Montréal
http://tinyurl.com/5juos6

August 1st : PHPBeer Montréal

August 2nd : Barbecue PHP Québec
http://tinyurl.com/5x82o9

Mars 2008 – Nexen.net: PHP en vidéo

Image pour le titre du contenu
Lors du précédent Salon "solution Linux 2008", 2 reportages ont été réalisés par l'intermédiaire de Guillaume Ponçon pour la communauté PHP concernant les thèmes suivants :
- PHP expliqué par les utilisateurs
- Témoignage des utilisateurs de PHP
Deux très bonnes réalisations pouvant vous servir de références dans vos futurs discutions

Mars 2008 – PHPortail: Menus de navigation : tendances du moment (31/03/08)

Smashing magazine propose aujourd'hui les différentes tendances de menus de navigation : au programme, les blocs parlants, les menus styles Mac, les menus à icônes, les menus verticaux, les...

Mars 2008 – PHPortail: PhpUnderControl (31/03/08)

phpUnderControl est une application compagnon de l'outil d'intégration continue: CruiseControl. Ce projet a pour objectif de faire avec vous les premiers pas avec CruiseControl et PHP et de les...

Mars 2008 – PHPortail: Sécurité: Le danger des javascript distants. (31/03/08)

Nat Torkington présente un problème de sécurité rencontré par Perl.com : ces derniers affichaient une publicité via un annonceur et un code javascript distant. Rien d'original jusque-là,...

Mars 2008 – PHPortail: L'art d'une page d'inscription (31/03/08)

Il n'est pas sans dire que la page d'inscription est la seconde page la plus importante sur un site (après la page d'accueil, bien sûr), car c'est le vrai début de l'implication de à vos...

Mars 2008 – PHPortail: Freedom: une solution de gestion de documents d'entreprise (31/03/08)

Freedom (pour FREE DOcument Management) est un systême de gestion de documents d'entreprise (Enterprise Content Management) développé en PHP sur une base de données PostGreSQL, permettant la...

Mars 2008 – PHPortail: Sécurité: Vulnérabilités Web intéressantes (31/03/08)

Une présentation consacrée à la sécurité Web, avec une collection de situations un peu moins fréquentes, mais qui conduit à des vulnérabilités importantes ou difficiles à repérer.

Il y...

Mars 2008 – Nexen.net: Lire et écrire des feuilles excel en PHP

Image pour le titre du contenu
"Quand vient le temps de jongler avec des douzaines de formats, PHP est très difficile à battre. Non seulement PHP permet de gérer facilement des résultats SQL ou des fichiers XML, mais il est aussi capable de produire des formats aussi différents que Ogg/Vorbis, ZIP et EXIF. Il n'est donc pas surprenant de découvrir que PHP peut gérer des feuilles excel, avec l'aide de PEAR."

Mars 2008 – Nexen.net: Chatting with Rasmus : partie 1, doctrine.

Image pour le titre du contenu
"Récemment, un développeur a atterri sur #php.pecl avec des questions sur XDebug avec Doctrine. Il s'ensuivit une série de discours enflammés sur les avantages et inconvénients des grandes bibliothèques, des entêtes HTTP et de la directive maxClient de Apache. J'ai demandé à Rasmus la permission de conserver le log de discussion, et de le publier. Dans cette première partie, je vous présente les commentaires de Rasmus sur Doctrine."

Mars 2008 – Nexen.net: Chatting with Rasmus : partie 1, doctrine.

Image pour le titre du contenu
"Récemment, un développeur a atterri sur #php.pecl avec des questions sur XDebug avec Doctrine. Il s'ensuivit une série de discours enflammés sur les avantages et inconvénients des grandes bibliothèques, des entêtes HTTP et de la directive maxClient de Apache. J'ai demandé à Rasmus la permission de conserver le log de discussion, et de le publier. Dans cette première partie, je vous présente les commentaires de Rasmus sur Doctrine."

Mars 2008 – Nexen.net: Multithreading avec PHP et CURL

Image pour le titre du contenu
"Hormis utiliser curl pour obtenir des pages web sur d'autres sites, il est aussi possible d'utiliser cURL pour multithreader PHP. PHP n'a pas de support natif pour le multi-tâche, comme en Java. Chaque requête PHP est un processus différent. Il y a des outils alternatifs, comme pcntl_fork, ou lancer plusieurs processus de ligne de commande via exec, ou encore se reposer sur le navigateur et Ajax. Une autre solution est d'utiliser la bibliothèque cURL."