01
Aoû
2004

Gestion des erreurs en PHP

En tant que développeur PHP, vous avez forcément eu à faire aux messages d'erreurs standard du langage, du type :

Parse error: parse error, expecting ';' in /.../index.php on line 12

ou bien

Warning: mysql_connect() : Accès refusé pour l'utilisateur 'user@localhost' (mot de passe: NON) in /.../index.php on line 25

Parfois obscurs, ces messages ne constituent pas une solution élégante de gérer les erreurs. Sans proposer de solution aussi perfectionnée que les blocs try-catch de Java ou C#, il est néanmoins possible de manager les erreurs de manière plus évoluée que la méthode par défaut.

Note 1 : Cet article a été réalisé avec une machine exécutant PHP 4.3.6. Cependant, les méthodes présentées sont compatibles depuis PHP 4.0.x.

Note 2 : Pour cet article, je suppose que vous avez déjà un serveur Web installé avec PHP installé et configuré pour tourner avec ce serveur. Cet article n'a pas pour but de vous guider dans l'installation de ces éléments.

Lire la suite »
Posté par Renaud Castéran à 13:08 dans la catégorie Articles | RSS catégorie
Tag(s) associé(s) :
02
Déc
2002

Les sessions PHP

Combien d'entre vous se sont déjà demandés comment passer des infos pour un visiteur donné de page en page ? Et qui plus est, de manière sécurisée ? Vous pouvez avouer, si jamais vous avez décidé un jour de mettre en place un espace membre avec des fonctionnalités avancées, il est nécessaire d'identifier ce dit membre...

PHP (dans les versions >= 4) possède un mécanisme automatique et très pratique pour réaliser ceci : les sessions.
A noter cependant que si vous êtes encore en PHP3, vous pouvez utiliser la PHPLib Nous allons voir dans cet article comment manipuler les sessions avec quelques exemples d'applications.

Au programme :

  • Les sessions, c'est quoi ?
  • Comment manipule-t-on une session ?
  • Quelques exemples et conclusion

Les sessions, c'est quoi ?

1 - Qu'est-ce qu'une session ?

Une session est un mécanisme assez simple géré de manière transparente par le PHP. A chaque fois qu'une session est démarrée (3 méthodes sont possibles, comme nous le verront plus tard), un identifiant unique est attribué au visiteur. Cet identifiant permettra de le distinguer autres utilisateurs tout au long de sa session. Pendant la session, on pourra à loisir définir des variables qui "suivront le visiteur".
A chaque chargement de page, ces variables seront sauvegardées sous forme sérialisée dans un fichier texte portant le nom de la session.
(Ces fichiers sont, en général stockés dans /tmp sur un système unix)

L'identifiant unique de session peut se transmettre de 2 façons :

- cookie :
Un cookie est posé au debut de session et contient la variable PHPSESSID faisant référence à l'identifiant de session.
- URL : Le paramètre de session PHPSESSID ou SID est à inclure sur chaque lien de la page afin de propager la session aux autres pages.

La première solution est contraignante si vos utilisateurs refusent les cookies, mais reste tout de même la plus simple à mettre en place.
A savoir tout de même que si PHP est compilé avec --enable-trans-sid, les urls de la page seront modifiées par PHP pour rajouter l'identifiant de session.

A noter également que pour une création de cookie de session, l'appel de la fonction doit se situé avant toute autre sortie vers le navigateur, comme les fonctions header et setcookie.

2 - Que peut on faire avec un session ? (quelles fonctions sont disponibles pour manipuler les sessions)

Avant d'utiliser une session, il faut d'abord l'initialiser.
Comme dit précédemment, il existe 3 manières de démarrer une session :

  • PHP est configuré pour démarrer automatiquement les sessions

PHP peut être configuré de tel façon, via la php.ini, qu'il démarrera une session à chaque nouveau visiteur du site.

Pour activer cette option, il suffit de passer le paramètre de configuration session.auto_start à 1 dans la configuration.
C'est la façon la plus simple, mais pas forcément la plus répandue chez les hébergeurs.

  • Démarrer explicitement une session

PHP possède la fonction session_start(), qui , comme son nom l'indique, permet de démarrer une session.
Si le visiteur affiche pour la première fois une page de votre site depuis qu'il a lancé son navigateur, un identifiant lui est attribue.
Autrement, si il navigue depuis quelques pages, l'identifiant de session est récupéré et les variables lui étant associées sont accessibles.

  • Démarrer implicitement une session

On peut se passer du démarrage de session avec session_start() si l'on utilise la fonction session_register(), qui permet de stocker une variable dans une session.
Par cette méthode, PHP tente de déterminer si une session est active, et si ce n'est pas le cas, il la démarre avant de stocker la variable.

Voyons maintenant d'un peu plus près les fonctions permettant de manipuler les sessions.

Lire la suite »
Posté par Mathieu LESNIAK à 13:15 dans la catégorie Articles | RSS catégorie
Tag(s) associé(s) :
15
Juil
2002

Installation d'Apache + PHP + MySQL pour Windows

Pas forcément facile d'installer soi-même le trio gagnant Apache - PHP - MySQL... thor14 peut en témoigner ! =)

Voici donc un énième tutorial sur le sujet qui, je l'espère, saura vous combler.


Si cela ne s'avérait pas être le cas, je ne peux que vous conseiller d'aller jeter un oeil sur les tutoriaux de www.phpfrance.com

Cet article ne concerne pas l'installation sous Linux.
Si le temps est avec nous, peut-être qu'on traitera le même sujet vu du coté du monde libre mais en cas de besoins, je vous recommande www.ze-linux.org, www.geldenhuys.com (Apache France) et www.phpmylinux.net.

  • Télécharger Apache
  • Installer Apache
  • Configurer Apache
  • Utiliser Apache
  • Un Test ?
  • Plus...

Télécharger Apache

C'est certainement la partie la plus simple de tout l'article : Il suffit de se rendre sur www.apache.org pour récupérer un version d'Apache (avec ou sans sources, au choix..).

À l'heure ou je tape ces lignes, seules sont disponibles les versions 1.3.27 et 2.0.43.
À vous de choisir.

Si vous utilisez Windows ME 2000 ou XP ou bien si vous avez déjà installé l'Installeur Microsoft® vous pourrez sans crainte télécharger les fichiers MSI Installer Package.
Si vous doutez ou si vous n'avez pas l'installeur, l'Installer Package fera l'affaire.

Installer Apache

Ha bin non, je me suis trompé, c'est cette partie la plus simple de tout l'article... Il faut exécuter l'installation et se laisser guider.

S'il faut saisir un domain et un servername mettez localhost

Un petit conseil cependant : N'installez pas Apache au fond de votre disque dur. Par exemple C:\Apache ira très bien Program Files, aussi d'ailleurs, c'est juste pour la "commodité d'accès"... Surtout en ligne de commande...

Configurer Apache

Nous y voilà...
Apache se configure à l'aide d'un "simple" fichier texte : le fichier httpd.conf
Ce fichier se trouve dans le répertoire conf d'Apache et peut se modifier avec le bloc-note ou tout autre éditeur de fichiers texte.

Le signe # commence une ligne de commentaire et cette ligne ne sera donc pas "lue" par Apache.
La majorité des informations contenues dans httpd.conf sont commentées puisqu'il s'agit d'aides à la configuration, ou d'options à activer (en supprimant le #)

Par exemple, si vous vous demandez à quoi sert la ligne

# ProxyVia On

regardez quelques lignes plus haut vous trouverez une petite explication (en anglais) sur cette option. Et si vous souhaitez l'activer, décommentez la ligne en supprimant le #.

Nous allons commencer par trouver la ligne qui permet d'identifier le serveur par son nom : Imaginons que vous ayez acheté le nom de domaine "http://www.phptools4u.com" et que ce nom de domaine soit redirigé vers votre serveur apache. Vous devrez donc définir la ligne ServerName comme suit :

ServerName www.phptools4u.com

Mais puisque que vous n'avez pas le nom de domaine phptools4u.com (et non...) il va falloir définir un ServerName qui puisse identifier votre machine à coup sûr : localhost ou bien l'ip correspondant au loopback : 127.0.0.1

Si l'installation s'est bien passée voilà à quoi va certainement ressembler la ligne ServerName de votre httpd.conf :

ServerName localhost

ou

ServerName 127.0.0.1

Vous pouvez aussi bien, si vous avez une ip fixe ou une redirection dns, mettre votre redirect :

ServerName chezmoi.dyndns.org

Apache a besoin ensuite de connaitre l'endroit du disque où il se trouve, bin oui, c'est comme ça.
Trouvez la ligne ServerRoot, et spécifiez le chemin jusqu'à Apache (si ce n'est déjà fait).

Par exemple, si j'installe Apache dans le répertoire Apache Group de mon répertoire Program Files sur C :

ServerRoot "C:/Program Files/Apache Group/Apache"

Notez l'utilisation du slash / et non du backslash \

Indiquons ensuite à Apache ou se trouvera la racine du site avec la directive DocumentRoot. L'arborescence de mon site commencera à la racine du répertoire web de mon disque D :

DocumentRoot "D:/web"

Enchaînons en spécifiant le même chemin dans la directive Directory

<Directory "D:/web">

(Par défaut, DocumentRoot et Directory pointent vers le répertoire htdocs du répertoire Apache.)
Voilà, on pourrait (vous devez) aller beaucoup plus loin dans la configuration d'Apache pour régler Timeout, Ports, Logs et autres, mais il faudrait un site entier pour expliquer vraiment tout ça.

Utiliser Apache

Vous aurez besoin d'une console en ligne de commande (Invite de commandes) pour lancer et arrêter Apache.

Rendez-vous dans le répertoire d'Apache et tapez :

apache -h

pour obtenir les liste des options disponibles

apache -k start

pour démarrer (ou apache tout court)

apache -k restart

pour le re-démarrer

apache -k stop

pour ? oui, bien joué.

apache -k install

pour installer apache en tant que service (Windows NT, 2000 et XP)

apache -k uninstall

pour désinstaller le service

Un test ?

C'est le moment du test :
Créez un fichier HTML (test.html) à la racine du serveur et lancez un navigateur à l'adresse http://localhost/test.html. Si le fichier html s'affiche, c'est qu'Apache est bien installé et configuré.

Bon, on installe PHP ?

Aller plus loin avec Apache :

Lire la suite »
Posté par Loranger à 14:45 dans la catégorie Articles | RSS catégorie
Tag(s) associé(s) :
09
Juin
2002

Gestion des dates en PHP

Gérer les dates en PHP, voilà une question qui revient souvent dans les forums des grands sites de la communauté. Nous allons essayer ici de retracer les grandes lignes de la manipulation de dates et éventuellement quelques trucs et astuces pour optimiser votre code.

Au programme :

  • Comment PHP gère-t-il les dates ?
  • Que faire avec les timestamps ?

Comment PHP gère-t-il les dates ?

PHP, comme beaucoup d'applications, utilise le timestamp UNIX pour gérer les dates.
"Cool !" me direz-vous, mais qu'est-ce qu'un timestamp ?

Un timestamp UNIX est le nombre de secondes écoulées depuis le 1er janvier 1970 à 00h 00m 00s GMT. Par exemple, pour le 14/09/2006 à 15:17:16 , le timestamp correspondant est 1158239836.
Ainsi, le temps étant normalisé, il devient possible de le formater comme l'on veut.

La question suivante est : Comment récupérer le timestamp en cours ?
Il existe une fonction php "toute prête" pour l'obtenir, il s'agit de time()

Exemple :

<?php
    $mavariable 
time();
    echo 
'Le timestamp en cours est : <B>'.$mavariable.'</B>';
?>

Ce petit bout de code retournera :

Le timestamp en cours est : 1158239836.

Cette fonction permet donc de récupérer le timestamp au moment de l'exécution, mais il pourrait être intéressant de connaître le timestamp pour une date donnée.
Pour cela, il existe la fonction PHP mktime()
Elle s'utilise avec les arguments suivants :

<?php
    $timestamp 
mktime(int heureint minuteint secondeint moisint jour,
                                   
int année, |[int heure_hiver|]);
?>

Le paramètre heure_hiver, optionnel, est là pour pouvoir spécifier si l'on est en heure d'hiver ou pas :
1 : heure d'hiver
0 : heure "normale"
-1 : (défaut) si on ne sait pas Par conséquent, pour obtenir le timestamp correspondant au 22 mai 1981 à 00h45, il suffit de :

<?php
    
echo mktime(04505221981);
?>

Simple non ?

Lire la suite »
Posté par Mathieu LESNIAK à 15:12 dans la catégorie Articles | RSS catégorie
Tag(s) associé(s) :
04
Juin
2002

Variables utiles en PHP

... Ou les variables dont on a toujours besoin, et dont on ne se souvient jamais (et oui, ce titre là faisait un peu long :p )
PHP regorge de petites variables bien utiles qui permettent de récupérer tout un tas d'informations sur l'exécution en cours. Les variables sont actuellement accessibles plusieurs méthodes : $HTTP_SERVER_VARS et $_SERVER. La deuxième formulation fonctionne uniquement sur les version de PHP supérieure à 4.1.0. Il en est de même pour les variables $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_COOKIE_VARS, $HTTP_ENV_VARS et $HTTP_SESSION_VARS.
Toutes ces variables sont accessibles via la fonction phpinfo() directement inclue dans PHP. Bon d'accord, on peut les avoir via la fonction, mais ce n'est pas toujours pratique, alors en voici une liste non exhaustive :

  • $HTTP_GET_VARS
  • $HTTP_POST_VARS
  • $HTTP_SERVER_VARS
  • $PHP_SELF
  • $SERVER_NAME
  • $SERVER_ADDR
  • $HTTP_USER_AGENT
  • $DOCUMENT_ROOT
  • $REQUEST_METHOD
  • $QUERY_STRING
  • $HTTP_ACCEPT_LANGUAGE
  • $REMOTE_ADDR
  • $HTTP_REFERER
  • $SCRIPT_FILENAME
  • $REQUEST_URI

$HTTP_GET_VARS[] ou $_GET[]

Il s'agit d'un tableau associatif qui regoupe toutes les variables passées au script par le méthode GET (c'est à dire dans l'url). Rien de bien compliqué, si vous avez une URL du genre : http://monsite.com/monscript.php?argument=foobar Vous pourrez récupérer la variable argument par $HTTP_GET_VARS['argument']

$HTTP_POST_VARS[] ou $_POST[]

Identique au tableau $_GET, celui-ci permet de récupérer toutes les variables passées en méthode POST.

Exemple :

<FORM action="$PHP_SELF" method="POST">
<INPUT type="text" name="monchamp">
<INPUT type="submit" value="Valider">
</FORM>

Le formulaire une fois posté permettra l'accès à $HTTP_POST_VARS['monchamp'] pour utiliser la valeur tapée dans le champ de formulaire.

$HTTP_SERVER_VARS[]ou $_SERVER[]

Ce tableau associatif permet l'accès aux variables appartenant au serveur.
On peut retrouver son nom, son IP, ainsi que des infos appartenant plus au client, comme l'IP ou le User Agent.

$PHP_SELF ou $HTTP_SERVER_VARS['PHP_SELF'] ou $_SERVER['PHP_SELF']

Cette variable très utile vous permet de récupérer le nom du fichier courant.
Par exemple, si vous codez un petit script avec un formulaire, et que vous ne savez pas sur quelle page poster le formulaire, utilisez cette variable :

<FORM action="$PHP_SELF" method="POST">

$SERVER_NAME ou $HTTP_SERVER_VARS['SERVER_NAME'] ou $_SERVER['SERVER_NAME']

Cette variable, également appelée $HTTP_HOST, permet de savoir le nom du serveur sur lequel s'exécute votre script. Par exemple, ici, sur PHPTools4U.com, le $SERVER_NAME est www.phptools4u.com.
Simple non ?

$SERVER_ADDR ou $HTTP_SERVER_VARS['SERVER_ADDR'] ou $_SERVER['SERVER_ADDR']

Vous donne la possibilité de manipuler l'adresse IP du serveur. On l'utilise néanmoins rarement, les IP des serveurs ne permettant pas d'accéder au site sur un hébergement mutualisé.

$HTTP_USER_AGENT ou $HTTP_SERVER_VARS['HTTP_USER_AGENT'] ou $_SERVER['HTTP_USER_AGENT']

Variable très très utile pour déterminer quel type de navigateur utilise l'utilisateur actuellement sur votre site. En l'utilisant correctement, vous pouvez facilement afficher une partie voire le site entier d'une façon différente entre Mozilla et Internet Explorer. Exemple :

<?
if ( eregi('microsoft'__$HTTP_USER_AGENT__)  ) {
    echo 
'Internet Explorer';
}
else {
    echo 
'Autre navigateur';
}
?>

A noter cependant que certains navigateurs ont la possiblité de modifier leur USER_AGENT, donc, il se peut que vos tests ne fonctionne pas correctement avec ces navigateurs "trafiqués".

$DOCUMENT_ROOT ou $HTTP_SERVER_VARS['DOCUMENT_ROOT'] ou $_SERVER['DOCUMENT_ROOT']

Variable très utilisée pour les include et autre require, elle vous permet de trouver la racine au niveau du système de fichier.
Par exemple, vous possédez un serveur sous Linux, dont les fichiers accessibles depuis le web sont dans /var/www/.
Ainsi donc, la racine HTTP (celle à laquelle vous faites référence par / lors des appels aux images par exemple) correspond à /var/www/, et c'est donc ce que retournera $DOCUMENT_ROOT.

Lire la suite »
Posté par Mathieu LESNIAK à 15:12 dans la catégorie Articles | RSS catégorie
Tag(s) associé(s) :