On voit de plus plus de règles particulières pour sécuriser un code. Des bons conseils ou bonnes pratiques mais qui demandent un travail énorme.
Il y a 2 ans, Claroline commençait à être la cible de pirates. Il fallait faire quelque chose.
Bien sûr tout changer d'un coup allait prendre du temps. Plus un code est chaotique plus la tâche est ardue.
Voilà quelques recettes pour retravailler le code.
Tâche 1 : register_global à off
Premier boulot de fou.
Si le code à été écrit pour un register_global ON il faut fouiller le code pour trouver les variables utilisées "en espérant" qu'elles ont été initialisées par register_global.
On va les traquer et les remplacer par des $_REQUEST.
Pourquoi $_REQUEST ? il y a $_POST, $_GET, $_COOKIES ...
dans tout les cas ces valeurs sont suspectes autant utiliser $_REQUEST qui vous donnera celle qui gagne selon les règles de priorité que vous aviez pour le register global.
Note : Tout le monde n'est pas de cet avis. L'argument des autres est qu'il faut aussi maîtriser d'où vient l'information. Pour moi elle ne vient que d'un endroit, un endroit douteux.
Un truc pourri c'est d'utiliser un extract de $GLOBALS mais ce qui n'est que contourner le problème.
Pire c'est masquer le problème.
Une solution pour travailler en transition c'est de mettre le serveur en register global à off et à la racine un .htaccess qui dit register global à on.
là on a rien corrigé.
mais on peut commencer et progressivement modifier le htaccès pour faire porter le global ON au de moins en moins de script jusqu'a en avoir fini avec lui.
4 paquets ont été mis à jour cette semaine :
: Génération d'images CAPTCHA
: Création et utilisation d'archives PHP
: Element HTML_Quickform pour générer des suggestions de recherche
: Arbre d'appel d'une fonction PHP
PEAR est la bibliothèque de composants PHP.
Le bulletin d'informations en Podcast de ProPHP propose
les actualités discutées :
Php|works
PHP 5.2.4RC1 Released
PHP emploie maintenant des messages de statut de HTTP
Vulnérabilités de Joomla
Vulnérabilités de Drupal
Mambo 5 utilise CakePHP
InfoCard (stockage des images dans une base de données)
MySQL Phrasebook
MySQL nd
Merci spéciaux à Terry Chay de participer involontairement au podcast de cette semaine
Avant de choisir votre hôte d'hébergement PHP, vous pouvez consulter la liste de 12 questions de Stoyan Stevanof. Il y rassemble différentes questions techniques qui dépassent les simples considérations classiques comme la taille de l'hébergement ou sa connectivité.
Cette série d'article en deux partie est conçue pour mettre à niveau les développeurs PHP avec les XForms et le Web 2.0 afin qu'ils se débarassent enfin des formulaires Web 1.0 obsolètes. Nous allons réussir cela en créant une bibliothèque de fonctions qui produisent les éléments XForms. Dans ce premier article, nous allons créer une bibliothèque de création des formulaires XForms.
"Comment améliorer la performance, la montée en charge et la disponibilité dune architecture Web 2.0 avec MySQL et MySQL Cluster.
Le Web 2.0 représente la seconde génération de services disponibles sur le web permettant aux utilisateurs de collaborer et de partager des informations en ligne. Une des caractéristiques du Web 2.0 est que ce sont les données qui conduisent son évolution. Durant ce séminaire web nous explorerons comment les sociétés déploient des architectures et applications Web 2.0 pilotées par MySQL et MySQL Cluster. Ces applications incluent :
Blogging
Optimisation de moteurs de recherche
Partage de données multimédia (photos, vidéos, musique)
Communautés en ligne
Gestion de documents (wikis)
Nous étudierons également comment gérer :
La montée en charge
La disponibilité
Le coût
La gestion des sessions
La création et gestion de contenu dynamique
QUI:
Serge Frezefond, Consultant, MySQL France
QUAND: Mercredi 12 Septembre 2007: 10h00 CET (heure de Paris)
Présentation de 45 minutes suivie par questions/réponses
Pour comprendre comment améliorer la performance, la montée en charge et la disponibilité dune architecture Web 2.0 avec MySQL et MySQL Cluster.
Cet article montre comment construire un lecteur RSS basé sur le réseau social Facebook, qui affichera votre fil de dépêches sur les pages des utilisateurs Facebook (ce qui ont installé le lecteur, en tous cas). Chaque billet aura un bouton de partage 'Share' pour que les utilisateurs puisse le partager avec des amis, et un bouton d'invitation 'Invite', pour inviter les mêmes amis à installer le même lecteur de dépêches. Je vais utiliser PHP 5 pour construire ce lecteur. Pour analyser le fichier RSS et produire le code HTML, je vais utiliser Magpie RSS.
Depuis bientôt un an déjà, le forum Orion fait ses premiers pas, doucement , gentillement mais surement.
Outre que le concept est déjà bien connu, cette compilation basée sur un forum de type phpBB 2.0.22 est livrée avec une quantité de mods non négligeable et d'excellente qualité.
Produit et livré par www.Cback.de, le forum Orion ne renie pas ses origines allemandes, signe de très bonne qualité comme nous pouvons le constater dans la plupart des cas.
D'une sécurité exemplaire, Orion vous en ferait même oublier que dessous se cache un phpBB ( et c'est vrai ), beaucoup d'ajax en simplifie la gestion et l'approche, ainsi que des utilitaires réellement indispensables.
Le tout fait de ce phpBB prémodé une référence actuelle en matière de forum phpbb compilé de la sorte.
Ce jour est livré la version 2.4.3 française comprenant de nouveaux additifs de sécurité ainsi que des correctifs dits de maintenance.
Si vous hésitiez encore pour votre projet, et/ou futur projet, sachez qu'Orion est à forum à prendre en compte dans votre choix.
Nécessite le couple PHP/MySQL pour fonctionner !
Nota: le forum Orion est basé essentiellement sur la sécurité et la facilité de gestion d'un site internet, regroupant portail, téléchargement, faq, base de connaissance, calendrier, galerie ...
Support et renseignements sur www.phpbb-premod.com
"Technologie - Distinguant contenu et contenant, les outils de gestion web facilitent la création et la mise à jour de sites. Dans ce domaine, les logiciels libres - en PHP ou Java - ont acquis une réputation solide et rivalisent avec les produits commerciaux."
"Entre PHP et Java, les critères de choix sont politiques, technologiques et fonctionnels. Côté PHP, pratiquement tous les outils relèvent du logiciel libre. « Plus faciles à déployer et à maîtriser, ils ont la préférence des PME », affirme Patrice Bertrand, directeur des opérations chez Smile. "
Une requête simple, une colonne indexée, une table bien à jour : pourtant , MySQL refuse d'utiliser l'index qui lui est offert, et se lance dans un scan de table complet, pendant une heure et demi. Quelle estimation a-t-il fait de la réalité pour contre-carrer les plans établis? Et surtout, comment résoudre ce dilemme? Simplement, en sachant comment fonctionne MySQL.
MySQL 6.0.2, la dernière version de développement du système de base de données Open Source, a été publiée. C'est une version alpha : elle permet de tester les nouvelles fonctionnalités, notamment le moteur Falcon, mais il est recommandé de sauver ses données avant de changer de version, et d'éviter d'utiliser cette version en production.
Nouveauté de la version 6.0.2 :
Support de Mac OS X Intel (mais pas de binaires encore)
Support de Windows 64 bits
Support des espaces de tables
Ajout de paramètres : falcon_log_windows, falcon_index_chill_threshold, falcon_record_chill_threshold, falcon_initial_allocation et falcon_disable_fsync.
Retraits de paramètres : falcon_max_record_memory et falcon_min_record_memory
32 bogues corrigés en MySQL 6.0.2, tous portants sur le nouveau moteur Falcon.
Seuls Windows et Linux sont des plates-formes supportées à cette heure. Mac OSX est compilable sur Intel, mais n'est pas encore une plate-forme supportée.
L'équipe de PHP Québec est fier de s'associer avec High-Touch Communications afin de vous présenter le codeFest PHP Québec 2007.
Le CodeFest PHP Québec: À pour objectif principal est de faire participer les membres de la communauté PHP Québécoise au développement d'applications OpenSource, afin de démontrer le dynamisme de la communauté au Québec. Lors de cette première éditions, nous intégrerons le support OpenID.
OpenID : Est un système d'authentification décentralisé qui permet l'authentification unique, ainsi que le partage dattributs. Il permet à un utilisateur de sauthentifier auprès de plusieurs sites sans avoir à retenir un identifiant pour chacun deux mais en utilisant à chaque fois un unique identifiant OpenID. Le modèle OpenID se base sur des liens de confiance préalablement établis entre les fournisseurs de services (sites web utilisant OpenID par exemple) et les fournisseurs didentité (OpenID providers). Source : Wikipedia http://fr.wikipedia.org/wiki/OpenID
Les Projets: BeWelcome: lead Morgan Tucker Habari: lead Andrew da Silva TikiWiki: lead Marc Laporte WifiDog: Evan Prodromou Xoops : Lead Marc André Lanciault
Logis: Nous invitons les gens de l'extérieur qui non pas d'endroit où rester pour la fin de semaine à visitez le site bewelcome.org Avec ce site vous trouverez sans doute quelque personne qui vous laisseront faire du couch surfing à Montréal.
Lieu: Le codeFest ce déroulera sur la terrasse du Pub 100 génie.
Horraire et Activité Connexes: 6 Septembre: Rencontre Mensuel PHP Québec: En première parti, nous aurons une séance de questions réponses sur le développement web avec PHP. Apportez vos laptop et vos questions.
Nous poursuivrons avec une table ronde, afin d'identifier les solutions aux problèmes que nous risquons de rencontrer lors de l'intégration du support OpenID
Nous terminerons la soirée au 3 brasseurs sur St-Denis
Contact: Vous faites partis de l'équipe de développement d'un outils qui bénéficierais du support OpenID? Vous aimeriez participer au développement de l'un des projet mentionner si haut? Contactez nous par email board@phpquebec.com sur irc irc.freenode.net #codefest
Ceci est une bonne occasion pour venir découvrir Montréal! Au plaisir de vous-y voir.
Durant le mois d'août 2007, PHP 4 est entré en phase de déclin, avec une première croissance négative sur le marché PHP. Après avoir accusé un ralentissement depuis le début de l'année, voire même quelques pauses dans sa progression, PHP 4.4 lache du terrain au profit de PHP 5.2. Toutes les versions confondues de PHP 5 représentent maintenant 22% du total, avec une croissance record en août de 1,5 %.
Août 2007 a confirmé la tradition de compilation de PHP : comme l'an dernier, c'est le mois le plus utilisé pour changer les serveurs de versions.
L'impact du projet GoPHP5, et l'annonce officielle de l'abandon de PHP 4 commencent à porter leur fruits.
La version alpha de MySQL 6.0.0 est disponible au téléchargement.
Cette version de MySQL, anciennement connue sous le nom de MySQL 5.2, apporte une unique nouveauté par rapport à la version 5.1 mais celle-ci n'est pas des moindre: il s'agit de l'intégration du nouveau moteur Falcon. En effet ce moteur transactionnel, qui vient rejoindre les classiques MyISAM et InnoDB sans les remplacer, devrait être plus performant sur les architectures matérielles récentes (64 bits), supporter les transaction ACID, et offrir un système de récupération des données en cas de crash.
Pour en savoir plus sur le moteur Falcon, je vous invite à visiter la FAQ correspondante sur le site de MySQL.
Rappelons tout de même qu'il s'agit là d'une version alpha, qui ne doit être utilisée que pour expérimenter le nouveau moteur de stockage Falcon.
La nouvelle version stable de ce système de publipostage en PHP est disponible depuis lundi.
Cette release n'apporte pas de réelle nouveauté, mais corrige près d'une trentaine de bogues de la version précédente.
Consultez le changelog pour plus d'information sur les corrections apportées.
Le site Refreshinglyblue, propose une petite étude comparative de ces deux langages.
Si l'auteur commence par résumer les points communs entre PHP et Ruby, c'est pour mieux insister ensuite sur leurs différences.
Premièrement les frameworks: là ou Ruby se trouve très bien associé à Rails, PHP est lui doté d'une dizaine de frameworks aux qualités diverses, comme CakePHP ou Symphony, mais qui, d'après l'auteur, ne sont souvent pas aussi avancés que Rails, et n'offrent pas le même confort de développement.
Ensuite, l'article nous rappelle que Ruby supporte les espaces de noms, ce que PHP ne permet pas encore nativement, mais qu'il est beaucoup plus facile et économique d'héberger des applications PHP qui pourront être maintenues par FTP, quand les applications Ruby, elles, nécessiteront un hébergement plus onéreux et accessible en SSH. De même, pour tout ce qui concerne la documentation, celle offerte sur le site officiel PHP est plus claire, et plus fournie en exemples que celle de Rails.
L'auteur conclut néanmoins que, malgré les défaut de Ruby/Rails (notamment la complexité de l'hébergement), Ruby est l'un des language les plus expressifs et concis qu'il ait eu l'occasion d'utiliser, et que l'efficacité apportée par Rails pour Ruby, ne se retrouve actuellement pas dans les frameworks PHP.
Bon, je suis en train de sortir des cartons tout ce que je n'ai pas encore releasé. Voici une première fournée, sous la forme de deux plugins pour le framework Symfony :
sfPropelPollsPlugin Ce plugin permet de gérer des sondages simplement dans Symfony. Un module d'administration en back-office est inclus.
Bon, je suis en train de sortir des cartons tout ce que je n'ai pas encore releasé. Voici une première fournée, sous la forme de deux plugins pour le framework Symfony :
sfPropelPollsPlugin Ce plugin permet de gérer des sondages simplement dans Symfony. Un module d'administration en back-office est inclus.
L'essentiel des CSS est plutôt facile à comprendre, et je pense que la plupart des gens l'ont compris. Il y a les polices, les marges, le padding, la couleur.. Mais il y a un mur que les gens rencontre parfois... Un point où plusieurs éléments clés doivent se combiner pour assurer une présentation CSS solide et portable.
Le modèle de boîtes
Les colonnes flottantes
Maîtriser les em
Remplacement d'images
Navigation flottante
Sprites
Chaque thème est expliqué par plusieurs tutoriels. Une page de référence précieuse, par snook.ca.
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.
Dans le cadre dun des mes projets, jai été amené à me poser la question de linternationalisation de données dun site multilingue, en particulier des dates.
La date nétant pas formatée automatiquement avec une locale idéale par MySQL, puisque GETFORMAT ne renvoie pas de valeur correspondant au format français, je me suis résigné à le faire à la main.
'Mon cahier technique' propose un atelier performance en insertion dans trois moteurs de tables : InnoDB, MyISAM et MEMORY. Plusieurs conclusions sortent de cette étude :
delayed_key_write est important pour obtenir le meilleur des performances de MyISAM
Memory est le plus rapide, mais MyISAM est tout à fait respectable
D'après moi, l'étude gagnerait à inclure aussi le moteur Archive de MySQL, qui est justement fait pour stocker de grandes quantité de données. Il prend moins de place sur le disque, et groupe les écritures.
L'autre aspect serait l'étude de la vitesse avec des connexions concurrentes (mysqlslap) et des données. Lors des mesures de vitesse, il ne faut jamais oublier qu'une table sera rarement sollicitée par une seule connexion, mais part une multitude. La quantité de données déjà en place est aussi un facteur limitant à la vitesse. Tout cela joue, et généralement très négativement.
Que faire avec une injection SQL? Il y a le classique contournement d'identification ou la destruction de tables... Mais on peut en faire bien d'autre, comme :
deviner des noms de colonnes
deviner des noms de table
trouver des noms d'utilisateur
modifier un utilisateur existant
attaquer un mot de passe
créer un utilisateur
envoyer un mot de passe
Heureusement, le même article présente quelques solutions pour se protéger contre ces tentatives.
Depuis Amazon S3, le nombre de solutions de stockage de masse en ligne ne cesse d'augmenter. Programmable Web en recense maintenant 7. Ces services permettent de stocker des données sans contrainte de stockage. Vous ne payez que pour l'espace que vous utilisez, et la bande passante consommée. Cela permet de créer des services tels que slideshare, dans courir de risque de saturer une machine de gros documents dormants. Cet espace externe permet aussi de stocker en ligne des données, tout en les conservant privée ou publiques.
Nirvanix propose 0,18 $ par Go stocké et déplacé. Amazon S3 propose 0,15 $ le Go stocké et 0,20 $ le Go de trafic. OpenOmy est gratuit, mais limité à 1 Go (pour le moment). Il faut donc bien magasiner son service. Enfin, Google et Microsoft devrait entrer dans le bal prochainement.
Smarty est une librairie permettant de séparer de façon propre et claire la présentation et le code. Le Zend Framework est un framework professionnel développé par Zend permettant de créer des applications web complexes plus fiables, tout en diminuant les coûts de développement. Il est tout à fait possible de faire cohabiter proprement Smarty et le Zend Framework. Je vous propose une solution sous la forme d'un tutoriel.
Le site ZDNet nous propose un état des lieux des solutions de gestion de contenu les plus utilisées sur Internet.
Dans le domaine de la gestion de contenu, l'article fait tout d'abord la différence entre les solutions de type CMS (Content Management System) et les solutions ECM (Entreprise Content Management), ces dernières étant, comme leur nom l'indique, destinées tout particulièrement aux entreprises, leur offrant ainsi des systèmes de personnalisation de la structure même du contenu, et des fonctionnalités de gestion de workflow.
La grande majorité de ces outils sont écrits en PHP ou en java, mais l'article note que peu d'outils java sont à l'heure actuelle en "open-source", là ou leurs homologues écrits en PHP le sont presque tous. Néanmoins, ces outils java vont généralement bien plus loin dans l'ECM que les outils PHP, et entrent désormais en concurrence directe avec les outils des industriels du secteur comme Microsoft ou IBM.
En guise de conclusion, l'article fournit un petit comparatif rapide de différents outils de gestion de contenu.
La version 1.0.7 de symfony vient d'être publiée, celle-ci n'apporte rien de nouveau mais corrige de nombreuses anomalies liées au propel-dump-data.
Pour rappel symphony est un cadre d’application libre pour PHP5. Disponible depuis un an, ce framework a réussi à s’imposer comme une référence parmi la multitude de solutions disponibles pour ce langage. S’inspirant de Ruby on Rails, Symphony s’appuie sur une architecture de type Modèle-Vue-Contrôleur. Il implémente l’utilisation du langage de description YAML ainsi que l’Ajax.
"MySQL respecte énormément le standard ANSI SQL. Mais il y a quelques points où leurs vues diffèrent. Pour aller encore plus loin dans le respect du standard, vous pouvez utiliser le mode SQL ANSI, avec la variable système SQL_MODE."
Avant de passer à cette étape, essayez de répondre aux questions de Erik Wetterberg, pour voir si vous faîtes la différence entre le SQL MySQL et le SQL ANSI. C'est plus dur qu'il n'y parait.
Smashing magazine a posé 6 questions à plus de 175 experts PHP et MySQL dans le monde, pour arriver à une masse de conseils et de trucs pour se lancer correctement dans un projet.
Quel est le mythe typique du développement Web?
Quel est votre méthode pour passer le syndrome de la page blanche?
Qu'auriez-vous aimé savoir avant de commencer à programmer?
Que faîtes vous avant de vous lancer dans un nouveau projet?
Quel est l'erreur la plus courante quand vous développez un site Web?
Quel est l'outil ou le service dont vous ne pouvez pas vous passer?
5 paquets ont été mis à jour cette semaine :
: support étendu de HTTP
: interface pour IBM DB2
: fonctions OCI8
: Pilote PDO pour les bases de données IBM
: support des fichiers d'archives PHP : .phar
PECL est la bibliothèque d'extensions C de PHP.
"Le composant Zend_Pdf du Zend Framework permet de manipuler des fichiers PDF depuis votre application. En plus de ces capacités d'étidion de texte, il est livré avec un jeu complet de commandes de dessin. Lorsque vous travaillez avec du texte, Zend_Pdf vous donne la possibilité d'utiliser les polices natives ou bien des polices personnalisées TrueType. Au niveau des pages, il est possible de créer des pages, d'en supprimer ou de changer leur ordre. Dans ce tutoriel, mon objectif est de vous montrer les possibilités de ce compsant."
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.45 (entreprise), 4.1.22, ainsi que 5.1.21-beta. Les mises à jour sont recommandées vers ces versions.
6 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Claroline, Gallery, Joomla, PHPLib, Xoops et ming
Claroline Local File Include and Cross-Site Scripting Vulnerabilities
The "attribute_filter" parameter must be an array. The first element may be set to either "and" or "or" - this controls how the matching specified in the upcoming elements should be carried out. If this parameter is omitted, the system will default to "and". The rest of the elements are arrays, each array specifies a match.
So, the first and the second examples are not correct even if the first works in templates ! Damn, this took me almost 2 hours...
Vous naviguez sur internet en sécurité, car vous êtes sur un réseau local : entreprise avec un intranet, zone démilitarisée, ou simplement, routeur pare-feu à la maison. Si vous pensiez être discret, la première URL ci-dessous qui devrait vous suprendre.
Cela change des affichages de $_SERVER['REMOTE_ADDR'] et $_SERVER['REMOTE_IP'] ou $_SERVER['HTTP_X_FORWARDED_FOR'] (pour les proxy) (2eme URL).
"Le positionnement dans Google Images dépend de critères spécifiques à ce moteur de recherche, différents de ceux de l'algorithme classique de la recherche web. A la création de WebRankInfo en 2002 j'avais donné uniquement un conseil de base concernant l'attribut alt des images. L'objectif de cet article est de présenter une synthèse exhaustive de ce qu'on connait à propos de l'optimisation du référencement des images."
Par O. Duffez, de WebRankInfo.
Voici une comparaison entre différents framework de développement pour le Web, quelque soit la plate-forme. Le tableau permet de découvrir rapidement le niveau de fonctionnalité entre les différents frameworks. On y trouve des framework PHP (CakePHP, Symfony, Zend et Fuse Box, Code Igniter). En comptant les cases vertes, c'est Symfony et Zend Framework qui tirent leur épingle du jeu.
Il y a beaucoup d'autres frameworks cités, mais pas sur plate-forme PHP. Il manque aussi surement une grosse série de framework PHP à ajouter sur la page.
"Querysniffer sert à lire des données sur un serveur en production. Il est impossible de savoir ce qui se passe sur un serveur MySQL sans activer le log de requêtes général. Pour cela, MySQL a besoin d'un redémarrage. Cela impose aussi un coût d'administration au serveur. Rien de tout cela n'est bon en production. Au contraire, Querysniffer peut être lancé et arrété à tout moment."
MySQL 5.0.48, une des mises à jour mensuelle de MySQL Entreprise, est disponible sur les serveurs de MySQL. Elle apporte une ajout de fonctionnalité et 94 corrections. La version 5.0.46, de la mi-juillet, apportait 3 ajouts et 70 corrections par rapport à la versoin 5.0.45, qui est la version communauté actuelle.
Pour l'obtenir, vous devez être client MySQL. La version communauté est toujours disponible librement sur le site de développeur de MySQL.
"Un de mes collègues travaille sur un nouveau projet PHP et se lamente du manque d'outil pour assurer la migration de base de données. En y réfléchissant, j'ai déjà voulu de type de framework pour PHP, dans chacun de mes projets.
Un petit tutorial explique les fonctions de bases pour créer des fichiers PDF avec Zend framework.
Zend Framework est un framework PHP gratuit développé par la société Zend. Il a pour principal but d'accélérer le développement et de faciliter la maintenance d'application web. Parmi les fonctionnalités offertes par Zend Framework, vous avez la possibilité de manipuler des fichiers PDF grâce au module Zend_Pdf. Le tutorial proposé sur le site de Zend, vous propose de créer et d'enregistrer des documents et de manipuler du texte et des images à l'aide de ce module.
Le site SitePoint propose un dossier pour découvrir l'univers du mashup, à travers des exemples concrets utilisant les possiblités offertes par Yahoo!.
Le terme de mashup, popularisé par l'arrivée du Web 2.0, désigne une application web que l'on pourrait qualifier d'hybride en ce sens qu'elle s'appuie sur d'autres sites, pour fournir un nouveau service. En effet certains sites mettent gratuitement des API (Application Programming Interface) à disposition des développeurs, leur permettant ainsi d'utiliser leurs services web pour créer un nouveau site. On sitera notamment Google, Yahoo, Flickr, ou Amazon, dont les services web sont régulièrement utilisés dans le cadre du mashup.
Le dossier de SitePoint offre une initiation à la création de mashup en PHP5, en prenant comme exemple l'utilisation des différents services web proposés par Yahoo!. On apprend ainsi à utiliser, pour son propre site, les services Yahoo! Search et Yahoo! Maps.
A noter sur VNuNet un article consacré à Claroline, la plate-forme Open Source de formation à distance et de travail collaboratif développée en PHP.
L'article détaille les fonctionnalités et possibilité de ce logiciel francophone et cite quelques références parmi lesquelles l'Université Paris VIII, les Écoles Centrales, l'Université d'Auvergne à Clermont-Ferrand, l'Université de Lille2, l'Université de Provence, Université Jean Monet à Saint-Etienne, etc.
La version 5.0.48 du serveur de base de données MySQL vient de sortir.
Cette version n'apporte pas de nouveautés, mais corrige de nombreux bugs. On notera que l'erreur d'auto_increment avec des tables de type InnoDB a été corrigée et l'ajout d'une option de démarrage du serveur, pour ne pas réécrire le fichier .MYD existant lors de la création d'une table de type MyISAM.
iCalcreator est une classe PHP pour gérer des fichiers au format iCAL, dans des systèmes non-calendaire, tels que des CMS ou d'autres applications en ligne qui gèrent des agendas, des tâches, des listes, des données journalières.
iCalcreator est constitué d'une seule classe, avec une interface simple et un composant orienté calendrier. iCalcreator permet de créer, analyser et éditer des données calendaire dans un fichier au format iCal.
ASP.NET est plus utilisé sur les sites de fédérations sportives de l'Ovalie, que ne l'est PHP : 10 face à 7. Plus grave, les versions de PHP sont en retard, voire encore en PHP 4!
La France et le Canada portent les couleurs de PHP dans cette compétition. Espérons que la tragédie de la coupe du monde de football 2006 ne se répète pas : alors que PHP avait placé 3 finalistes dans le carré final, c'était ASP qui avait obtenu la coupe!
Les XSS sont partout : elles affecteraient environ 90 % des sites web au monde. Les XSS ne servent pas à afficher un dialogue d'alerte : elles permettent de prendre le contrôle du navigateur, et de modifier le comportement de la page complètement.
C'est comme cela que GNU citizen vous propose de gagner de l'argent avec les XSS : prenez quelques sites ayant une vulnérabilité XSS (en choississant dans la liste de XSSed, vous aurez même une liste de site de bon pageRank). Puis, modifier le comportement de la page, pour que les publicités soient créditées au nom du pirate et non plus au nom de la compagnie : généralement, c'est un simple changement de variable qui doit être fait.
Puis, diffusez les URL XSS un peu partout, pour que les moteurs de recherche trouvent votre page XSS, et non plus la page officielle (avec un peu d'astuce et OnlyWire, vous pouvez battre le site avec ses propres armes!).
GNU Citizen dit même avoir une autre méthode indirecte pour gagner de l'argent... Maintenant, vous allez avoir l'oreille de beaucoup de monde !
PHP Québec proposait ce week end un Code Fest : le but était d'implémenter le support d'OpenID dans différentes applications Open Source : Mediawiki, Tikiwiki, Xoops, WifiDog, Habari et Crash at mine. Pour cela, 12 personnes se sont levées au petit matin samedi, pour se regrouper dans un bar, et autour de Evan Prodromou. Louis-Philippe Huberdeau relate l'aventure.
"Vous pouvez trouver que le concept de données statiques en PHP 5 est plutôt difficile à comprendre, ou même inutile, mais la vérité est que dans de nombreuses situations, elles peuvent être très utiles. Par conséquent, et en supposant que le sujet de cette série a déjà retenu votre attention, nous allons étudier de plus près comment créer et utilier des propriétés statiques avec PHP 5, ainsi que de nombreuses illustrations, pour que vous acquériez les notions fondamentales de ce concept."
Entreveu avec Benoit Dehais sur le journal du net : "Nous travaillons avec d'autres collectivités sur ce domaine, avec des travaux de mutualisation. Nous développons aussi beaucoup des applications que nous utilisons. Nous travaillons avec PHP, Apache, et Linux ou dot.net."
Pour répondre au transfert de compétences de l'Etat et absorber une croissance de ses activités, le Conseil Général de Seine Maritime a dû revoir le périmètre de son système d'information. La DSI compte 89 personnes.
De nombreux pays sont montrés du doigts et tout récemment un autre type d'attaque est apparu, avec l'aide d'une page PHP et en utilisant les techniques de phishing. Le site Zataz.com en consacre une actualité exclusive.
Pour limiter ce genre d'attaque sur votre site internet, de nombreux moyens existent à moindre coup comme l'aquisition d'un ouvrage "Sécurité PHP et MySQL" édité par Eyrolles
Pour gagner du temps lors des exports de données avec mysqldump, vous pouvez compter désormais sur mysqlpdump (notez le 'p' en plus). Cet utilitaire se base sur le mysqldump que l'on connait, mais lance plusieurs threads séparés, qui peuvent tirer partie aisément de plusieurs coeurs de processeurs, si votre serveur en dispose. D'après l'expérience de Monty Taylor, cela accélère les traitements de manière significative : 300 Go exportés en 3 heures et demi, sur un serveur 4 coeurs.
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.
Voici deux petites nouveautés sur le site de nexen.net, qui ne font pas une révolution, mais pour lesquelles j'ai besoin de votre avis.
Premièrement, la lettre hebdomadaire 408 inaugure une nouvelle rubrique 'On en parle', qui extrait des dépêches de la semaine les noms des personnes, entreprises et projets qui font parler d'eux. Leur liste est maintenant publiée à part, pour référence rapide. Cette fonctionnalité va être développée dans les prochains mois pour faciliter la navigation dans le site et les actualités. Qu'en pensez-vous?
Deuxièmement, les fichiers RSS ont récupéré leur présentation. Jusqu'à présent, on affichait le texte brut, sans formatage. Cela conduisait à des situations où toute la dépêche était agglomérée en un seul paragraphe assez compact. Maintenant, c'est aéré. Et je me demande si vous préféreriez pas voir toute la dépêche dans le flux RSS, au lieu de simplement les premiers mots. Que préférez-vous?
Voila. Pour me contacter, il y a le lien contact, le courriel, les IM, les commentaires, etc.
Voici deux petites nouveautés sur le site de nexen.net, qui ne font pas une révolution, mais pour lesquelles j'ai besoin de votre avis.
Premièrement, la lettre hebdomadaire 408 inaugure une nouvelle rubrique 'On en parle', qui extrait des dépêches de la semaine les noms des personnes, entreprises et projets qui font parler d'eux. Leur liste est maintenant publiée à part, pour référence rapide. Cette fonctionnalité va être développée dans les prochains mois pour faciliter la navigation dans le site et les actualités. Qu'en pensez-vous?
Deuxièmement, les fichiers RSS ont récupéré leur présentation. Jusqu'à présent, on affichait le texte brut, sans formatage. Cela conduisait à des situations où toute la dépêche était agglomérée en un seul paragraphe assez compact. Maintenant, c'est aéré. Et je me demande si vous préféreriez pas voir toute la dépêche dans le flux RSS, au lieu de simplement les premiers mots. Que préférez-vous?
Voila. Pour me contacter, il y a le lien contact, le courriel, les IM, les commentaires, etc.
Avec la mort annoncée de PHP 4, certains webmestres envisagent de faire des installations doubles, avec PHP 4 et PHP 5 simultanément, pour pouvoir faire passer progressivement leur code d'une version à l'autre. On trouve ce sujet récurrent depuis longtemps, et les mêmes questions se posaient à l'époque de PHP 3 et PHP 4...
Environs 10% des clients ont une installation double, explique Ghislain Séguy, responsable de la plate-forme technique de Nexen Services.
Dans les faits, environs 5 à 6 % des serveurs Web PHP utilisent une configuraiton complexe avec plusieurs versions. Alors, l'hébergement multiple : difficile ou simplement inutile?
PHP un des meilleurs langages pour la manipulation de documents XML
Les documents XML sont de plus en plus utilisés que ce soit dans le monde du web, avec de nouveaux protocoles tels que l’AJAX, ou encore dans les logiciels. XML sert de base pour tout langage balisage.
Un document XML
<livre>
<auteur>
Laurent Eric1
</auteur>
<titre>
La face cachee du Petrole
</titre>
<chapitre>
<titre>
Le monde n’aime pas affronter la realite
</titre>
<corps>
J’ai decouvert que le monde n’aime pas affronter la realite…
</corps>
</chapitre>
<chapitre>
<titre>
Le premier forage en 1859 et l’essor du petrole
</titre>
<corps>
Le premier forage petrolier est effectue en 1859…
</corps>
</chapitre>
</livre>
Parcoure d’un document XML, avec SimpleXML
SimpleXML permet la lecture d’un document XML trÚs simplement, on fait appel pour cela la méthode “simplexml_load_file()” qui charge le document XML, ensuite SimpleXML gÚre chaque noeud du document comme un objet, une autre fonction permet de dérouler son document XML “asXml()”
<?php
/*
* simplexml_load_file()
* Charge un document XML et retourne un simplexml_element
Une petite application simple, histoire de mettre en pratique nos acquis (:,
un lecteur RSS partir d’une url… bon on est loin d’un Google Reader …m’enfin avec une feuille de style bien conçue…
Installation du Rewrite Module pour Apache2 sous OpenSuSE
Introduction
Le Rewrite_mod pour apache ou la réécriture url est plutôt à la mode ces temps-ci, une des raisons les plus marquantes est le référencement, là ou les moteurs de recherche ont du mal à suivre des url exotiques comme “www.monsite.org/?page=mail&action=envoyer” l’utilisation du rewrite_mod coupler à un MVC (Model View Controler) (voir framework zend) en Php permet d’obtenir des url bien plus parlantes “www.monsite.org/mail/envoyer”
Installation du module: rewrite_mod
L’installation est en fait assez simple, il suffit d’ajouter la ligne “LoadModule rewrite_module /usr/lib64/apache2-prefork/mod_rewrite.so” dans le fichier de configuration des modules d’Apache2 pour OpenSuSE
Donc: En root (commande: su) on édite le fichier /etc/apache2/sysconfig.d/loadmodule.conf et on ajoute la ligne LoadModule rewrite_module /usr/lib64/apache2-prefork/mod_rewrite.so
L’Association Française des Utilisateurs de PHP s’associe à Adobe pour présenter comment créer des applications riches avec PHP et la technologie openSource Adobe Flex. Le tout avec l’expert mondial PHP Flex : Mike POTTER.
Le 11 octobre 2007 à 20h15 sur Paris
Lolo Irie vous pose la question sur son blog : comment réaliser la migration vers PHP 5.
Il y a d'abord les raisons de cette migration, à commencer par la nécessité de le faire (PHP 4 ne sera plus supporté à la fin de l'année), mais aussi les avantages : de nouvelles fonctionnalités et plus de performances. En gros, c'est la bonne vieille méthode de la carotte et du baton.
Ensuite, pour la migration elle-même, il suggère de tester directement sur la nouvelle plate-forme, en surveillant notamment les pages qui crashent, ainsi que les logs d'erreurs qui produiront probablement beaucoup de lignes, mais pointeront immédiatement les points à corriger.
Avez vous d'autres expériences de migration à partager? laissez lui un commentaire.
"Comme le nom le suggère, la classe PEAR HTML_QuickForm peut être utilisée pour produire rapidement et proprement des formulaire HTML, évitant aux programmeurs cette tâche fastidieuse. HTML_QuickForm fournit aux développeurs une approche déclarative pour définir les champs et leurs règles de validation associée, puis génère directement le code HTML et JavaScript nécessaire pour afficher correctement le tout. HTML_QuickForm valide aussi les formulaires, et permet aux développeurs de définir une fonction qui prend le relais quand les données sont arrivées et propres à l'utilisation."
L'équipe de PHP Québec est fière d'annoncer la sixième édition de la Conférence PHP Québec, qui aura lieu du 12 au 14 mars 2008 à Montréal (Québec, Canada). Nous sommes à la recherche d'experts PHP francophones et anglophones désireux de partager leur expertise avec les professionnels du Canada et des États-Unis.
Le PHPLab favorisera la communication entre les conférenciers et les participants autour des sujets répondant aux problématiques actuelles du marché. Lors de la conférence, des sujets destinés aux programmeurs, chefs de projets et directeurs seront abordés. Parmi les sujets: les dernières techniques de développement avec PHP5 et PHP6, XML, services web, bases de données, etc.
Les organisateurs attendent vos propositions originales et inédites. Pour plus d'informations, visitez le site web de la conférence: http://conf.phpquebec.com
Voici les derniers ateliers de performances qui comparent MyISAM, InnoDB et Falcon. Ils complètent les ateliers de Peter Zaitsev, avec 9 mois de plus. On peut voir l'impact de différentes varaibles : innodb_buffer_pool, innodb_additional_mem_pool_size, falcon_page_cache_size, falcon_disable_fsync, et falcon_record_memory_max.
Au final, MyISAM et InnoDB se partagent les meilleurs temps, mais Falcon n'est pas loin derrière. Peut-être qu'un peu de maturité finira de le mettre dans la compétition.
"Pourqoui dois-je configurer le temps de requête lente manuellement? Pourquoi est-ce que le serveur ne peut pas devenir lui-même le temps normal d'exécution d'une requête et me signaler les écarts, les requêtes particulièrement lentes? "
A partir de cette constation, Jan Kneschke utilise la déviation standard pour identifier les requêtes trop lentes. Ca, en plus du MySQL Proxy et de l'histogramme de requêtes.
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.48 (entreprise), 4.1.22, ainsi que 5.1.21-beta. Les mises à jour sont recommandées vers ces versions.
4 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Invision Power Board, Joomla, WordPress et wordpress
"Comme promis, je vais pousser mon étude des fichiesr .plist un peu plus loin, cette fois-ci en PHP. Je vais vous montrer des concepts fonctionnels de programmation, appliqués à PHP, notamment en l'utilisant de manière similaire à XSL."
Les données hierarchisées sont toutes ces données qui sont organisées sous forme d'organigramme, ou d'arbre généalogique : chaque élément a un parent, et zéro, un ou plusieurs enfants.
Il y a deux modèles pour stocker ces données dans une table MySQL : le modèle adjacent, qui note chez l'enfant un lien vers le parent, et le modèle imbriqué, qui donne un début et une fin à chaque élément.
Matthew Turland rappèle quels sont ces techniques.
PHP dispose d'un système de collecte de la mémoire inutilisée, qui supprime les objets dès que ces derniers ne sont plus utilisés. C'est à dire quand les données ne font plus partie d'acune variable, PHP libère la mémoire.
Là où le bas blesse, c'est que si deux objets se référencent mutuellement, PHP n'est pas capable de l'identifier : dans ce cas, il continue de supposer que les objets sont utilisés, et il les conserve en mémoire. C'est ce que Alex Netkachov montre avec un petit script simple.
En bref : il faut éviter les références circulaires en PHP.
"Qu'est-ce que le MySQL Test Creator? Un outil qui va accélérer et simplifier la création de scripts de tests pour une base de donées, tout en fonctionnant avec une session normale. Avec cet outil, vous pouvez travailler avec votre base de données comme d'habitude, et, en tâche de fond, le créateur de tests va enregistrer vos actions, et écrire un test SQL pour reproduire la situation et le résultat."
Tester une base de données est toujours difficile, car il y a beaucoup de mise en place avant d'exécuter une petite commande, et possiblement beaucoup de nettoyage. L'outil de Charlie Cahoon, supervisé par Guiseppe Maxia, est particulièrement intéressant.
phpMyEdit produit du code PHP pour afficher et modifier des tables MySQL, en HTML. Tout ce que vous avez besoin de faire est un programme simple pour appeler ces classes : elles sont bourrées de fonctions de manipulations de ligne (ajout, modification, effacement, copie, lecture, etc.) ainsi que groupe (tris, filtres, recherche, etc.
La version 5.7.1 vient de sortir.
L'AFUP vient d'annoncer officiellement le programme du Forum PHP 2007 qui aura lieu à Paris les 21 et 22 novembre prochains.
Kanopée, ma société de développement d'application web fait partie des organisateurs de l'évènement. Vous pourrez donc m'y croiser alors n'hésitez pas à venir faire...
Bonjour, Aujourd'hui a été annoncé sur le site de l'AFUP le programme pour la nouvelle session des forums PHP. Pour rappel, ils se tiendront les 21 et 22 novembre 2007 à Paris.
PDO est une extension PHP qui fournit une couche d'abstraction pour accéder aux bases de données : elle peut être utilisée pour accéder à toute une gamme de bases différentes. Cela vous donne la possibilité de changer votre base de données sans modifier votre code PHP. Même si vous utilisez PHP exclusivement, PDO peut fournir des avantages : vous pouvez utiliser les mêmes fonctions pour accéder à vos données, quelles que soient les versions de MySQL utilisées. Cela vous évite d'utiliser la vieille extension mysql avec les vieilles versions, et mysqli pour les nouvelles versions. Un autre avantages est l'utilisation de code POO, quelle que soit la version de MySQL.
"Au début, la refactorisation était un peu de la magie. Avec l'expérience, j'ai appris en la voir comme une technique, et désormais, la refactorisation est intégrée dans mon environnement de développement. Elle est utilisée rapidement et fréquemment. En utilisant la refactorisation, avec ses outils, je peux sculpter mon code pour améliorer la lisibiité et sa maintenance.
Dans cet article, je vais vousp présenter les avantages de la refactorisation, puis essayer de vous convaincre que les concepteurs de framework et les développeurs PHP devraient immédiatement l'adopter."
PDO est une extension PHP qui fournit une couche d'abstraction pour accéder aux bases de données : elle peut être utilisée pour accéder à toute une gamme de bases différentes. Cela vous donne la possibilité de changer votre base de données sans modifier votre code PHP. Même si vous utilisez PHP exclusivement, PDO peut fournir des avantages : vous pouvez utiliser les mêmes fonctions pour accéder à vos données, quelles que soient les versions de MySQL utilisées. Cela vous évite d'utiliser la vieille extension mysql avec les vieilles versions, et mysqli pour les nouvelles versions. Un autre avantages est l'utilisation de code POO, quelle que soit la version de MySQL.
Pour obtenir des pourcentages, il faut typiquement deux requêtes : une pour compter les groupes, et une autre pour le total. Au final, il reste à faire la division et multiplier par 100.
A l'aide de 30 millions de lignes, Peter Zaitsev montre comment gagner 25% de temps en utilisant WITH ROLLUP, qui calcule la somme en même temps que les groupes.
"Au début, la refactorisation était un peu de la magie. Avec l'expérience, j'ai appris en la voir comme une technique, et désormais, la refactorisation est intégrée dans mon environnement de développement. Elle est utilisée rapidement et fréquemment. En utilisant la refactorisation, avec ses outils, je peux sculpter mon code pour améliorer la lisibiité et sa maintenance.
Dans cet article, je vais vousp présenter les avantages de la refactorisation, puis essayer de vous convaincre que les concepteurs de framework et les développeurs PHP devraient immédiatement l'adopter."
Après un an et demi de développement, PDT (ex PHP IDE) sort aujourd'hui en version 1.0. Développé en tant que plugin d'Eclipse, PDT souhaite devenir l'éditeur PHP Open Source de référence.
PDT est l'extension de WTP pour les développeur PHP. Il est construit selon 3 axes :
Editeur...
Jelix est un framework pour PHP 5.1, qui comporte de nombreux composants et repose sur des modèles connus comme MVC, DAO, etc, tout en restant léger et performant. La version 1.0 beta 3 qui vient de sortir apporte des nouveautés importantes.
Ces nouveautés sont :
* un système de formulaire qui permet de gérer automatiquement les erreurs, la validation aussi bien côté client que coté serveur, ainsi que la génération automatique du code HTML et javascript. Tout ceci à partir d'un simple fichier descriptif en XML.
* un contrôleur générique pour faire de la gestion de données très rapidement (type CRUD)
* un module pour faire des tests unitaires aisément
* une uniformisation dans l'organisation des divers types de plugins
* de nombreuses améliorations dans la plupart des composants du framework.
Et bien sûr, comme dans les versions précédentes, Jelix 1.0 beta 3 propose une architecture modulaire, un moteur de template performant, des composants pour gérer l'authentification, les droits, l'internationalisation, ou encore faire du mapping relationnel-objet et de la communication inter-module. Le framework peut prendre aussi en charge les urls significatives, les thèmes, l'UTF-8, XML-RPC, JSON, RESTFull et bien d'autres choses. Sans oublier des scripts en ligne de commande qui permettent de développer rapidement.
À noter aussi les améliorations sur le site et les gros efforts qui ont été fait sur la documentation. Enfin l'ouverture d'une forge pour les développeurs de modules, plugins, et outils pour Jelix, qui comporte notamment un projet de plugin pour Eclipse, jelixeclipse, facilitant le développement d'applications pour Jelix.
Jelix 1.0 beta 3 est utilisé sur plusieurs sites, dont un à très forte audience (l'une des plus grosses plateformes de blog en France), et de ce fait peut être considéré comme très stable. C'est d'ailleurs la dernière beta avant la version 1.0.
Jelix est disponible en deux éditions : l'édition "developer" pour la phase développement d'une application, et l'édition "optimized" (facultative), optimisée pour les serveurs en productions.
Blitz est une extension PHP, écrite en C, qui reproduit les fonctionnalités de la bibliothèque de gabarits (templates) php_templates. Blitz se concentre en particulier sur les performances...
Que faire avec une injection SQL? Il y a le classique contournement d'identification ou la destruction de tables... Mais on peut en faire bien d'autre, comme :
Dans notre livre "Sécurité PHP 5 et MySQL", Damien et moi avons élaboré une liste des caractères spéciaux auxquels il faut faire attention lors de la construction du résultat dun script PHP,...
« Dans le cadre dun des mes projets, jai été amené à me poser la question de linternationalisation de données dun site multilingue, en particulier des dates.
La date nétant pas...
Open Source Testing se consacre à recenser les outils de tests disponibles en Open Source. Il y a des listes de tests unitaires et de performances, incluant les tests fonctionnels, les graphiques,...
L'équipe de PHP Québec est fière d'annoncer la sixième édition de la Conférence PHP Québec, qui aura lieu du 12 au 14 mars 2008 à Montréal (Québec, Canada). Nous sommes à la recherche...
PHP SysInfo est un script PHP qui affiche des informations sur l'hôte utilisé (Linux). Il affiche des informations telles que Uptime, CPU, mémoire, SCSI, IDE, PCI, Ethernet, disquettes et...
phar 1.2.1, la dernière version de l'extension pecl d'archive de PHP. (PHp ARchive), a été publié. Similairement aux fichiers JAR de Java, on peut ranger tous les fichiers nécessaires à une...
Le livre sur la sécurité PHP 5 et MySQL 5 a son site compagnon sur Nexen.net, avec plusieurs listes de sécurité intéressantes. Vous y trouverez notamment :
MySQL 5.0.48, une des mises à jour mensuelle de MySQL Entreprise, est disponible sur les serveurs de MySQL. Elle apporte une ajout de fonctionnalité et 94 corrections. La version 5.0.46, de la...
« Comme vous l'avez peut-être remarqué, sur CentOS 5.0, il n'y pas d'extension PHP-MSSQL (pour Microsoft SQL Server) disponible dans yum. Si vous en avez besoin, vous devez compiler vous même...
Il est très difficile de se défendre contre les CSRF, car c'est l'utilisateur innocent (mais légitime) qui exécute les commandes pour le pirate. Ce dernier ne sera jamais sur le site. Il existe...
«Comme promis, je vais pousser mon étude des fichiers.plist un peu plus loin, cette fois-ci en PHP. Je vais vous montrer des concepts fonctionnels de programmation, appliqués à PHP, notamment en...
« Vous voulez créer votre propre mashup? Super! Mashups, ces applications Web qui lisent des informations sur des sources externes et les combinent de manière moderne et inattendue, sont faciles...
WWW SQL Designer est une application de conception de base
de données. Elle est écrite entièrement en Ajax. Vous pouvez y
constituer vos bases de données, inscrire les relations
d'une...
Vous cherchez un hébergeur PHP. Stoyan Stevanof propose une liste de 12 questions à vérifier. Il y rassemble différentes questions techniques qui dépassent les simples considérations...
L'équipe de développement de PHP annonce la publication immédiate de PHP 5.2.4. Cette version met l'accent sur la stabilité de la branche PHP 5.2, avec la correction de 120 problèmes et la...
Sur son blogue, Stefan Esser fait mention d'un projet de mode teinté pour PHP.
Le mode teinté consiste à marque les valeurs d'un indicateur de leur niveau potentiel de dangerosité. $_GET et...
" Distinguant contenu et contenant, les outils de gestion web facilitent la création et la mise à jour de sites. Dans ce domaine, les logiciels libres - en PHP ou Java - ont acquis une réputation...
MySQL 5.1.21, la dernière version du système de base de données Open Source, a été publiée. C'est une version bêta : il est recommandé de sauver ses données avant de changer de version, et...
Durant le mois d'août 2007, PHP 4 est finalement entré en phase de déclin, avec une première croissance négative sur le marché PHP. Après avoir accusé un ralentissement depuis le début de...
Le 16 août 2007. WaterProof, annonce la publication de la version 2.12.2 de son logiciel phare PHPEdit. Cette version propose de nombreuses améliorations et contient le support exclusif de PHPUnit...
Il arrive parfois qu'un serveur Web a une fuite de son code PHP : au lieu d'afficher de résultat du script PHP, il affiche carrément le code source, avec tous les problèmes de sécurité qui en...
MySQL 6.0.2 a été publiée. C'est une version alpha : elle permet de tester les nouvelles fonctionnalités, notamment le moteur Falcon, mais il est recommandé de sauver ses données avant de...
« GeekChat Basic est un chat en ligne, basée sur PHP, MySQL pour donner un système puissant de communication, qui peut être intégré à n'importe quel site Web. »
PDT est le 'PHP Developpement Tools', les outils de développement PHP pour Eclipse. Ces outils se basent sur la plate-forme de développement populaire Eclipse, et fournissent un éditeur, un débogueur et un inspecteur de code. L'objectif est de mieux encadrer la production de code PHP avec des standards reconnus, tant dans les procédures que la présentation.
Voici les dernières nouvelles des composants eZ :
"Nous [Derick Rethans et l'équipe eZ] venons tout juste de publier notre nouvelle version alpha des composants. Les modifications des classes Authentication, Mail et Url font partie des dernières fonctionnalités que nous allons inclure dans la prochaine version alpha des eZ Components.
Dans ces versions courantes, vous pouvez trouver de nouvelles fonctionnalités, telles qu'un meilleur support pour OpenID, un support en base de données pour l'identification OpenID, une méthode de validation des adresses email, le support SMTP de l'identification avec DIGEST-MD5, CRAM-MD5, NTLM et LOGIN ainsi que le support de l'encodage des entêtes mails."
PDT est le 'PHP Developpement Tools', les outils de développement PHP pour Eclipse. Ces outils se basent sur la plate-forme de développement populaire Eclipse, et fournissent un éditeur, un débogueur et un inspecteur de code. L'objectif est de mieux encadrer la production de code PHP avec des standards reconnus, tant dans les procédures que la présentation.
"Pour mieux comprendre les futures menaces de sécurité, prenons une grande inspiration, et jetons nous dans les "vulnérabilités de sécurité", ce qu'elles sont, comment elles sont classées, comment elles sont découvertes, comment MySQL en entend parler, ce que fait l'équipe de sécurité MySQL "MySQL Security Team", quels sont les rôles des membres de l'équipe, comment les vulnérabilités sont corrigées, comment ces corrections sont distribuées et pourquoi vous devez y porter attention."
Voici les dernières nouvelles des composants eZ :
"Nous [Derick Rethans et l'équipe eZ] venons tout juste de publier notre nouvelle version alpha des composants. Les modifications des classes Authentication, Mail et Url font partie des dernières fonctionnalités que nous allons inclure dans la prochaine version alpha des eZ Components.
Dans ces versions courantes, vous pouvez trouver de nouvelles fonctionnalités, telles qu'un meilleur support pour OpenID, un support en base de données pour l'identification OpenID, une méthode de validation des adresses email, le support SMTP de l'identification avec DIGEST-MD5, CRAM-MD5, NTLM et LOGIN ainsi que le support de l'encodage des entêtes mails."
Krystian Hoffman résume les raisons pour lesquelles il aime PHP, et c'est rafraîchissant de retrouver les bons vieux fondamentaux de PHP, notamment la communauté, les performances, le coût.
On trouve aussi des petits nouveaux, comme le support de l'objet et les services pour PHP. Ni l'un ni l'autre ne sont nouveaux, mais c'est bon de les voir maintenant cités.
"Pour mieux comprendre les futures menaces de sécurité, prenons une grande inspiration, et jetons nous dans les "vulnérabilités de sécurité", ce qu'elles sont, comment elles sont classées, comment elles sont découvertes, comment MySQL en entend parler, ce que fait l'équipe de sécurité MySQL "MySQL Security Team", quels sont les rôles des membres de l'équipe, comment les vulnérabilités sont corrigées, comment ces corrections sont distribuées et pourquoi vous devez y porter attention."
"Le moteur de table Falcon, pour MySQL, utilise un concept d'espace de tables (tablespaces, en anglais), qui est aligné sur les concepts utilisés par Oracle (tablespaces) ou SQL Server (filegroups). Voyons un peu comment les espaces de tables sont utilisés dans Falcon, et ce que vous ne pouvez pas faire avec."
Par Robin Schumacher.
Krystian Hoffman résume les raisons pour lesquelles il aime PHP, et c'est rafraîchissant de retrouver les bons vieux fondamentaux de PHP, notamment la communauté, les performances, le coût.
On trouve aussi des petits nouveaux, comme le support de l'objet et les services pour PHP. Ni l'un ni l'autre ne sont nouveaux, mais c'est bon de les voir maintenant cités.
Tous les mois, SmashingMagazine rassemble les meilleurs sites Web qu'ils ont rencontrés, et ils les classent. On y trouve un bric-à-brac d'outils pour PHP, HTML, CSS et les applications Web en général. Une mine d'idées pour tous les goûts.
"Le moteur de table Falcon, pour MySQL, utilise un concept d'espace de tables (tablespaces, en anglais), qui est aligné sur les concepts utilisés par Oracle (tablespaces) ou SQL Server (filegroups). Voyons un peu comment les espaces de tables sont utilisés dans Falcon, et ce que vous ne pouvez pas faire avec."
Par Robin Schumacher.
Tous les mois, SmashingMagazine rassemble les meilleurs sites Web qu'ils ont rencontrés, et ils les classent. On y trouve un bric-à-brac d'outils pour PHP, HTML, CSS et les applications Web en général. Une mine d'idées pour tous les goûts.
Publications de version de maintenance du SGBD libre PostgreSQL.
Le PostgreSQL Global Development Group a annoncé la mise à jour de l'ensemble des versions de PostgreSQL. Il s'agit essentiellement de correction, de failles de sécurité mineures. Les versions les plus à jour sont désormais les suivantes: 8.2.5, 8.1.10, 8.0.14, 7.4.18, 7.3.20.
So well, I've been busy these days working on my own implementation of a form component in the ZF spirit. This post is to help me see where I'm at with this component, as well as planning future evolution. I'll try my best to describe what it does and does not, and what it could do in the future.
Of course, while this is more of a personnal pense-bete than anything else, any comments are welcome.
Basic features
Forms are build using the factory, which ensures each form has a unique name so that two forms can't conflict when used on the same action. Each element of the form is materialized by an instance of Riskle_Form_Element which holds any configuration directive for the element.
Prototyping
The component features an extensible prototyping system via the Riskle_Form_Prototype set of class. Default (and mandatory atm) is to use a Zend_Config_Ini file which can in turn contains further prototyping instructions, such as prototype from a model (by model I mean a class extending Zend_Db_Table). A given form can embed multiple prototypes, possibly of the same type, which have to be conretized before the form is usable. Concretization of form operates in a FILO merging fashion. Prototyping from a model is for the moment very basic, it treats all fields as text field, but this will be addressed in time. Of course, the system allows for different source of prototyping (think Riskle_Form_Prototype_Xml for example).
Form elements
Elements features a variety of configuration directives, which I'll details here.
type: explicitly tells the type of the field (for the moment, better tell an existing HTML type). default is text.
label: basically, the string to be put into the tag.
validators: an array of validators, see Data validation for details.
allow_empty: weither the field is allowed to be empty or not.
datasource: specify a datasource to retrieve the field datas from (only used for fields). See below for further details about that.
depends: specify a field to which the current field is dependent. Mainly used for auto-ajax-refreshing .
The datasource directive deserves a little more explanation. When the form factory encounters a datasource directive, it delegates the work to the datasource factory, which autodetects and decode the datasource. The core distributions handles the following datasources:
Instanciated Model, with format: YourModel->method
Static Model, with format: YourModel::method
CSV string, with format: csv:foo,bar. It uses a user land CSV decoder that will most likely be bundled with the core distribution when (if ?) released.
JSON string, with format: json:{'foo', 'bar'}. It's worth noting that this example will be converted to the following associating array: array('foo' => 'foo', 'bar' => 'bar'). You can avoid this by including a noassoc switch (so that it reads json:noassoc:{'foo', 'bar'}. Another note on JSON: the main problem when allowing JSON in INI files is that you can't have a double quote character in values (except by using a dirty hack which I do not want), and the php json decoder expects identifiers to be doublequoted. The datasource handles this by replacing any non escaped single quote to a double quote.
Data validation
Data validation is done by a subclassed Zend_Input_Filter. validators configuration from elements should conform to ZFI syntax. The custom Riskle_Form_Input component features a getRaw set of methods to retrieve raw data (used in case the form was not successful). Not much else to say here.
Rendering
The core distribution features a set of view helper aimed at easing html form drawing. The helpers use the built-in ZF view helpers to render fields while adding a bunch of custom markup around (namely: labels and error messages). The default helpers also take care of fields that depend on other fields (see Form elements) and add the according ajax queries to populate the element.
Workflow control
The most interesting part I think. Riskle_Form features a plugin system, much like the Zend_Controller one. It exposes the following hooks (in this order):
formStartup, always run at the beginning of the workflow
prePopulate, run before the form gets it data (either from the model or the request)
postPopulate, run after the form gets it data
preValidate, run before the forms attempts to validate the data
onValidateSuccess, run if and only if the data validation was a success
onValidateFailure, run if and only if the data validation was a failure
postValidate, run after the forms attempts to validate the data (regardless of the success or not)
preCommit, run before the form tries to feed the model with the data
onCommitSuccess, run if and only if the data feedage was a success
onCommitFailure, run if and only if the data feedage was a failure
postCommit, run after the forms tries to feed the model with the data (regardless of the success or not)
formShutdown, always run at the end of the workflow
For each hook, the instance of the current form is passed as an argument to the method. Of course, the commit set of hooks will only be run if the data validates.
Sample usage
A simple uploading form could look like the following:
Clearly, this form component is designed for use in an HTML component. Few or no care has been taken to ensure cross-medium compatibiliy such as XHTML, PDF, etc. Hopefully the changes to apply to achieve such compatibility will not be that much of a hassle. While I'm not willing to ensure such a compatibility, I'd be happy to apply any patch submitted.
Regarding plugins, they still miss the ability to really act on the workflow, such as stopping it, skipping steps (?) or add errors to the stack, etc.
Also, the code still needs a few refactoring and optimization, especially regarding the view helpers and the main form class, as well as the configuration file syntax which needs an in-depth revision.
So well, I've been busy these days working on my own implementation of a form component in the ZF spirit. This post is to help me see where I'm at with this component, as well as planning future evolution. I'll try my best to describe what it does and does not, and what it could do in the future.
Of course, while this is more of a personnal pense-bete than anything else, any comments are welcome.
Basic features
Forms are build using the factory, which ensures each form has a unique name so that two forms can't conflict when used on the same action. Each element of the form is materialized by an instance of Riskle_Form_Element which holds any configuration directive for the element.
Prototyping
The component features an extensible prototyping system via the Riskle_Form_Prototype set of class. Default (and mandatory atm) is to use a Zend_Config_Ini file which can in turn contains further prototyping instructions, such as prototype from a model (by model I mean a class extending Zend_Db_Table). A given form can embed multiple prototypes, possibly of the same type, which have to be conretized before the form is usable. Concretization of form operates in a FILO merging fashion. Prototyping from a model is for the moment very basic, it treats all fields as text field, but this will be addressed in time. Of course, the system allows for different source of prototyping (think Riskle_Form_Prototype_Xml for example).
Form elements
Elements features a variety of configuration directives, which I'll details here.
type: explicitly tells the type of the field (for the moment, better tell an existing HTML type). default is text.
label: basically, the string to be put into the <label /> tag.
validators: an array of validators, see Data validation for details.
allow_empty: weither the field is allowed to be empty or not.
datasource: specify a datasource to retrieve the field datas from (only used for <select /> fields). See below for further details about that.
depends: specify a field to which the current field is dependent. Mainly used for auto-ajax-refreshing <select />.
The datasource directive deserves a little more explanation. When the form factory encounters a datasource directive, it delegates the work to the datasource factory, which autodetects and decode the datasource. The core distributions handles the following datasources:
Instanciated Model, with format: YourModel->method
Static Model, with format: YourModel::method
CSV string, with format: csv:foo,bar. It uses a user land CSV decoder that will most likely be bundled with the core distribution when (if ?) released.
JSON string, with format: json:{'foo', 'bar'}. It's worth noting that this example will be converted to the following associating array: array('foo' => 'foo', 'bar' => 'bar'). You can avoid this by including a noassoc switch (so that it reads json:noassoc:{'foo', 'bar'}. Another note on JSON: the main problem when allowing JSON in INI files is that you can't have a double quote character in values (except by using a dirty hack which I do not want), and the php json decoder expects identifiers to be doublequoted. The datasource handles this by replacing any non escaped single quote to a double quote.
Data validation
Data validation is done by a subclassed Zend_Input_Filter. validators configuration from elements should conform to ZFI syntax. The custom Riskle_Form_Input component features a getRaw set of methods to retrieve raw data (used in case the form was not successful). Not much else to say here.
Rendering
The core distribution features a set of view helper aimed at easing html form drawing. The helpers use the built-in ZF view helpers to render fields while adding a bunch of custom markup around (namely: labels and error messages). The default helpers also take care of fields that depend on other fields (see Form elements) and add the according ajax queries to populate the element.
Workflow control
The most interesting part I think. Riskle_Form features a plugin system, much like the Zend_Controller one. It exposes the following hooks (in this order):
formStartup, always run at the beginning of the workflow
prePopulate, run before the form gets it data (either from the model or the request)
postPopulate, run after the form gets it data
preValidate, run before the forms attempts to validate the data
onValidateSuccess, run if and only if the data validation was a success
onValidateFailure, run if and only if the data validation was a failure
postValidate, run after the forms attempts to validate the data (regardless of the success or not)
preCommit, run before the form tries to feed the model with the data
onCommitSuccess, run if and only if the data feedage was a success
onCommitFailure, run if and only if the data feedage was a failure
postCommit, run after the forms tries to feed the model with the data (regardless of the success or not)
formShutdown, always run at the end of the workflow
For each hook, the instance of the current form is passed as an argument to the method. Of course, the commit set of hooks will only be run if the data validates.
Sample usage
A simple uploading form could look like the following:
[fields]
myUploadField.type = "file"
myUploadField.label = "choose an image"
legend.type = "text"
legend.label = "Legend"
What it lacks
Clearly, this form component is designed for use in an HTML component. Few or no care has been taken to ensure cross-medium compatibiliy such as XHTML, PDF, etc. Hopefully the changes to apply to achieve such compatibility will not be that much of a hassle. While I'm not willing to ensure such a compatibility, I'd be happy to apply any patch submitted.
Regarding plugins, they still miss the ability to really act on the workflow, such as stopping it, skipping steps (?) or add errors to the stack, etc.
Also, the code still needs a few refactoring and optimization, especially regarding the view helpers and the main form class, as well as the configuration file syntax which needs an in-depth revision.
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.
LooGaroo (le nouveau manucorp) part en guerre contre les messages liés aux connexions MySQL : ces derniers se retrouvent trop souvent sur un site Web, et immanquablement dans les moteurs de recherche. Le lien Google ci-dessous vous mène directement à tout une collection de site qui n'ont pas protégé leur connexions!
Quand la base ne peut pas être contactée, le script n'est pas interrompu. Pire encore, si la connexion a été mise en variable, ce n'est pas une ressource qu'on y retrouve, mais un booléen. Et les messages d'erreurs apparaissent immédiatement et en public.
Deux solutions à ce problème : le premier est de toujours vérifier la valeur retournée par mysqli_connect, et de s'assurer qu'on a bien une ressource (ou un objet).
La deuxième est de mettre error_display à off dans la configuration : cela ne supprimera pas l'erreur, mais cette dernière sera masquée.
LooGaroo lance une grande campagne pour réduire le nombre de presque 800 000 sites qui affichent ces erreurs!
Via le blogue de Jérome Plantevin, voici une liste d'outils pour les développeurs Web : couleurs, navigations, menus, photos, gabarits, validateurs, boutons, favicon et générateurs de popup contextuels. Une mine d'informations.
Vous pouvez suivre le deuxième lien de cette page pour voir nexen.net affiché sur le site de CNN. Pour être exact, sur la page de recherche, mais la tactique ci-dessous peut être payante pour masquer un site en le couvrant d'un autre site plus crédible.
Il suffit d'utiliser les opérateurs de recherche du moteur pour forcer ce dernier à trouver une page particulière, et l'afficher dans un autre domaine. Dans l'URL ci-dessous, vous pouvez voir 'search.cnn.com' et peut-être pas le site final.
http://search.cnn.com/search?query=site%3Anexen.net
Encore une découverte créative de RSnake.
Via le blogue de Jérome Plantevin, voici une liste d'outils pour les développeurs Web : couleurs, navigations, menus, photos, gabarits, validateurs, boutons, favicon et générateurs de popup contextuels. Une mine d'informations.
LooGaroo (le nouveau manucorp) part en guerre contre les messages liés aux connexions MySQL : ces derniers se retrouvent trop souvent sur un site Web, et immanquablement dans les moteurs de recherche. Le lien Google ci-dessous vous mène directement à tout une collection de site qui n'ont pas protégé leur connexions!
Quand la base ne peut pas être contactée, le script n'est pas interrompu. Pire encore, si la connexion a été mise en variable, ce n'est pas une ressource qu'on y retrouve, mais un booléen. Et les messages d'erreurs apparaissent immédiatement et en public.
Deux solutions à ce problème : le premier est de toujours vérifier la valeur retournée par mysqli_connect, et de s'assurer qu'on a bien une ressource (ou un objet).
La deuxième est de mettre error_display à off dans la configuration : cela ne supprimera pas l'erreur, mais cette dernière sera masquée.
LooGaroo lance une grande campagne pour réduire le nombre de presque 800 000 sites qui affichent ces erreurs!
Vous pouvez suivre le deuxième lien de cette page pour voir nexen.net affiché sur le site de CNN. Pour être exact, sur la page de recherche, mais la tactique ci-dessous peut être payante pour masquer un site en le couvrant d'un autre site plus crédible.
Il suffit d'utiliser les opérateurs de recherche du moteur pour forcer ce dernier à trouver une page particulière, et l'afficher dans un autre domaine. Dans l'URL ci-dessous, vous pouvez voir 'search.cnn.com' et peut-être pas le site final.
http://search.cnn.com/search?query=site%3Anexen.net
Encore une découverte créative de RSnake.
«Je me souviens avoir longuement étudié le marché lorsque je suis passé de mon antique Apple ][c à un Macintosh LC : parmi les raisons qui avaient poussé mon frère Ghislain et moi vers cette...
« Vous pouvez trouver que le concept de données statiques en PHP 5 est plutôt difficile à comprendre, ou même inutile, mais la vérité est que dans des situations réelles, elles peuvent être...
Faire une exportation de données avec mysqldump peut-être très longue. Vous pouvez maintenant allez plus rapidement avec mysqlpdump (notez le 'p' en plus). Cet utilitaire se base sur le mysqldump,...
LAssociation française des Utilisateurs de PHP sassocie à Adobe et Anaska pour vous inviter à un apéro technique gratuit présentant comment créer des applications riches avec PHP et la...
La fondation Eclipse vient d'annoncer la sortie de la version stable de PDT 1.0.
Le PHP Development Tools est, pour rappel, une extension Eclipse permettant à cet éditeur de se doter des fonctionnalités nécessaires au développement PHP (débuggage, colorisation syntaxique, "autocomplétion", et bien d'autres encore).
Le PDT se veut ouvert et extensible. D'après la fondation Eclipse, grâce à son API, il sera relativement aisé de l'enrichir de nouvelles fonctionnalités.
Notons enfin que PDT est le fruit de plusieurs mois de collaboration entre Zend et la fondation Eclipse.
La ville de Lyon a opté pour l'open source pour l’hébergement, la maintenance et l’évolution de ses différents portails web. Les technologies employées sont notamment : serveurs Apache, PHP, Zope/CPS, Linux RedHat, Squid, MySQL et OpenLDAP.
Le site Grenelle environnement, présenté par le ministère de l'écologie, du développement et de l'aménagement durable, est quant à lui un nouvel exemple de l'utilisation de SPIP.
PHP est faiblement typé, et les comparaisons se font généralement intuitivement. Mais il reste quelques situations où il n'est pas facile de comprendre comment ce qui est comparé va être mesuré. Comment PHP compare un tableau et un objet, ou même deux objets entre eux?
Julien Pauli vient de réfléchir longtemps et fort sur cet aspect de PHP, et il vous livre un florilège de cas spéciaux. Accrochez-vous à vos idées reçues!
PHP est faiblement typé, et les comparaisons se font généralement intuitivement. Mais il reste quelques situations où il n'est pas facile de comprendre comment ce qui est comparé va être mesuré. Comment PHP compare un tableau et un objet, ou même deux objets entre eux?
Julien Pauli vient de réfléchir longtemps et fort sur cet aspect de PHP, et il vous livre un florilège de cas spéciaux. Accrochez-vous à vos idées reçues!
En faisant du ménage sur mon portable, je suis retombé sur cette photo plutôt marrante :
Cette photo date du Forum PHP 2004.
J’étais parti faire des courses car on manquait de bouteille d’eau pour les participants et en revenant je me suis trouvé au milieu d’un photoshoot de Rasmus et Zeev pour divers journalistes présents sur place. On (je ne sais plus exactement qui) m’a alors demandé de me mettre à côté d’eux pour le côté fun de la situation…malheureusement (ou heureusement), la photo n’a pas été sélectionnée pour les magazines en question
TYPO3 diffuse un bulletin de sécurité concernant de multiples failles dans l'extension mm-forum.
L'équipe de sécurité de TYPO3 a reporté que de nombreuses failles de sécurité de type injection SQL et Cross Site Scripting étaient présentes dans l'extension non officielle mm-forum et ce jusqu'à la version 0.1.2. Ces failles qualifiées de très importantes sont corrigées dans la version 0.1.3 de l'extension sortie le 19 septembre.
TYPO3 en profite pour rappeler que des consignes en matière de sécurité sont disponibles dans cette documentation et que cette page recense les bulletins de sécurité critiques comme celui-ci.
« L'Open Source s'intègrera à votre réseau que vous le vouliez ou non. Il est devenu totalement impossible d'éviter le sujet »
« Vous devez établir vos critères pour évaluer les logiciels Open Source, ainsi que des procédures pour les adopter et les maintenir. L'Open Source n'est plus un marché de niche ou une mode, c'est devenu un produit courant et qui le restera. »
7 attitudes face à un projet Open Source, et à l'obligation morale de contribuer à un projet qui vous donne tout dès le départ. Comme le dit Derick Rethans, '"la majorité des gens vont dans la catégorie 1 et 2". Malheureusement.
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.48 (entreprise), 4.1.22, ainsi que 5.1.21-beta. Les mises à jour sont recommandées vers ces versions.
6 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Gallery, Joomla, PhpGedView, PhpWiki, mediawiki et phpBB
'Vous n'avez pas besoin de réécrire le même code CSS et XHMLT encore et encore. Quelque soit le projet Web que vous démarrer, il arrive un moment où vous devez définir des classes et des ID que vous avez déjà défini dans des projets précédents. Pour éviter les erreurs inutiles du passé, vous essayerez peut être de démarrer à partir d'un squelette presque parfait. Il va contenir les définitions de base que vous allez ajouter dans votre code à un moment ou à un autre. "
Smashing magazine vous en dit plus sur ces bases de départs CSS. Le terme framework est utilisé ici pour présenter une base de départ, à partir duquel vous pouvez faire évoluer votre charte graphique.
7 attitudes face à un projet Open Source, et à l'obligation morale de contribuer à un projet qui vous donne tout dès le départ. Comme le dit Derick Rethans, '"la majorité des gens vont dans la catégorie 1 et 2". Malheureusement.
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.48 (entreprise), 4.1.22, ainsi que 5.1.21-beta. Les mises à jour sont recommandées vers ces versions.
6 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Gallery, Joomla, PhpGedView, PhpWiki, mediawiki et phpBB
Je reviens sur le pattern Singleton, car actuellement je travaille sur un projet perso et celui-ci m’a posé un probleme…
Dans mon cas précis, je me sers du Singleton pour gerer une classe de Log. On pourrait penser que le Singleton se prete parfaitement a ce type de fonctionnalité, seulement je me suis retrouvé face un probleme qui est en fait une des grandes forces du Singleton, l’initialisation unique …
Je m’explique, dans mon cas j’ai besoin de pouvoir travailler avec de multiples fichiers log, si le nom du fichier est passé en parametre du constructeur, je ne pourrais travailler qu’avec celui-ci, et pour ecrire sur un nouveau fichier je devrais passer par un accesseur qui modifierait l’attribut…, ou encore je devrais passer ma methode permettant l’ecriture du log, le nom du fichier…
<?php
// via le constructeur
$o=Log::singleton(‘file.log’);
$o->log("Une chaine inscrite dans le fichier ‘file.log’");
$o->setFileLog(‘file2.log’);
$o->log("Une chaine inscrite dans le fichier ‘file2.log’");
// via la methode log
$o=Log::singleton();
$o->log(‘file.log’,"Une chaine inscrite dans le fichier ‘file.log’");
?>
Ces deux methodes ne me plaisent pas particulierement, pour résoudre le probleme l’idée est de modifier le Singleton pour qu’il enregistre non pas une, mais de multiples instances de notre classe.
$o=Log::singleton(‘key_file’,‘file.log’);
$o->log("une chaine… dans ‘file.log’");
$o=Log::singleton(‘key_file2′,‘file2.log’);
$o->log("une chaine… dans ‘file2.log’");
Donc si l’instance de la classe n’est pas déj créée, il en crée une nouvelle,l’enregistre dans un tableau et la retourne, si celle-ci est dej créée il la retourne simplement.
"Résumé : j'ai passé 2 ans à essayer de forcer Rails à faire quelquechose qu'il n'était pas capable de faire. Puis, j'ai réalisé que mon vieux langage délaissé (dans mon cas, PHP), aurait été bien plus capable si je le reprenais, avec mes nouvelles connaissances Rails."
Le retour d'un programmeur qui avait abandonné PHP pour Rails, et qui revient à PHP. Lecture fort instructive.
The component was given a little rewrite as expected, but maybe a little bit later than I would have wanted to :-) So it now has its own Rowclass proxy from which you can pull various infos such as current page, page range, next page, etc all exposed as getter methods (that is, getCurrentPage, getPageRange, getNextPage, etc), which you won't really have to worry about since the brand new view helper will take care of that for you. Usage has changed a little, bit, so let's first have a look at what's happening from the controller point of view:
$table = new Riskle_Db_Table_Paginate(new Table, $this->_getParam('page'));
$this->view->rowset = $table->fetchAll();
Not much changed here, except we don't need anymore to call getPaginationInfos(). Nice ! Now the big part, the view:
The view helper uses the neat composite helper trick from naneau - which is a really cool trick, great job naneau my fellow no-more-a-bunny. The first call inits the helper, feeding him the necessary rowset to work on, then you just have to call the methods you need to draw the navigation links. As you may expect, previous and next method will return nothing if no page is available (actually, they return their second argument, which defaults to an empty string).
Also, it's worth noting that the bundled Riskle_Db_Table features the patch from Erik, as well as a totally rewritten fetchCols method (now uses a straight Zend_Db_Select object instead of the ugly trick it used to use).
My code is no longer available on subversion, I moved the project to assembla. Instead ou can download this component from the riskle space's files board (direct download), the file contains all classes needed for the component to work, just unzip it in your include_path and you're set.
The component was given a little rewrite as expected, but maybe a little bit later than I would have wanted to :-) So it now has its own Rowclass proxy from which you can pull various infos such as current page, page range, next page, etc all exposed as getter methods (that is, getCurrentPage, getPageRange, getNextPage, etc), which you won't really have to worry about since the brand new view helper will take care of that for you. Usage has changed a little, bit, so let's first have a look at what's happening from the controller point of view:
$table = new Riskle_Db_Table_Paginate(new Table, $this->_getParam('page')); $this->view->rowset = $table->fetchAll();
Not much changed here, except we don't need anymore to call getPaginationInfos(). Nice ! Now the big part, the view:
The view helper uses the neat composite helper trick from naneau - which is a really cool trick, great job naneau my fellow no-more-a-bunny. The first call inits the helper, feeding him the necessary rowset to work on, then you just have to call the methods you need to draw the navigation links. As you may expect, previous and next method will return nothing if no page is available (actually, they return their second argument, which defaults to an empty string).
Also, it's worth noting that the bundled Riskle_Db_Table features the patch from Erik, as well as a totally rewritten fetchCols method (now uses a straight Zend_Db_Select object instead of the ugly trick it used to use).
My code is no longer available on subversion, I moved the project to assembla. Instead ou can download this component from the riskle space's files board (direct download), the file contains all classes needed for the component to work, just unzip it in your include_path and you're set.
Brian Deshong propose une approche plus efficace pour afficher les utilisateurs en ligne : au lieu de compter sur une base de données, et rafraîchir en permanance une liste d'utilisateurs, pourquoi ne pas passer par memcached, et mettre à jour les informations avec un processus en tâche de fond.
Une question revient souvent : à quelle fréquence les données doivent elles être rafraîchit. Souvent, un petit délai de quelques secondes peut soulager grandement votre architecture, sans qu'elle remette en cause les fonctionnalités.
Les premiers pas d'un administrateur MySQL qui se met à Oracle. Il y décrit plusieurs réflexes d'administrateur MySQL qui sont confrontées à une réalité Oracle. Cela permet de mieux comprendre les différences entre les bases de données, en plus d'aider ceux qui doivent vivre dans les deux mondes.
Quand un script atteint une durée d'exécution trop grande, il faut l'accélérer. Pour cela, deux options : soit on micro-optimise le site, avec des remplacements tels que ceux listés ci-dessous. Ou bien vous réécrivez l'algorithme du script, pour gagner en exécution.
sizeof vs count
is_int vs is_integer
chop vs rtrim
doubleval vs floatval
fwrite vs fputs
implode vs join
ini_alter vs ini_set
Et pour ceux qui ne comprendrons pas le pince-sans-rire de l'article, vous pouvez enchaîner sur le suivant, où Jonathan Street en dit plus sur l'intérêt de ces ateliers de performances.
L'équipe de PHP Québec vous invite à son Assemblée Générale qui aura lieu le samedi 27 octobre 2007 à l'ETS. Le lieu exact sera affiché sur le site web.
Ordre du jour:
* Présentation des états financiers * Aborder la fusion * Présentation des postes et des candidatures * Vote et dépouillement des votes * Annonce officielle du résultat des élections
Pour commencer, l'équipe de PHP Québec présentera les états financiers et fera le tour des documents «Présentation aux Membres» et «Règlements Internes».
En deuxième partie, la fusion PHP Québec / Conférence PHP Québec sera présentée aux membres.
Ensuite, les personnes désirant devenir membre pourront s'inscrire sur place et participer au vote. Les cartes de membre seront distribuées le jour même ou envoyées par la poste la semaine suivante.
Par la suite, tous les candidats ayant postulé pour un poste bénéficieront de deux minutes pour se présenter. Les candidats doivent se déclarer au plus tard le mardi 23 octobre en envoyer leur intention et une courte description à board@phpquebec.com La date limite pour se porter candidat est le 23 octobre 2007 à 23:59, heure du Québec.
L'Assemblée Générale se terminera avec l'élection du nouveau Conseil d'Administration de PHP Québec pour la saison 2007-2008.
Voici la liste des postes pour lesquels vous pouvez postuler :
* Président * Secrétaire * Trésorier * Responsable du serveur web * Responsables de groupe
Les postes de président, de Secrétaire et de responsable de groupe de Montréal et Québec sont vacants. Les poste de Président et de Secrtaire devront être comblés.
À noter:
* Selon la politique électorale (cf. Règlement Interne section 5.1), un maximum de 50% des postes sont renouvelables. * Toutes les personnes désirant voter ou postuler pour un poste devra être membre en règle à compter du 20 octobre 2007, tel que mentionné dans les articles 2.0 et 5.4 du Règlement Interne. * Toutes les personnes désirant postuler pour l'un de ces postes doivent faire parvenir un courrier électronique à board@phpquebec.org. Joignez-y le titre du poste, une courte description de vos accomplissements et un paragraphe décrivant ce qui fait de vous le candidat idéal pour ce poste.
Pour plus de détails sur les responsabilités liées à chacun de ces postes, veuillez vous référer au Règlement Interne section 4.0.
"Au début, la refactorisation était un peu de la magie. Avec l'expérience, j'ai appris en la voir comme une technique, et désormais, la refactorisation est intégrée dans mon environnement de...
phpMyEdit produit du code PHP pour afficher et modifier des tables MySQL, en HTML. Tout ce que vous avez besoin de faire est un programme simple pour appeler ces classes...
iCalcreator est une classe PHP pour gérer des fichiers au format iCAL, dans des systèmes non-calendaire, tels que des CMS, blogues, site de nouvelles ou d'autres applications en ligne qui gèrent...
« Querysniffer sert à lire des données sur un serveur en
production. Il est impossible de savoir ce qui se passe sur
un serveur MySQL sans activer le log de requêtes général.
Pour cela,...
« Un de mes collègues travaille sur un nouveau projet PHP et se lamente du manque d'outil pour assurer la migration de base de données. En y réfléchissant, j'ai déjà voulu ce type de framework...
"Dans cet article, je vais simplement exposer du code pour vous montrer comment je gère le processus de migration, afin de vous montrer mon approche, ce qui marche et ce qui ne marche pas, tout en espérant que certains d'entre vous viennent partager leurs connaissances et expériences de migration."
Recu directement dans la boîte aux lettres des webmestres de PHP, un mail d'un chef de projet de Microsoft indique qu'ils 'savent que le support de PHP par Windows a été médiocre par le passé.' et qu'ils 'travaillent fort opur améliorer cela.' brrrr
"Pour un projet futur, j'ai besoin d'utiliser zip ou gzip pour créer des archives à partir de fichiers ou de dossiers, dans un autre dossier. Une recherche rapide sur Google m'a conduit à la classe Create ZIP File de Rochak Chauhan. Je l'ai testé avec deux autres scripts, et je dois avouer que cette classe fonctionne le mieux aquand vous ajoutez les fichiers un par un."
Il semble que de plus en plus d'administrateurs ait un pied dans les deux mondes : Oracle et MySQL. On voit fleurir les blogues d'admin MySQL qui doivent se mettre à Oracle, et réciproquement.
Le dernier billet que je viens de découvrir a mis en place le projet d'une correspondance entre les deux serveurs : c'est à dire comment résoudre dans l'autre serveur les problèmes du premier. Apache est le serveur HTTP de prédilection avec MySQL, alors que Oracle Application Server sera le choix pour Oracle.
Cet article est déjà long, mais n'est pas fini. L'auteur indique qu'il va ajouter des informations au fur et à mesure de sa propre progression, mais vous pouvez lui en soumettre d'autres.
Gopal Vijayaraghavan explique en détails les problèmes qui se posent avec les caches dynamiques (comme APC), et les inclusions conditionnelles.
Lorsque différents fichiers inclus portent le même nom, PHP sait le résoudre juste à temps, mais les caches d'opcode ne savent pas faire la différence, et reprennent le dernier (ou premier), qu'ils ont déjà compilé. Ce qui peut conduire à des casse-tête pour comprendre pourquoi cela marche à un moment, et pas à la page d'après.
Selon Lukas Smith, MySQL AB va affecter un programmeur pour revoir le code de PDO_MySQL (le pilote MySQL de PDO pour PHP), afin de le nettoyer, d'ajouter des tests et toutes les fonctionnalités qui seront utiles. Cet effort semble se faire en plus de l'investissement actuel dans l'extension mysqlnd (mais peut-être est-ce que finalement ce seront les mêmes qui travailleront dessus?).
De retour de la conférence développeur de MySQL, à Heidelberg, Lukas rapporte différents développements pour MySQL dans les prochains mois :
L'optimiseur SQL va améliorer sa gestion des commandes préparées, puis des sous-requêtes
Les sauvegardes en ligne sont prévues pour MySQL 5.2
Les LOB seront streamés directement depuis la base de données, en HTTP (il sera plus facile de stocker ses images en base!)
La réplication accepte des schéma de base différentes entre le maître et l'esclave
En PHP, il est possible de compresser les sources envoyés vers le navigateur afin d’économiser de la bande passante. Cela s’appelle la compression zlib. Il est possible de l’activer directement dans le fichier php.ini grâce à la directive zlib.out_compression.
Mais voilà, on n’a pas toujours accès au fichier php.ini. Vous allez alors me dire
“bah, t’as qu’à faire un ini_set() dans ton code!”.
Je suis d’accord, sauf que l’utilisation d’ini_set() est gourmande en temps d’exécution vu que l’a conf est rechargée à chacun de ses appels.
Une solution tierce que m’a donné un stagiaire sur une formation que j’anime cette semaine est de passer par l’output buffering.
Il est possible de passer une fonction de callback à ob_start(). Cette fonction sera exécutée sur l’ensemble de votre buffer, donc de votre page. Or il existe une fonction spécifique en PHP permettant d’effectuer la compression zlib avec l’output buffering : ob_gzhandler()
En complant les deux, on obtient une compression zlib sur sa page :
ob_start(’ob_gzhandler’);
Cette astuce est certainement connue de beaucoup de monde vu qu’elle est directement décrite dans la documentation de PHP (http://fr.php.net/manual/fr/function.ob-gzhandler.php) mais je doit avouer que je n’étais jamais tombé dessus.
Si vous êtes dans le secteur de l'informatique, PHP ou MySQL dans votre CV devrait lever une armée d'offres d'emploi. Rien qu'en regardant dans les derniers mails que j'ai reçu, on trouve des offres spécifiques dans de nombreux secteurs.
Zak Urlocker explique d'ailleurs comment MySQL arrive à attirer à eux des talents du monde entier. MySQL AB est distribué dans 30 pays, ce qui permet aux développeurs de travailler depuis leur maison, d'éviter les encombrements du trafic et les crises de réunionite. C'est l'aventage géographique.
PHP dispose d'un système d'alias pour ses fonctions : ils permettent de donner plusieurs noms à une même fonctionnalité, mais c'est toujours le même code qui fait le travail sous-jaçent. C'est pratique pour assurer la compatiblité ascendante (wddx_deserialize et wddx_unserialize) , ou pour donner des noms de fonctions qui seront faciles à retenir pour tous (sqlite_has_more et sqlite_valid).
Comme ce n'est pas évident qu'une fonction PHP est un alias d'une autre, il reste des cas où les programmeurs mégotent les avantages respectifs de join et implode, et tentent de les départager. Pour ces futures discussions stériles, vous pouvez vous reporter à la liste d'alias de Sean Coates.
Je suis toujours fasciné par la communication autour des techniques d'entreprises que MySQL peut développer. Outre la distribution mondiale des employés (300 développeurs dans 30 pays), les fêtes de Noël en ligne qui durent 24 heures, et le responsable de l'ingénierie qui "commence tôt et finit tard".
Le dernier billet en date est consacré à la rencontre de Heildelberg (magistralement organisée par Georg Richer, pourquoi ne suis-je pas étonné?) et aux aspects nécessaires pour réussir une telle réunion. Peut-être que Pascal Borghino aura des retours lui aussi? patience...
Comme son nom l'indique, le but de la Standard PHP Library, ou SPL, est de proposer des interfaces standards pour que les développeurs tirent le meilleur de la programmation objet de PHP 5. Cette bibliothèque d'interface crée des interfaces pour certaines fonctionnalités internes de PHP, de manière à ce qu'elles s'intègre bien mieux avec le moteur interne de PHP. Les fonctionnalités incluent la possibilité de définir les objets pour être lu avec une boucle foreach, ou SimpleXML. L'essentiel des fonctionnalités vient des itérateurs.
Les éléphpants sont finis! Ils sont maintenant partis de leur pouponnière de Shanghaï, et traversent actuellement l'Océan Pacifique. La date d'arrivée chez Nexen est autour du 20 Octobre, ce qui me laisse du temps pour dégager 6 mètres cube d'espace de rangement, développer mes muscles pour déplacer 300 kg de peluches (record du monde?), et trouver un stationnement pour un semi-remorques (les éléphants ne se déplacent pas en limousine, mais en semi-remorque 18 roues).
Pour les prises de commandes, vous aurez quelques options : me rencontrer à une conférence, comme celle de Washington (USA), ou bien celle de l'AFUP (Paris); rencontrer votre groupe d'utilisateur local (comme l'AFUP, par exemple), ou bien prendre commande sur le site de nexen.net. Pour cette dernière solution, je vous tiens au courant dès que j'ai du nouveau.
PHP Developpement Tools (PDT) sont des outils de développement PHP basé sur la plate-forme de développement Eclipse. Ils fournissent un éditeur, un débogueur et un inspecteur de code....
lazierLoad est un script JavaScript qui affiche un site en ne chargeant que les images que l'utilisateur voit. C'est à dire seulement celle que son navigateur affiche présentement`
« Vous n'avez pas besoin de réécrire le même code CSS et xhtml encore et encore. Quel que soit le projet Web que vous démarrez, il arrive un moment où vous devez définir des classes et des...
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.
La clause LIMIT sert à réaliser ces barres de navigation, en découpant un résultat en plusieurs pages. Mais si elle est prodigieusement utile dans cette situation, elle est à l'origine d'un sérieux gâchis d'octets et de lignes. Pour dépasser l'utilisation traditionnelle de LIMIT, vous pouvez appeler à la rescousse les bonnes vieilles JOINTURES.
Au passage, vous verrez la conversion de LIMIT en JOIN, la création d'une table d'assistance, comment numéroter des lignes dans une table, mysqlslap, les variables MySQL, et les insertions de masse. Bonne lecture.
Malheureusement, en passant à PHP 5, nous ne pouvons plus vraiment [Utiliser NuSOAP] : et oui, j'ai bien vu les correctifs du type "Changez cette ligne par ceci", mais tout cela me rend nerveux. J'ai donc décidé de passer à l'extension SOAP de PHP 5.
Heureusement, cela a été plutôt facile, et j'ai pensé qu'il était temps de partager mon expérience avec ceux qui chercher à faire la même migration.
J’adore PHP, je travaille avec ce langage depuis maintenant 8 ans et je le trouve vraiment pratique et tellement facile d’utilisation.
Mais rien n’est parfait dans ce monde et PHP n’échappe pas à cette règle.
A quoi pensaient les développeurs de PHP lorsqu’ils ont pondu les fonctions de gestion des chaînes! Rien n’est normalisé, ni les noms des fonctions, ni leur prototypage, ni les valeurs qu’elles renvoient.
Des exemples ?
C’est parti, trouvez les erreurs :
str_repace() VERSUS strstr()
strip_tags() VERSUS stripslashes()
stripos() VERSUS str_ireplace()
strcasecmp() VERSUS stristr()
html_entity_decode() VERSUS htmlentities()
nl2br() VERSUS strtolower()
str_replace ( mixed $search, mixed $replace, mixed $subject [, int &$count] ) VERSUS strstr ( string $haystack, string $needle )
etc…
Il semblerait que deux bibliothèques ont été réunies, chacune avec des normes à l’opposée de l’autre.
CrawlTrack vous dit tout sur l'activité des robots sur votre site. Cette nouvelle version s'intéresse aussi aux "mauvais robots", ceux qui utilisé par des hackers peuvent ruiner des heures de travail. CrawlTrack est maintenant capable non seulement de détecter des tentatives de piratage mais aussi de les bloquer avant que le mal ne soit fait.
En lisant ce blogue, j'ai reconnu la conversation classique : avant de pouvoir expliquer ce qu'est une CSRF, il faut mettre en scène l'ensemble (la victime, le site vulnérable aux XSS, l'internaute innocent), puis expliquer aussi les XSS. Au final, si l'interlocuteur ne comprend que la moitié du schéma, il écarte le tout du revers de la main, et dis : "bah, j'ai mis des filtres, donc pas de XSS chez moi."
En fait, être vulnérable aux CSRF est distinct de la XSS. Il faut se poser la question : "Quelles sont les opérations sur mon site qui peuvent être simulées entièrement en JavaScript ou bien avec une URL seule.". Par exemple, si vous pouvez effacer des billets de votre blogue avec une URL du type 'http://www.site.net/efface.php?id=10", alors vous êtes vulnérables aux CSRF. L'utilisation de JavaScript permet ici de dépasser le stade de la simple URL, et de faire des POST, ou d'autres manipulations complexes, comme des enchaînements de pages.
Le danger vient donc du fait que les opérations sur votre site peuvent être exécutées de manière automatisées, sans intervention de l'utilisateur. Ce sera donc le vecteur de l'attaque CSRF. Il reste maintenant à trouver un site ayant une XSS (le site victime final ou bien un autre, cela n'a pas d'importance. Piochez chez xssed pour avoir de belles listes de sites populaires), et un utilisateur ayant suffisamment de droits.
C'est exactement le problème qui a été rapporté sur GMail récemment : une fonction anodine, l'ajout de filtre, peut être scriptée. On peut donc pousser un utilisateur ayant un compte GMail à installer un filtre automatique qui transmet les messages à une autre adresse.
Lorsque vous testerez la sécurité du site, demandez-vous si vous ne pourriez pas écrire un script JavaScript pour automatiser les opérations critiques. Si c'est le cas, vous avez votre vecteur. Pour les bloquer, il faut passer par des informatiques auxquelles JavaScript n'a pas acces, comme une demande de mot de passe, des captcha, ou des technologies connexes (images, animations, confirm(), etc).
Deux articles intéressants, signalé par Chris Shiflett, traitent des problèmes de sécurité qui dépassent l'utilisation de mysql_escape_string. On l'aborde aussi dans le livre 'Sécurité PHP 5 et MySQL 5'. En bref, la fonction de protection n'est pas suffisante pour pallier à tous les problèmes.
En fait, certains caractères spéciaux ne sont pas protégés par cette fonction. C'est le cas des % et _, qui sont utilisés dans les expressions LIKE. Certaines clauses utilisent simplement des nombres, ou encore des parenthèses.
L'article de webappsec propose d'ailleurs une liste de vecteurs d'injections intéressants pour vos propres tests d'intrusion.
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.48 (entreprise), 4.1.22, ainsi que 5.1.21-beta. Les mises à jour sont recommandées vers ces versions.
6 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
ADOdb, Gallery, PHP Nuke, PhpGedView, WordPress et phpBB
Encore une nouvelle version de PHPIDS. Plusieurs corrections de bogues. Les filtres sont plus efficaces : nombre de filtres réduits, plus rapides, meilleures couvertures des types d'attaques, et...
This release fixes a nasty bug in Riskle_Db_Table::fetchCols which prevented from retrieving the right count of cols involved in the query.
The table component has also been slightly rewritten following Erik's suggestion to move the parent mapping into _fetch. The parent mapping itself has been improved to allow "multi level" table joining. This will be best explained with an example:
Say you have three table, Foo, Bar and Quux, and you would like to execute the following query:
SELECT * FROM Foo JOIN Bar ON Foo.bar_id = Bar.id JOIN Quux ON Bar.quux_id = Quux.id
This is now possible with the following mapping (in Foo's class of course):
This release fixes a nasty bug in Riskle_Db_Table::fetchCols which prevented from retrieving the right count of cols involved in the query.
The table component has also been slightly rewritten following Erik's suggestion to move the parent mapping into _fetch. The parent mapping itself has been improved to allow "multi level" table joining. This will be best explained with an example:
Say you have three table, Foo, Bar and Quux, and you would like to execute the following query:
SELECT * FROM Foo JOIN Bar ON Foo.bar_id = Bar.id JOIN Quux ON Bar.quux_id = Quux.id
This is now possible with the following mapping (in Foo's class of course):
Le bulletin d'informations en Podcast de ProPHP propose
les actualités discutées pour le mois de septembre :
. PHP Quebec
. addslashes vs mysql escape string (prise sans scrupule du blog de Paul)
. Pourquoi le codage des caractères
. Zend Recherche Lucene (VIEILLE ALERTE de NOUVELLES de *AHEM*)
. Ouvrir Komodo
. Nouvel Realease pour phpMyAdmin
. Pourquoi PHP bat Ruby
. Pourquoi est-ce que je devrais contribuer ?
. Rejoindre la Team de PHP Doc
. PHP Code Sniffer
. Genius Y! Employée à Bangaliore
. PHP Podcasts
Le référencement d'un site internet est un sujet très important comme le suivui de son positionnement, et de connaitre les différents passages sur votre site par des robots.
La nouvelle version de CrawlTrack vous permet d'obtenir ce genre d'informations, mais repèrent aussi les "mauvais robots" qui peuvent être utiliser par les hackers.
Bien sur, Crawltrack permet de repérer les tentatives de piratage et aussi de les bloquer avant de subir les premiers dommages.
A PEAR package for the 1.0.2 version of the Zend Framework is now available from the PEAR PHPMafia channel. As usual, to install just issue the following:
A PEAR package for the 1.0.2 version of the Zend Framework is now available from the PEAR PHPMafia channel. As usual, to install just issue the following:
PHP 5.3 commence sa vie par un vote sur les listes internes de développement. Les nouveautés incluent plusieurs fonctionnalités de PHP 6 qui seront introduites plus tôt que prévue (comme les espaces de noms, __callStatic), et effectue un ménage interne (réécriture de l'analyseur php.ini, apparition de E_DEPRECATED). On note aussi l'inclusion dans la distribution de mysqlnd, ainsi que l'apparition du Late Static Binding.
Au final, une évolution en douceur vers PHP 6. Les premières versions sont disponibles sur php.net.
A noter que Johannes Schlüter prend la relève de Ilia Alshanetsky pour assurer la publication des prochaines versions de PHP. Après plusieurs années de bons et loyaux services, Ilia laisse la place à un nouveau Release Master : ce dernier à la lourde tâche de fédérer les contributions à PHP, de les intégrer sainement dans le code, et de produire le code qui est livré successivement aux betas testeurs et au public.
MySQL 5.1.22, la première version Release Candidate (Candidat à la publication) a été publiée. Son niveau de stabilité approche les standards de qualité nécessaires pour une publication officielle (GA), et elle entre dans une période intensive de recherche de bogues. On peut prévoir une publication finale dans les prochains mois.
Une nouvelle fonctionnalité : l'option innodb_autoinc_lock_mode permet de modifier le comportement de verrouillage de InnoDB
Corrections MySQL 5.1.22 : 17 bogues ont été corrigés, et notamment : NDB Cluster, InnoDB. Tous des bogues ouverts.
Le logiciel open source danalyse des statistiques de fréquentation pour les sites Internet et les blogs est disponible en version 3.0. Cette nouvelle mouture se veut résolument orientée vers les nouveaux types de contenu Web 2.0 avec notamment une nouvelle interface XHTML/CSS simple et efficace permettant dinstaller et de prendre en main loutil avec encore plus de facilité que les versions précédentes.
Au niveau fonctionnel, loutil permet davoir une vision densemble du nombre et du profil des visiteurs parcourant le site Internet ou le blog sur lequel il est installé en fournissant des informations détaillées sur la provenance, la situation géographique, le nombre de pages consultées, la configuration logicielle, lévolution des mots clés sur les 10 derniers jours et bien dautres informations encore, accessibles très facilement depuis linterface Web grâce notamment à lintégration du framework Ajax « JQuery 1.2 » ou par un fil RSS publié par lapplication.
SpongeStats se démarque de ses concurrents par sa simplicité et sa convivialité et par les informations de statistiques des fils RSS de votre site (agrégateurs, plateforme, hits, etc.). Cette version est disponible en 3 langues, français, anglais et allemand mais les auteurs appellent les utilisateurs à contribution pour améliorer cette localisation.
Plusieurs widgets sont prévus dans les semaines à venir, pour visualiser les statistiques en temps réel dans iGoogle et NetVibes, mais aussi pour intégrer encore plus facilement loutil dans Dotclear (1 et 2) ainsi que dans Wordpress, Joomla et Spip.