Toutefois, le moteur PHP5 lui reste fonctionnel.
J'avais pensé que l'on pouvait mettre en place un petit script de ma composition, permettant si le moteur PHP4 est en panne (erreur 500), de "retenter" l'évaluation des mêmes fichiers ".php" mais avec le moteur PHP5.
J'ai testé sur un autre site, et ça fonctionne.
Quelques contraintes toutefois:
- les paramètres PHP de type "GET" doivent être récupérés et initialisés en début de fichier PHP (comportement spécifique à PHP5), exemple: $id=$_GET['id'];
- toutes les URI doivent être relatives à la racine du site (pas trouvé d'autre méthode "simple"... sinon, il faudrait installer le script dans chaque dossier du site)
- les paramètres PHP de type "POST" ne sont pas supportés pour le moment
- si le moteur PHP5 est lui aussi en panne, il n'est plus possible d'afficher une page d'erreur spécifique (pour le moment)
- chaque fichier ".php" sera redirigé 1 fois pendant la panne... donc, temps de réponse un peu plus lent qu'en fonctionnement notmal, et informations bizarres dans votre barre d'adresse (mais c'est mieux que rien...)
Voici donc le script.
1) Redirection de l'erreur 500 vers un script PHP5 (fichier /.htaccess):
- Code: Select all
ErrorDocument 500 /500.php5
2) Préparation à l'évaluation avec un moteur PHP5 (fichier /500.php5):
(récupération de l'URI et des paramètres)
- Code: Select all
?
//récupération de l'URI ayant provoqué l'erreur
$fullurl=$_SERVER['REQUEST_URI'];
$i=strrpos($fullurl,"?");
$baseurl=$fullurl;
$params="";
if($i!=FALSE)
{ $baseurl=substr($fullurl,0,$i); // chemin du fichier ".php"
$params=substr($fullurl,$i+1,strlen($fullurl)-$i+1); // récupération des paramètres GET
}
$baseurl=substr($baseurl,1,strlen($fullurl)-1); // suppression du "/" en début de chaîne (déclenche une erreur de sécurité avec la commande "include")
//construction de l'adresse permettant d'évaluer en PHP5
$url="forcephp5.php5?url=".$baseurl;
if($params!="") $url=$url."".$params;
//redirection vers cette adresse
header("location: ".$url);
?
3) Evaluation avec un moteur PHP5 (fichier /forcephp5.php5):
- Code: Select all
?
// nous sommes dans un fichier ".php5" tournant sous un moteur PHP5
// il suffit donc d'inclure les fichiers ".php" (au lieu de les rediriger) pour les évaluer en PHP5
$url=$_GET['url'];
if($url=="" || $url=="/")
$url="index.php";
include $url;
?
Avec ce script, un site continuer d'évaluer par défaut les fichiers ".php" en PHP4 et ".php5" en PHP5.
Mais en cas de panne 500 du PHP4, il y a évaluation en PHP5.
Une autre solution déjà évoquée est de rajouter la ligne "php 1" dans le fichier /.htaccess, ce qui change le fonctionnement par défaut et évalue tous les fichiers ".php" et ".php5" en PHP5.
Mais si un jour c'est PHP5 qui est en panne et pas PHP4, on a le même problème à l'envers...
Alors, tous les webmasters de sites free.fr qui passent par là, vous en dites quoi?
Tous commentaires sont les bienvenus. Je ne suis pas expert... Je cherche une solution comme vous, car ce problème dure depuis maintenant 3 semaines.
Si il n'est toujours pas résolu après 3 semaines, il y a des chances que cela dure TRES longtemps...
Mic? On tente? (ça ne change pas le comportement par défaut, et en cas de panne ce sera mieux que rien...)
C'est sans danger: si ça ne marche pas, on modifie 1 ligne du "/.htaccess" et le script est désactivé.