Tutoriel : Installation et configuration de PHP sur DNS-323

Tutoriel : Installation et configuration de PHP sur DNS-323

PHP : Le langage serveur

PHP est un langage de script serveur qui est largement utilisé pour développer des sites web dynamiques. PHP permet à des logiciels personnalisés d'être exécutés sur le serveur (dans notre cas du NAS) qui héberge le site web.

Les scripts PHP sont généralement incorporés dans des pages HTML. Lorsqu'un navigateur demande une telle page HTML, les scripts sont exécutés par le module complémentaire PHP du serveur HTTP (ici: lighttpd). Habituellement, les codes PHP insèrent certains contenus supplémentaires dans la version HTML de la page HTML qui est envoyée au navigateur. Le navigateur ("client") lui-même ne voit donc pas les scripts qui ont été exécutés sur le serveur.

Dans ce tutoriel, nous présumons que le serveur HTTP lighttpd est déjà installé sur le NAS (voir le tutoriel sur l'installation de lighttpd. Sur des systèmes plus sophistiqués, PHP est parfois utilisé en combinaison avec un serveur Apache (au lieu du léger lighttpd) et une base de données SQL. Ce large ensemble de logiciels est parfois connu sous le nom de LAMP : Linux, Apache, MySQL, PHP. L'installation de MySQL sur le NAS est couvert dans un autre tutoriel.

Sommaire

1. Utilisation de PHP

Avec des pages HTML standards, votre serveur web ne peut fournir le contenu statique: tous les utilisateurs voient le même ensemble de pages et les pages ne changent pas jusqu'à ce que quelqu'un (par exemple manuellement) met à jour les pages HTML stockées. Un langage de script côté serveur comme PHP aide si vous avez besoin d'ajouter du contenu dynamique, comme un compteur de visiteurs (voir un exemple de code ci-dessous) ou peut-être des nouvelles-de-la-journée.
Le domaine public ainsi que des logiciels propriétaires PHP sont disponibles pour diverses applications, notamment :

  • Domaine public
    • des galeries de photos personnelles (par exemple Gallery (Galery 2 exige également mySQL) ou DAlbum)
    • WikiPedia fonctionne avec un logiciel basé sur PHP appelé MediaWiki
    • Blog et forum applications comme WordPress
  • Propriétaires

2. Mise en place de PHP

2.1. Installation

Uli fournit aimablement une version packagée de php pour le NAS dans son repository.

PHP n'est pas installé par défaut dans fun_plug, mais vous devriez avoir déjà téléchargé une copie dans le cadre de ce tutoriel général sur la façon de télécharger, installer et mettre à niveau des packages. Assurons-nous que vous avez toujours la dernière version (sachant qu'Uli met à jour son repository régulièrement). Notez que la commande rsync pourrait prendre un certain temps, car il peut télécharger de multiples packages en fonction de ce qui est déjà dans votre répertoire /ffp/pkg/packages. Notez également que vous devez additionnellement installer curl ! Depuis PHP 5.2.17 vous avez aussi à installer libiconv qui est dans le repository de fonz.

Code:
cd /ffp/pkg
funpkg -i /ffp/pkg/additional/dev-lang/php-*.tgz
funpkg -i /ffp/pkg/additional/net-libs/curl-*.tgz
funpkg -i /ffp/pkg/packages/libiconv-*.tgz

Si vous avez une version de php installée qui est périmée, vous aurez besoin d'exécuter le mode de mise à niveau à la place (voir ici pour de l'aide). Cependant, assurez-vous que avez bien curl et libiconv d'installés !

Code:
funpkg -u /ffp/pkg/additional/dev-lang/php-*.tgz
funpkg -u /ffp/pkg/additional/net-libs/curl-*.tgz
funpkg -u /ffp/pkg/packages/libiconv-*.tgz

2.2. Configurer PHP

PHP est configuré par un fichier nommé php.ini. Vous avez donc besoin de copier l'un des fichiers d'exemples de /ffp/etc/examples/ vers /ffp/etc/ en le renommant php.ini :

Code:
cp /ffp/etc/examples/php.ini-wolfuli /ffp/etc/php.ini

2.3. Configurer Lighttpd

Pour utiliser PHP avec le serveur web lighttpd, vous devez utiliser un autre fichier de configuration comme expliqué dans la section sur les fichiers de configuration dans le tutoriel.

Si vous avez un NAS autre que le DNS-320, vous exécutez la commande suivante :

Code:
cp /ffp/etc/examples/lighttpd.conf-with-php /ffp/etc/lighttpd.conf

Si vous avez un DNS-320, vous exécutez :

Code:
cp /ffp/etc/examples/lighttpd.conf-dns320 /ffp/etc/lighttpd.conf

2.4. Activation

Redémarrez lighttpd pour charger la nouvelle configuration, y compris le module PHP. Cela peut se faire en redémarrant l'ensemble du NAS ou à l'aide de :

Code:
cd /ffp/start
sh lighttpd.sh restart

3. Tester PHP

Vous pouvez tester votre installation de PHP en plaçant un fichier appelé index.php dans le répertoire server.document-root (par exemple /mnt/HD_a2/www/pages) avec le contenu suivant :

Code:
<H1>This is normal HTML</H1>
But the <U>following table</U> is generated by PHP:
<?php
phpinfo();
?>

Maintenant, allez sur le site Web sur votre NAS via l'adresse configurée, par exemple http://CH3SNAS:80. Vous devriez voir une longue page avec des informations de configuration du serveur PHP (comme sur l'image). Cette sortie est générée par la fonction "phpinfo ()".

Informations de configuration PHP

4. Utilisation de PHP

Revenons maintenant à un exemple un peu moins intimidant et peut-être même ennuyeux : le standard "Hello World" en PHP. Copiez et collez le texte suivant dans un fichier nommé helloworld.php et stockez-le dans server.document-root :

Code:
<?php
echo "Hello World";
?>

Ensuite, allez sur le site Web de votre NAS à l'aide de l'adresse et du port configurés et ajoutez-y /helloworld.php (l'adresse peut ressembler à ceci: http://CH3SNAS/helloworld.php).

L'exemple suivant montre une page web plus complète (adaptée du tutoriel lighttpd). 3 éléments sont ajoutés:

  • les visiteurs sont accueillis par leur adresse IP (en utilisant la variable $_SERVER['REMOTE_ADDR'])
  • toute visualisation de la page Web déclenche la mise à jour d'un fichier (counter.txt) stocké sur le NAS
  • le site Web utilise counter.txt pour afficher combien de fois la page a été vue

Cela nécessite trois fragments de code PHP, compris chacun dans les balises <?php et ?> :

Code:
<?php
$fname = "counter.txt"; // The file where the number of hits gets stored
if(!file_exists($fname)) { // If file doesn't exist..
$countfile=fopen($fname,"a"); // .. create it
$counter=0; // .. and initialize hit counter to zero
}
else {
$countfile=fopen($fname,"r+"); // Open for read and write
$counter=fgets($countfile,100); // Load number of hits by reading first 100 bytes
rewind($countfile); // Reset the file pointer to overwrite old counter value
}
$counter++; // Increment counter by one
fputs($countfile,$counter); // Write the new value to the file
fclose($countfile); // Close the File?>

<html>
<head>
<title>Hello PHP World!</title>
<style type="text/css">
<!--
h1 {text-align:center; font-family:Arial, Helvetica, Sans-Serif;}
h2 {text-align:center;}
p {text-indent:20px;}
-->
</style>
</head>

<body bgcolor = "#ffffcc" text = "#0000ff">
<h1>Welcome, <?php echo $_SERVER['REMOTE_ADDR']; ?>, <BR>to the PHP world</h1>
<h2>This page was viewed <?php echo $counter; ?> times</h2>
<p><A HREF="page1.html">Link to page1</A></p>
<p><A HREF="page2.html">Link to page2</A></p>
<p><A HREF="http://nas-tweaks.net/">external link</A></p>
</body>
</html>

Sortie du dernier exemple

La première et de loin la plus longue des sections PHP teste si un fichier nommé counter.txt existe dans le server.document-root. Si il n'existe pas, il le crée et décide qu'il y a eu zéro hits à ce jour ($counter=0). Notez que les variables en PHP n'ont pas besoin d'être déclarées et commencent par un $ et qu'aucune distinction claire n'est faite entre les variables numériques et de chaîne: les conversions sont effectuées sur demande.

Si le fichier existe déjà, les 100 premiers octets (devrait être suffisant pour un nombre décent) sont copiés dans $counter. Alors $counter est incrémenté, écrit dans le fichier counter.txt et le fichier est clos.

Sortie HTML comme visible en utilisant la fonctionnalité Afficher la source du navigateur

Le reste du code HTML est semblable au code dans le tutoriel lighttpd. Dans le 1er niveau d'en-tête (H1), une chaîne de caractères est généré par une commande PHP echo qui affiche l'adresse IP du client distant. Dans le deuxième niveau d'en-tête la valeur de $counter qui a été calculée précédemment est utilisée.

5. Option: Utiliser les extensions partagées

PHP permet l'utilisation de modules supplémentaires, dites "extensions partagées". Par exemple, il existe calendar pour les fonctions liées au calendrier. Les modules sont stockés dans /ffp/lib/php/extensions/no-debug-non-zts-20060613/.

5.1. Modules disponibles

Vous pouvez lister les modules disponibles en utilisant :

Code:
ls -al /ffp/lib/php/extensions/no-debug-non-zts-20060613/*.so

Depuis la version php-5.2.6-3 les modules suivants sont disponibles :

Module Description Nécessite l'installation
du package ffp
calendar fonctions relatives au jours/mois/années et timestamps Unix -
ctype vérification de type de caractères -
ftp protocole de transfère de fichier -
gd traitement d'image libjpeg, libpng
mbstring manipulation de valeurs non-ASCII (ex. unicode) -
mysql accès à la base MySQL mysql
pdo objets data PHP -
pdo_mysql interface PDO de la base MySQL mysql
pdo_sqlite interface PDO de la base SQLlite -
sqlite accès à la base SQLlite -
tokenizer accès aux tokens PHP trouvés par l'analyseur lexical -
zlib compression de fichier .gz -

5.2. Editer php.ini

Si vous souhaitez ajouter un ou plusieurs modules, vous devez éditer le fichier /ffp/etc/php.ini.
Ouvrez le fichier php.ini et trouvez :

Code:
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

Et ajoutez en dessous l'extension que vous souhaitez. Par exemple, pour activer l'extension de calendar, vous ajoutez :

Code:
; Linux extensions
extension=calendar.so
;extension=ctype.so
;extension=ftp.so

Ensuite, vous devez redémarrer lighttpd afin de charger les modifications.

5.3. Démo de l'extension calendar

Pour voir si calendar a bien été chargé ou pas, vous pouvez exécuter le script phpinfo.php indiqué ci-dessus.
Ou exécuter un script contenant calendar.php :

Code:
<?php
for ($year=2000;$year<2011;$year++) {
$days = cal_days_in_month(CAL_GREGORIAN,2,$year);
echo "February in $year has $days days <BR>";
}
?>

6. Notes

6.1. PHP et HTML

Une page avec du code PHP est généralement stockée sur le disque sous forme de code HTML avec un ou plusieurs fragments de code PHP embarqué. Lors d'une requête HTTP envooyée, dans la véritable page dans le navigateur ("client") les sections PHP ont été interprétées et enlevées. En général, elles ont été remplacées par du code HTML supplémentaire (voir l'exemple counter ci-dessus). Le client ne voit donc pas le code PHP et ne peut même pas savoir directement si PHP a été utilisé pour générer la page.

6.2. Tag d'ouverture court

Si vous voulez utiliser "<?" au lieu de "<? php" pour marquer le début de fragments de code PHP, vous avez besoin de changer la valeur de "short_open_tag" (ligne 131) à On dans le fichier /ffp/etc/php.ini :

Code:
short_open_tag = On

C'est une question de goût et de commodité. Lorsque vous distribuez du code PHP pour une utilisation sur d'autres serveurs, vous devez garder à l'esprit qu'ils peuvent être mis à short_open_tag = Off.

6.3. Extensions de fichiers et noms de fichiers par défaut

Les pages HTML contenant du code PHP doivent avoir une extension .php. Cela indique au serveur lighttpd pour passer le code via le préprocesseur PHP avant de l'envoyer sur le réseau.

Lorsque vous accédez au serveur lighttpd sans fournir un nom de fichier spécifique, il vérifie successivement les fichiers dans le répertoire server.document-root (typiquement /srv/www/pages/) nommés :

  • index.php
  • index.html
  • index.htm
  • default.htm

Ceci est défini par un paramètre appelé index-file.names dans le fichier lighttpd.conf. Comme le suggère la liste, si vous disposez d'un fichier index.php et un fichier index.html dans le même répertoire, le fichier index.php est prioritaire. Si vous demandez explicitement index.html, vous obtiendrez alors ce fichier au lieu de index.php.

6.4. Stateless

Notez qu'après qu'une page ait été traitée, quand une nouvelle demande pour la même page est faite par le même ou un autre client, tout le calcul recommence à partir de zéro: PHP est "stateless" au sens où les variables telles que $counter sont toutes perdues après que la requête de page ait été achevée. Donc le seul moyen pour suivre l'état d'un serveur PHP est de stocker des informations dans un fichier (comme dans counter.txt ci-dessus), pour stocker des informations dans une base de données (un autre tutoriel), ou d'assumer que le client conserve toutes les informations pertinentes entre une page demandée et la suivante.

6.5. Apprentissage du langage PHP

Il existe de nombreux ouvrages (imprimés et en ligne) sur PHP. Voir, par exemple php.net.

6.6. Traitement des erreurs PHP

Les messages d'erreurs de syntaxe PHP sont ajoutées au fichier error.log Lighttpd. Donc, si vous expérimentez du code PHP ou développez avec du code PHP, cela peut aider de jeter un oeil sur ce fichier.

Source (en Anglais) : NAS-Tweaks.net

Commentaires  

Citation : vblj:

Code:
cd /ffp/pkg
funpkg -i /ffp/pkg/additional/dev-lang/php-*.tgz
funpkg -i /ffp/pkg/additional/net-misc/curl-*.tgz NOT net-misc OK net-libs
funpkg -i /ffp/pkg/packages/libiconv-*.tgz



Effectivement ... c'est corrigé !
Code:
cd /ffp/pkg
funpkg -i /ffp/pkg/additional/dev-lang/php-*.tgz
funpkg -i /ffp/pkg/additional/net-misc/curl-*.tgz NOT net-misc OK net-libs
funpkg -i /ffp/pkg/packages/libiconv-*.tgz

Les commentaires sont clos.