PHP – Fonction is_url()

function is_url($url) {
$urlregex = "^(http|https|ftp)?\:\/\/";
// USER AND PASS (optional)
$urlregex .= "([a-z0-9+!*(),;?&=$_.-]+(\:[a-z0-9+!*(),;?&=$_.-]+)?@)?";
// HOSTNAME OR IP
$urlregex .= "[a-z0-9+$_-]+(\.[a-z0-9+$_-]+)*"; // http://x = allowed (ex. http://localhost, http://routerlogin)
//$urlregex .= "[a-z0-9+$_-]+(\.[a-z0-9+$_-]+)+"; // http://x.x = minimum
//$urlregex .= "([a-z0-9+$_-]+\.)*[a-z0-9+$_-]{2,3}"; // http://x.xx(x) = minimum
//use only one of the above
// PORT (optional)
$urlregex .= "(\:[0-9]{2,5})?";
// PATH (optional)
$urlregex .= "(\/([a-z0-9+$_-]\.?)+)*\/?";
// GET Query (optional)
$urlregex .= "(\?[a-z+&$_.-][a-z0-9;:@/&%=+$_.-]*)?";
// ANCHOR (optional)
$urlregex .= "(#[a-z_.-][a-z0-9+$_.-]*)?$";
return eregi($urlregex, $url)?true:false;
}

Source: topflood.com

App

Activer Apache2 et PHP 5 sous Mac OS Snow Léopard

Dans un terminal:
sudo vi /private/etc/apache2/httpd.conf

Décommenter
LoadModule php5_module libexec/apache2/libphp5.so

Préférences Système > Partage > Partage web

Tester: http://localhost

Pour ajouter du code PHP (DocRoot Apache):
/Library/WebServer/Documents/

Debug PHP – Installer et configurer Xdebug / Webgrind

Xdebug

http://xdebug.org/

Installer l’extension

apt-get install php5-xdebug

Configurer xdebug

find /usr/lib/php5/ -name xdebug.so
/usr/lib/php5/20051025/xdebug.so

/etc/php5/apache2/conf.d/xdebug.ini

#extension = xdebug.so
zend_extension = /usr/lib/php5/20051025/xdebug.so
; Profiling
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir = /dev/shm
xdebug.profiler_output_name = cachegrind.out.%t.%p

Webgrind

http://code.google.com/p/webgrind/

Installer

wget http://webgrind.googlecode.com/files/webgrind-release-1.0.zip
unzip webgrind-release-1.0.zip
cd webgrind

Configurer webgrind

config.php
static $profilerDir = '/dev/shm';

En pratique

Activer xdebug sur une page à débuguer

http://url/page.php?XDEBUG_PROFILE=1

Génère un fichier de données à plat de type ASCII text
cachegrind.out.1277111621.4418

Débuguer avec webgrind !

http://url/webgrind/

webgrind génère un fichier binaire de type DBase 3 index file
cachegrind.out.1277111621.4418.webgrind

webgrind charge le fichier .webgrind permettant le profilage du code PHP:

App

La date en Français avec une fonction PHP

Une méthode consiste à définir 4 tableaux :

  • 2 tableaux de même taille pour les jours
  • 2 tableaux de même taille pour les mois

str_replace() se chargera du reste en se servant des tableaux comme des tableaux de correspondance FR <=> US/EN.

function datefr() {
$date = date('l d F Y');
$days = array(
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
);
$jours = array(
"Lundi",
"Mardi",
"Mercredi",
"Jeudi",
"Vendredi",
"Samedi",
"Dimanche"
);
$months = array(
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
);
$mois = array("
Janvier",
"Fevrier",
"Mars",
"Avril",
"Mai",
"Juin",
"Juillet",
"Aout",
"Septembre",
"Octobre",
"Novembre",
"Decembre"
);
$date =  str_replace($days, $jours, $date);
$date =  str_replace($months, $mois, $date);
return $date;
}

App

App

App

Présentation de Zend Framework par Julien Pauli

Contexte

Depuis Mars 2006 est apparu le Framework maison de chez Zend, pour PHP5. Pour rappel, Zend est une société qui commercialise tout un tas d’outils pour les entreprises, autour de PHP. Zend Framework est un d’entre eux si ce n’est qu’il n’est pas commercialisé : distribué sous « New BSD Licence », il est gratuit, libre, conçu par une grande communauté de développeurs interessés dont je fais parti, piloté par Zend, et il propose génération de documents PDF, connecteurs vers de multiples services webs, connecteurs vers des
bases de données diverses et support de MVC…

On peut utiliser le Framework en tant que cadre de développement directif, ou l’utiliser dans le cadre d’un simple support bibliothécaire, à la manière de PEAR.
Le projet Zend Framework est en perpétuel développement, et certains composants sont développés par les entreprises intéressées : les Webservices Gdata sont développés par Google eux-mêmes, mais dans le respect de la licence du projet.

Zend Framework reprend en tout point le concept de PHP lui-même : libre, ouvert, simple, efficace et puissant : un vrai régal.

Préambule

Le Zend Framework (ZF) fait beaucoup de bruit sur la toile du développement PHP. Il sait se classer dans la vague des Framework « reconnus » sous PHP. Google le présente d’ailleurs parmi ses outils pour developpeurs. J’ai décidé de vous y faire goûter du bout des lèvres ;-) .
Ce Framework a bien grandi. En l’espace d’un an, il a changé de licence pour s’ouvrir au développement
communautaire, et il accuse déjà une quarantaine de composants opérationnels. Il est vrai qu’à ses débuts, début 2006 (le projet date d’Octobre 2005), tout était différent. Beaucoup de refactorisation et de correction de bugs ont été faits. Une si belle progression n’aurait pu être possible sans un modèle de développement communautaire, mais bien architecturé.
Tout le monde peut reporter un bug sur le tracker, proposer ses idées, faire partager ses expériences, tout ceci orchestré par l’équipe de gestion du projet de Zend.
Personnellement, j’ai bien aimé mes débuts sous ZF, c’est en découvrant peu à peu sa structure et son articulation que j’ai décidé de contribuer un peu, tout d’abord via ce tutoriel de présentation. Mon blog regorge d’informations diverses concernant ZF, et j’écris aussi d’autres articles ou ateliers techniques. ZendFramework représente aussi une partie de mon travail à titre professionnel, en effet je suis formateur sur ce Framework et j’aide à son déploiement ou son utilisation dans le milieu professionnel en consulting architectural.
Je bosse sous ce Framework depuis environ Octobre 2006 (0.2), et je suis de près tout ce qui le touche, notamment son développement actuel qui tend à se rapprocher d’un style Ruby On Rails, de par certaines caractéristiques. Nul doute que les programmeurs habitués à du « full object », ne seront pas dépaysés (les adeptes de Java par exemple).

Je suis contributeur, je participe donc au développement de certains composants ainsi qu’à la correction de bugs et à l’amélioration de certaines fonctions. Il fallait bien un membre du club developpez.com qui mette les mains dedans, et Zend a bien apprécié le geste en plus ;-) .
A la tête du Zend Framework, on trouve Andi Gutmans, qui n’est autre qu’un des 2 architectes responsables du Zend Engine, le moteur de PHP ayant succédé au projet initialement conçu par Rasmus Lerdof.
Le but de Zend est simple : faire de ZF un framework calqué sur PHP : aussi simple, intuitif, et puissant, que le langage PHP lui-même, et je dois dire que pour le moment, c’est nettement le cas !
Certes il existe des tonnes de frameworks dans l’univers de PHP, et des bons en plus, mais on peut dire du Zend Framework qu’il est amené à devenir la brique que tout développeur PHP sera à même de savoir utiliser, surtout dans un environnement professionnel.
Car c’est bien là que Zend intervient : l’entreprise vend du support et des services autour de produits, eux, libres : PHP d’abord, et aujourd’hui : ZendFramework. Une entreprise est bien plus rassurée lorsqu’un support professionnel est présent derrière un produit, à fortiori libre. Passer le framework sous une licence « ouverte » est donc bienvenu de la part de Zend.

ZF n’est pas fermé et peut se relier à d’autres Frameworks; de même , il y a 2 moyens d’utiliser ZF :

  • en « glue » : vous utilisez uniquement les composants dont vous avez besoin, ponctuellement, à la manière de PEAR.
  • Autre méthode: « full-stack » : vous décidez dès le départ de bâtir votre architecture entière sur ZF.

Cette perméabilité de Zend Framework en fait sa force ultime : vous pouvez doucement apprendre à le maitriser, avant de totalement l’utiliser, à ne plus pouvoir vous en passer; car ZF a bel et bien pour objectif de répondre aux besoins les plus redondants du développement de sites Internet en PHP
ZF est la « surcouche » fonctionnelle de PHP5, testé, sécurisé, développé et pensé par des ingénieurs, architectes et développeurs d’importance, le tout dans un esprit collaboratif, libre et open source.
L’AFUP, Association Française des Utilisateurs de PHP, dont je suis membre, a organisé début décembre 2006 une réunion ayant pour thème le Framework de Zend. Zeev Suraski était présent. Je vous revoie sur cette page pour plus d’infos, et pour télécharger les slides. Il ne s’agit pas ici de dresser un comparatif avec d’autres Frameworks PHP, mais tout simplement un avant goût sous forme de mini tutoriel, qui va s’étendre profondément sur certains points, ceci dans le but de faciliter votre apprentissage, et ce quel que soit votre niveau d’expérience dans la programmation sous Framework.
Vous allez au fur et à mesure ressentir un fait avéré : le ZendFramework offre une souplesse de programmation vraiment inégalée actuellement.

Introduction

Un Framework apporte un cadre standard pour le développement d’applications à interface web.
Il agrège différentes classes, ce qui augmente la couverture fonctionnelle d’un langage tout en en simplifiant sa manipulation.
Il permet à plusieurs personnes (notamment en Entreprise) de s’organiser autour d’un projet, quelle que soit sa taille.
Il introduit des règles de codage et d’architecture qui sont là pour faire en sorte que toutes les personnes relatives au projet parlent la même langue. Tous les développeurs vont ainsi écrire du code à partir du même cadre de travail, et l’échange des données entre eux est très facilité.
Les architectes et les chefs de projet s’y retrouvent aussi, car la puissance de la programmation orientée objet leur permet d’utiliser des méthodes connues et ayant fait leurs preuves, comme la modélisation UML par exemple.
La conception objet permet aussi un fort découplage applicatif, la réutilisabilité maximale du code, et favorise grandement les étapes de test et de gestion de la qualité d’un produit.
Avec à ce jour 48 packages fonctionnels; le Zend Framework propose « une collection modulaire de classes PHP 5 qui simplifient les tâches courantes du développeur ».
Il s’agit pour l’essentiel de fonctionnalités très utilisées comme une couche d’abstraction de bases de données (fondée principalement sur PDO), le support de MVC, la génération de documents PDF, l’envoi d’e-mails, la gestion de flux de syndication Atom et RSS, la gestion de l’internationalisation…
Le Zend Framework intègre aussi des « connecteurs » pour les services en ligne de Yahoo!, Google, Amazon, Flickr.
On peut noter aussi une classe de gestion des dates, un package complet pour l’indexation de contenu basé sur le célèbre moteur Lucène de l’Apache Group, tout un tas d’outils facilitant l’internationalisation, les sessions, etc.
Pour s’assurer du succès de son Framework, Zend s’est appuyé sur un modèle participatif et communautaire impliquant plus de 180 participants au nombre desquels figurent de grands acteurs comme Yahoo!, Google, IBM et General Electric. La concision du code qu’apporte un Framework de haut niveau, plus fonctionnel que technique, augmente la productivité des développeurs. Par exemple, il faut environ 15 lignes de code PHP pour afficher un flux RSS, tandis que 5 suffisent avec le Zend Framework.

Télécharger le PDF complet

App

Plugin phpScheduleIt – checksrv.php

Script PHP checksrv.php
Contrôle la disponibilité d’un serveur

Pré-requis sur l’utilisation de PHP en cron:

http://www.devarticles.com/c/a/PHP/PHP-CLI-and-Cron/

checksrv.php

#!/usr/bin/php -q

#WELCOME
#print « check_dispo.php »;

//Date
$today = date(‘d-m-Y’);
$today_us = date(‘m-d-Y’);
$today_timestamp = strtotime(date(‘Ymd’));

$days = array(« Monday », »Tuesday », »Wednesday », »Thursday », »Friday », »Saturday », »Sunday »);
$jours = array(« Lundi », »Mardi », »Mercredi », »Jeudi », »Vendredi », »Samedi », »Dimanche »);

$months = array(« January », »February », »March », »April », »May », »June », »July », »August », »September », »October », »November », »December »);
$mois = array(« Janvier », »Fevrier », »Mars », »Avril », »Mai », »Juin », »Juillet », »Aout », »Septembre », »Octobre », »Novembre », »Decembre »);

//Couleurs
function colorize($color,$string)
{

switch($color)
{
// INFOS COLORS
// ;40m <=> background dark

case « cyan »:
$out = « \033[36;40m".$string."\033[37m";
break;

case "red":
$out = "\033[31;40m".$string."\033[37m";
break;

case "red_bold":
$out = "\033[1;31;40m".$string."\033[0m";
break;

case "green":
$out = "\033[32;40m".$string."\033[37m";
break;

case "bggreen":
$out = "\033[42;30m".$string."\033[40;37m";
break;

}
return $out;

}

//MySQL

$MYSQL_HOST="********";
$MYSQL_USER="********";
$MYSQL_PASS="**********************";
$MYSQL_BDD="phpScheduleIt";

$link = mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS)
or die(mysql_error());

mysql_select_db( $MYSQL_BDD ) or die( mysql_error() );

$usage = $_SERVER["argv"][1];

switch($usage)
{
case « –help »:
print « Usage: ./check_dispo.php [options] \n »;
print « –hostname [hostname]\n »;
print « –list : affiche toutes les machines definies dans phpScheduleIt\n »;
print « \n »;
print « Example: ./check_dispo –hostname thieli\n »;
exit();
break;

case « –hostname »:
$hostname = $_SERVER["argv"][2];
break;

case « –list »:
$query = « SELECT name FROM resources GROUP BY name ORDER BY name ASC »;
$results = mysql_query($query) or die(mysql_error());

print « \n »;
while ($row = mysql_fetch_array($results))
{
print $row[name]. »\n »;
}
print « \n »;
return 0;
break;
}

if(!$hostname)
{
$query = « SELECT * FROM reservations, resources WHERE reservations.machid = resources.machid AND reservations.start_date <= « .$today_timestamp. » AND reservations.end_date >= « .$today_timestamp ;
}
else
{
$query = « SELECT * FROM reservations, resources WHERE reservations.machid = resources.machid AND reservations.start_date <= « .$today_timestamp. » AND reservations.end_date >= « .$today_timestamp. » AND resources.name like ‘ ».$hostname. »‘ » ;
}

$results = mysql_query($query) or die(mysql_error());

//init de la variable de resultats
$have_results = false;

while ($row = mysql_fetch_array($results))
{
if($row['name']) print colorize(« red_bold », »$row[name]« ). »\t »;

if($row['start_date']&&$row['end_date'])
{
//date de fin en couleur rouge !
$end_date = gmdate(« l d F Y H:i », $row['end_date']);
$end_date = str_replace($days, $jours, $end_date); // jours US -> FR
$end_date = str_replace($months, $mois, $end_date); // mois US -> FR
print colorize(« red », »reserve jusqu’au $end_date »). »\n »;
}

if($row['location']) print « |- ».$row['location']. »\n »;

if($row['notes']) print « |- ».$row['notes']. »\n »;

if($row['summary']) print « |- ».$row['summary']. »\n »;

$resid = $row['resid'];
//print « resid= ».$resid. » | « ;

$query2 = « SELECT * FROM reservation_users, login WHERE reservation_users.memberid=login.memberid AND reservation_users.resid=\ »".$resid. »\ »";

$results2 = mysql_query ( $query2 ) or die ( mysql_error() );

while ( $row2 = mysql_fetch_array ( $results2 ) )
{
print « |- ».colorize(« cyan », »$row2[fname] $row2[lname] \t $row2[phone] \t $row2[email]« ). »\n »;
}

print « \n »;
$have_results = true;
}

//si pas de reservation de la machine
//obtenir le machinid à partir du hostname
if($have_results == false)
{
$query3 = « SELECT machid, name FROM resources WHERE name like ‘ ».$hostname. »‘ »;
$results3 = mysql_query($query3) or die (mysql_error());
while( $row3 = mysql_fetch_array($results3) )
{
$machid = $row3['machid'];
}

if($machid)
{
//construction du message pour une machine libre
$free_msg = « \n ».colorize(« bggreen », »$hostname »). »\n »;
$free_msg .= « Reserver cette machine en cliquant sur le lien suivant:\n »;
$free_msg .= colorize(« green », »http://hostname/phpScheduleIt/schedule.php?date= ».$today_us. »\n\n »);
exit($free_msg);
}
else
{
print  » \nCette machine n’existe pas dans l’interface phpScheduleit\nPour ajouter la machine « .$hostname. » cliquez sur le lien suivant:\n »;
$url_add_srv = « http:// »; // URL à définir
print colorize(« green »,$url_add_srv. »\n\n »);
}
}

?>

.bash_profile

./checksrv.php –hostname hostname1

App

PDO MySQL pour Zend Framework

1) installation des paquets debian contenant les extensions PDO et PDO_MYSQL

apt-get install php5-pdo
apt-get install php5-pdo-mysql

2) modification du fichier de configuration PHP5

/etc/php5/apache2/php.ini
extension=pdo.so
extension=pdo_mysql.so

3) redémarrage du service apache2

/etc/init.d/apache2 restart

Une fois installé il reste à se familiariser avec le composant Zend_Db.

App

Tuning LAMP

Article traitant du Tuning d’un environnement LAMP.

Source IBM

App

PHP va de plus en plus vite

Voici un graphe montrant l’évolution depuis PHP  3

App

Recent Tweets

Catégories