Utilisation de PHP

Le site est maintenant en PHP.
Ceci grâce à plusieurs utilitaires et malgré quelques problèmes de configuration aussi bien sous Windows que Linux.
J'y ai trouvé plusieurs avantages : la maintenance est plus aisée car c'est un excellent préprocesseur et c'est un bon moyen d'ôter le javascript qui rendait le site incopiable et gênait les utilisateurs de nombre de navigateurs.
PHP peut également manipuler des fichiers sur le serveur et dialoguer avec une base de données (MySQL par exemple).
PHP permet aussi d'être curieux et de collecter (protocole HTTP) des données publiques sur le visiteur ceci afin de produire des pages qui lui sont adaptées : Un inconvénient néanmoins, les pages sont alourdies pour les navigateurs récents et le chargement est semble-t-il plus lent.
L'envoi de feuilles de style et pages compressées à l'aide de la fonction ob_start("ob_gzhandler"); permet de compenser ce défaut.
PHP permet donc de générer des pages en fonction du navigateur identifié et des préférences de l'utilisateur pour le style et la présence de javascript (pour cette page mini 15k/maxi 20k).
Votre navigateur s'identifie ainsi :
CCBot/2.0 (http://commoncrawl.org/faq/)
Vous pouvez choisir de ne recevoir que de l'HTML (si votre "referrer" n'est pas bloqué).
Inutile donc de générer un message pour les problèmes liés à javascript ou à CSS2.
Les pages peuvent aussi être affichées plus rapidement si vous acceptez du javascript.

PHP comme préprocesseur

Toutes les pages du site destinées aux navigateurs récents comportent ces lignes :

<link rel="stylesheet" href="css/style_old_nn4.css" type="text/css">
<style type="text/css">
/*<![CDATA[*/
@import url(css/style2.css);
<?php
if (strstr($HTTP_USER_AGENT,"MSIE 5") && !strstr($HTTP_USER_AGENT,"Opera"))
{
echo "@import \"css/style2ie5.5.css\"";
}
?>
/*]]>*/
</style>

Elles sont donc dans un fichier inclus grâce à un script dans toutes les pages :

<?php
include("commun.inc");
?>

De même, un seul fichier inclus permet de générer cette page et celle de l'autre version du site.
On peut insérer n'importe quel texte (html ou pas) hors balises PHP ou un script PHP, javascript...
D'une part, la place occupée par le site sur le serveur est réduite (pour ce site, divisée par plus de 3).
D'autre part, la maintenance est facilitée.

hautHaut de la page

PHP pour remplacer javascript

PHP et javascript peuvent parfois effectuer les mêmes tâches.
C'était le cas pour les menus.
Javascript permet d'alléger considérablement les pages, ce n'est pas le cas de PHP.
L'autre version du site étant destinée aux navigateurs n'interprétant pas javascript, les fonctions suivantes ont remplacé celles du fichier fonctions.js.

hautHaut de la page

PHP et javascript

PHP génère des pages HTML depuis le serveur et ne peut pas connaître les caractéristiques du poste utilisateur sinon au travers de formulaires.
Javascript est interprété chez l'utilisateur et est donc en mesure d'obtenir des informations sur ce poste.

PHP -> javascript

Une variable PHP est facilement utilisable par du javascript. La routine destinée à protéger une adresse email peut utiliser les deux langages :
<?php
$texte="Contact (avec une adresse inexistante)";
?>
<script type="text/javascript">
<!--
var tg="<";
var nom="monnom";
var arob="@";
var hote1="monprestatai";
var hote2="re.xy";
var texte="<?php echo $texte;?>";
document.write(tg+"a hr"+"ef=mai"+"lto:"+nom+arob+hote1+hote2+">"+texte+tg+"/a>");
-->
</script>
ou encore
<?php
$texte="Contact (avec une adresse inexistante)";
echo '
<script type="text/javascript">
<!--
var arob="@";
var texte="'.$texte.'"
var nom="monnom";
var hote="monprestataire.xy";
document.write("<a hr"+"ef=mai"+"lto:"+nom+arob+hote+">"+texte+"</a>");
-->
</script>';
?>

De même une routine affichant plusieurs adresses peut faire varier adresses et messages à partir d'une liste sur le serveur.

javascript -> PHP

Pour faire passer des informations à PHP comme la taille de l'écran, la taille de la fenêtre active avec Mozilla, la position de la souris, savoir si javascript est activé ou toute information au niveau du poste du visiteur, il faut passer par un formulaire ou par des variables.
Ceci pose de nombreux problèmes car Opera, par exemple, demande à l'utilisateur s'il accepte de transmettre des données non cryptées, il faut aussi que javascript soit activé et prévoir des routines s'il ne l'est pas. Comme pour l'utilisation de cookies, le jeu n'en vaut pas la chandelle.
A titre d'exemple, une page HTML utilisant un script PHP (trouvé à php faqts) permettant de savoir si javascript est activé :

Ça marche, mais la page doit être chargée deux fois et c'est d'un pratique douteux. Si on appelle une autre page, il faut s'assurer que l'utilisateur a bien conservé les mêmes réglages... Mieux vaut donc utiliser javascript en s'assurant que, s'il n'est pas activé, le contenu soit lisible.
Un site construit sur ce modèle donnera une capture inutilisable.

Voici une autre méthode sans formulaire avec les mêmes réserves

que vous pouvez tester ici.

hautHaut de la page

PHP et les captures

Avec un site en php (asp, cfm), il est indispensable d'identifier le navigateur qui servira à lire la capture.
Comme le code est sur le serveur, il est difficile d'interpréter la source car PHP peut calculer des adresses, générer des routines en javascript, générer toutes sortes de documents, effectuer des calculs etc...
De plus, PHP sert souvent à bloquer les robots ou à les ralentir. Il le fait très facilement au risque de perdre quelques lecteurs.
S'il n'y a pas de plan du site, les menus générés dynamiquement seront le plus souvent inutilisables. On peut toujours noter les adresses lors d'une visite et les ajouter dans les adresses à capturer ou dans les règles de capture, mais c'est un gros travail.
On peut aussi examiner le cache d'Internet Explorer, mais les obstacles sont nombreux.
PHP (comme javascript) permet de faire des sites mono-pages (cas extrême). Là, pas de solution hors-ligne.
Plus simplement, la page relevant les pays des visiteurs ayant accédé au site utilise un formulaire qui ne permet pas la copie d'un des tris :
<?php
echo "
<form action=\"$PHP_SELF\" method=\"post\">
<input type=\"submit\" name=\"tri\" value=\"";
/*
si $tri est vide c'est que c'est la première fois qu'on a chargé la page,
sinon on affecte $message3 ou $message4 à value en cas de clic sur le bouton
*/
if ($tri==$message3 || $tri=="") echo $message4;
else echo $message3;
echo "\">
</form>
";
?>

La page est générée en fonction de la variable $tri, on aurait pu lui affecter d'autres valeurs avec tout formulaire (ou passer des variables -y compris tableaux- à tester) : seule la page chargée en premier (ou en dernier dans certains cas) est copiable.

Plusieurs exemples peuvent vous donner des idées quant aux difficultés rencontrées lors d'une capture, mais bien que WinHttrack réalise un bon travail, un site en PHP, quand il n'utilise pas les techniques anti-copie, est rarement exploitable hors-ligne en totalité, rarement "bien écrit" et rarement sans erreurs.
Pour ce site, PHP a facilité la possibilité d'une capture avant que free.fr n'interdise parfois la capture à certains aspirateurs dont HTTrack, mais comme javascript reste pour les navigateurs récents, il faut parfois, malgré le plan du site, récupérer les fichiers js dans le cache de MSIE et modifier les extensions ou déclarer un vieux navigateur (MSIE 4 / NN4) et ne pas accepter les cookies lors de la capture.
hautHaut de la page

Avec javascript

W3C XHTML 1.0
W3C CSS
utilisation de PHP