evoformations/support/php.tex

199 lines
7.2 KiB
TeX
Raw Normal View History

2012-05-21 16:07:10 +02:00
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright (c) 2005 eVoLiX. Tous droits reserves.%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{PHP}
\url{http://www.php.net/} \\
\url{http://www.zend.com/} \\
\section{Pr<EFBFBD>sentation}
Un danois, Rasmus Lerdorf\footnote{\url{http://www.lerdorf.com/}}, d<>cidant de mettre en valeur sa page personnelle a cr<63><72> une collection de scripts en Perl/CGI appel<65>e PHPTools (Personel Home Page Tools). R<><52>crit en langage C, l'outil fut renomm<6D> PHP/FI (Forms Interpreter). PHP/FI version 2 peut s'ins<6E>rer sous forme de module au serveur Apache et permet d'ins<6E>rer directement des instructions dans du code HTML. En 1997, plusieurs d<>veloppeurs s'associent <20> Rasmus Lerdorf pour sortir un an plus tard PHP 3 qui int<6E>grait de nombreuses fonctionnalit<69>s comme le support de syst<73>mes de gestion de base de donn<6E>es. PHP <20>tant cette fois un acronyme r<>cursif de "PHP : Hypertext Preprocessor". La sortie de PHP 4 en 2000 puis de PHP 5 en 2004 apporta de nombreuses fonctionnalit<69>s suppl<70>mentaires.\\
PHP est donc un langage de programmation Open Source principalement utilis<69> par les d<>veloppeurs web pour cr<63>er des pages dynamiques. En effet c'est un langage de script ex<65>cut<75> du c<>t<EFBFBD> serveur g<>n<EFBFBD>rant principalement du HTML. Sa syntaxe emprunt<6E>e aux langages C, Java et Perl est assez simple <20> apprendre. \\
~\\
\section{Installation}
\subsection{Compilation}
Comme la plupart des logiciels libres et Apache, il est possible de compiler PHP <20> partir des sources. Cela permet de compiler uniquement avec les options que l'on a besoin et d'avoir des binaires bien adapt<70>s <20> sa machine :\\
\begin{verbatim}
./configure [options]
make
make install
\end{verbatim}
\subsection{Paquets}
~\\
\textbf{Pour Debian GNU/Linux :}
~\\
\textit{Paquets principaux :}
~\\
\begin{itemize}
\item[\textbf{php5-common}] : fichiers courants pour PHP
\item[\textbf{libapache2-mod-php5}] : module mod\_php pour Apache2
\end{itemize}
~\\
\emph{D<EFBFBD>pendances directes :}
~\\
\begin{center}
\begin{tabular}{|c|c|}
\hline
libc6 :& librairies "GNU C"\\
\hline
libbz2-1.0 :& librairie de compression bzip2\\
\hline
libdb4.2 :& librairies "Berkeley v4.2 Database"\\
\hline
libexpat1 :& librairie "XML parsing C"\\
\hline
libpcre3 :& librairie Perl 5 Compatible Regular Expression\\
\hline
libssl0.9.7 :& librairies "SSL shared"\\
\hline
zlib1g :& librairies de compression gzip\\
\hline
mime-support :& support MIME (mime.types, mailcap)\\
\hline
apache2-mpm-prefork :& impl<70>mentation "non-threaded" (similaire <20> Apache 1.3.x)\\
\hline
libmagic1 :& librairie pour les types de fichiers utilisant les num<75>ros magiques\\
\hline
\end{tabular}
\end{center}
~\\
\section{Configuration}
\subsection{Fichier de configuration}
La configuration par d<>faut de PHP fonctionne en g<>n<EFBFBD>ral assez bien. N<>anmoins un certain nombre de param<61>tres peuvent <20>tre configur<75>s dans le fichier nomm<6D> php.ini (sa syntaxe rappelle en effet les fichiers INI d'applications Microsoft Windows). Il est important de se familiariser avec cette configuration pour pouvoir la modifier pour des questions de s<>curit<69> ou pour certaines applications.\\
~\\
\texttt{php.ini :}
~\\
\begin{verbatim}
; activer l'interpretation du Code PHP
engine = On
; active le support des balises courtes <? ... ?>
short_open_tag = On
; quantit<69> maximale de memoire qu'un script peut reserver
memory_limit = 8M
; ajoute des restrictions et controle sur les scripts
; http://www.php.net/manual/fr/features.safe-mode.functions.php
; obsolete
;safe_mode = On
; permet de ne changer que certaines variables d'environnement
safe_mode_allowed_env_vars = PHP_
; messages d'erreur non visibles
display_errors = Off
; duree maximale d'execution d'un script en seconde
max_execution_time = 30
; permet d'eviter l'execution de scripts distants
allow_url_fopen = Off
; ajoute des quotes pour empecher certaines injections sql
magic_quotes_gpc = On
; ne pas indiquer la presence de PHP dans entete HTTP
expose_php = Off
; enregistrer les erreurs
log_errors = On
; journal des erreurs
error_log = /var/log/php.log
; desactiver des fonctions dangereuses
disable_functions = exec, shell_exec, system, passthru, putenv, popen
; specifie si uploads possibles ou non
file_uploads = On
; la taille maximale des uploads
upload_max_filesize = 2M
; repertoire temporaire pour les uploads
2012-05-22 03:42:54 +02:00
upload_tmp_dir = /var/tmp/
2012-05-22 03:42:54 +02:00
; limiter les acces de PHP sur le systeme
open_basedir = /home
\end{verbatim}
~\\
Lien~: \url{http://www.php.net/manual/fr/features.safe-mode.functions.php}\\
~\\
Malgr<EFBFBD> l'int<6E>gration du moteur Zend (parseur de code), certains "optimiseurs" peuvent acc<63>l<EFBFBD>rer l'ex<65>cution de script PHP en optimisant code, cache, etc.
~\\
Zend Optimizer \\
Eaccelerator \\
APC\\
~\\
Les probl<62>mes de s<>curit<69> en relation avec PHP proviennent bien souvent d'erreurs de code. Ils concernent donc principalement les scripts du type PHP-Nuke, PHPBB2, etc. N<>anmoins, PHP peut comporter des failles de s<>curit<69>. Outre l'utilisation des fonctionnalit<69>s disponibles dans la configuration de PHP, il existe des patches comme hardened-php qui permettent d'<27>viter certains probl<62>mes. Le suivi des listes de s<>curit<69> et la mise-<2D>-jour de PHP reste indispensable.\\
Liens~:\\
\url{http://www.hardened-php.net/}\\
\url{http://www.phpsecure.info}\\
~\\
\textbf{Ex<EFBFBD>cution de scripts en mode de commande :}
~\\
\textit{list.php}
\begin{verbatim}
<?php echo "Hello World\n"; ?>
$ php /tmp/php.php
X-Powered-By: PHP
Content-type: text/html
bonjour
\end{verbatim}
~\\
\subsection{Utilisation avec Apache}
Module mod\_php5\\
~\\
LoadModule php5\_module /usr/lib/apache2/modules/libphp5.so\\
~\\
\texttt{
<IfModule mod\_php5.c>\\
AddType application/x-httpd-php .php .html .phtml .php5\\
AddType application/x-httpd-php-source .phps\\
</IfModule>\\
}
On v<>rifie avec le script PHP suivant :\\
~\\
\texttt{echo "<?php phpinfo(); ?>" > /var/www/info.php}
~\\
2012-05-22 03:42:54 +02:00
\subsection{Gestion des sessions}
2012-05-22 10:11:20 +02:00
Lorsque des sessions PHP sont utilis<69>es (fonctions session\_*() dans le code), des informations sont stock<63>es c<>t<EFBFBD> serveur. Le navigateur conserve uniquement identifiant pour acc<63>der <20> ces informations, stock<63>s dans un cookie ou une variable du type PHPSESSID dans l'URL (cela tend <20> <20>tre obsol<6F>te).\\
2012-05-22 03:42:54 +02:00
Par d<>faut, ces informations sont conserv<72>es dans des fichiers sur le disque (un fichier par session) mais il est conseill<6C> d'utiliser une m<>thode plus performante si vous avez un serveur d<>di<64> :
monter simplement le r<>pertoire des sessions pour un mono-serveur, ou d<>l<EFBFBD>guer la gestion des sessions <20> un service annexe (Memcached, Redis ou Kyoto Tycoon).\\
~\\
Pour plus de d<>tails : \url{http://trac.evolix.net/infogerance/wiki/HowtoLAMP/PHP#SessionsPHP}
\section{Base de programmation}
Il existe de nombreuses extensions de PHP (MySQL, PostGreSQL, LDAP, FTP, IMAP, GD, XML, etc.) et <20>galement des biblioth<74>ques dont la plus connue est PEAR (PHP Extension and Application Repository) qui comprend classes et librairies mais introduit <20>galement un style de codage.\\
~\\
Liens :\\
\url{http://www.nexen.net/docs/php/} \\
\url{http://pear.php.net/}\\
\url{http://pecl.php.net/}\\
\url{http://www.lephpfacile.com/manual\_pear/index.php}\\
\url{http://gtk.php.net/}\\
~\\
2012-05-22 03:42:54 +02:00
Voici un r<>capitulatif de nos pr<70>conisations d'installation : \url{http://trac.evolix.net/infogerance/wiki/HowtoLAMP/PHP} \\
~\\
~\\