bphp

Aller au contenu | Aller au menu | Aller à la recherche

mercredi, mars 14 2007

Scripts Shell avec PHP

Il est possible d'utiliser php pour la création de scripts shell sous linux. Pour ce faire, il faut installer l'interpréteur ligne de commande de php5 (et non le module apache). Par exemple sous ubuntu, il faut installer le module suivant :

php5-cli - command-line interpreter for the php5 scripting language

On peut alors rédiger des scripts en php, en mettant l'entête de fichier suivant :

#!/usr/bin/php
<?php

suivi du code du script. Il faut bien entendu rendre le script exécutable, avec chmod +x monscript.php

On peut accéder aux arguments du script à travers le tableau $argv, et on peut lancer d'autres exécutables via la fonction exec().

Plus d'informations ici :

http://lu.php.net/manual/en/features.commandline.php

lundi, décembre 4 2006

Internationaliser son application

Qui n'a pas eu besoin un jour d'internationaliser son application ? (c'est à dire de la rendre accessible dans différentes langues)

Pour cela il existe deux facons de le faire en PHP :
1. inclusion du fichier de la langue selectionnée
2. utilisation de gettext

Utilisation de fichier de langue

Pour cela rien de compliqué : nous allons définir des variables qui seront définies pour chaque langue. Ensuite, il ne reste plus qu'à insérer le bon fichier.
Prenons plutot un exemple : dans notre application nous allons définir une variable (pour la convention de nommage, j'utilise toujours un "L_" en début de variable) au lieu de mettre notre texte en dur !

<form method="post" action="essai.php">
 <label for="nom"><?php echo $L_nom; ?></label>
 <input type="text" name="nom" id="nom" size="50" maxlength="200" />
</form>

Ensuite nous allons créer un fichier de langue pour le francais (que nous nommerons fr.php) et nous définirons notre variable.

<?php
     $L_nom  = "Nom de la personne";
?>

Il ne reste alors plus qu'à inclure notre fichier de langue en début de notre fichier où la variable $L_nom est contenu. Ainsi, vous pourrez changer facilement de langue en allant, par exemple chercher dans la base de données, la langue à utiliser pour votre utilisateur !

Utilisation de gettext

Les fonctions gettext implémentent l'API NLS (Native Language Support) qui peut servir à internationaliser vos applications PHP.

Plutôt que de réécrire un tutoriel, en voici un bien fait : http://www.mandragor.org/tutoriels/gettext/0.
Il y a également la documentation GNU : http://www.gnu.org/software/gettext/manual/gettext.html

mercredi, mai 31 2006

Comment utiliser l'API d'Amazon en Francais ? (avec l'architecture REST)

Qu'est ce que l'API d'Amazon ?

Amazon s'appuie largement sur la participation de ses partenaires et a souhaité exposer une partie de son système d'information à ceux-ci. Cela couvre bien entendu l'accès au catalogue mais également la vente (la gestion du panier de commande a ainsi été exposée) et les achats (amazon sert de plateforme de vente pour de nombreux partenaires qui commercialisent des produits sur amazon).

Pour cela, Amazon a décidé de fournir des services webs à travers l'architecture SOAP et REST.

Nous allons voir ici comment utiliser les services web REST avec PHP.

Lire la suite...

vendredi, mai 26 2006

Inclusion de fichier

A un moment ou un autre vous aurez besoin d'inclure des fichiers dans une de vos pages PHP. Or il faut éviter que tout le monde puisse accéder à ces fichiers inclus.

Ce que je dis n'est pas très clair ? Prenons un exemple... J'ai un fichier index.php (à la racine de mon site) qui inclut un fichier contenu dans le répertoire includes et nommé constants.php. Or en tapant, http://mon_site.php/includes/constants.php, je ne veux pas que les utilisateurs aient accès à mon fichier.

Comment faire ?

Dans tous les fichiers à inclure, vous allez mettre le script suivant en haut du fichier :

if ( !defined('IN_SCRIPT') )
{
   die("Fichier non disponible");
}

Ainsi lorsqu'un utilisateur voudra accéder directement à http://mon_site.com/includes/constants.php, il aura le message d'erreur "Fichier non disponible".

Maintenant pour pouvoir inclure celui-ci dans vos fichiers (par exemple, ici : index.php), il est nécessaire de définire la constante IN_SCRIPT (avant l'inclusion de votre fichier) :

define('IN_SCRIPT', true);
// inclusion des fichiers

vendredi, mars 3 2006

PHP template engines considered harmful

J'ai trouvé un petit article sympathique sur le problème des moteurs de templates en php :
http://www.massassi.com/php/articles/template_engines
Selon l'auteur, la plupart des moteurs de templates ne remplissent pas leur objectif : la séparation de la couche applicative de la couche de présentation, mais ils tentent de séparer le code php du code html, ce qui est différent.

Apparemment seul Smarty sort du lot et répond au problème correctement, mais c'est une solution très lourde et qui demande un temps d'apprentissage important.

La meilleure solution actuellement semble donc être de ne pas utiliser de template, mais de bien architecturer son application afin de séparer la couche applicative de la couche présentation. Les solutions simples sont parfois les meilleures à la fois pour le développement et pour la maintenance du code.

Edit Luc

J'ai détecté un petit bug sur le moteur de template. Pour corriger celui-ci remplacer simplement la ligne suivante :
$this->vars[$name] = is_object($value) ? $value->fetch() : $value;

par :

if (is_object($value)
   && method_exists($value, 'fetch'))
{
        $this->vars[$name] = $value->fetch();
}
else
{
         $this->vars[$name] = $value;
}

PS : N'utilisez pas la notation <?=$variable;?> mais plutot <?php echo $variable; ?>