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
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
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 :}
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).\\
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}
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.\\