π
<-

Bascule PHP4/PHP5

Discussions diverses, débats, sondages, parler de tout et de rien... mais en restant plutôt sérieux.

Bascule PHP4/PHP5

Unread postby critor » 18 Oct 2010, 17:04

En ce moment, le moteur PHP4 du serveur perso132.free.fr est désactivé, ce qui rend le portail totalement indisponible.

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é.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 51.5%
 
Posts: 42258
Images: 16725
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Bascule PHP4/PHP5

Unread postby critor » 19 Oct 2010, 11:27

2ème version de mon script de bascule PHP5 normalement installé et activé.


Je ne sais pas si il "fonctionne" correctement car il ne s'active que lorsque le moteur PHP4 est en panne, et le moteur fonctionne en ce moment.

Je ne peux que souhaiter que l'on ne sache jamais si il marche :#langue#:
Sinon, je corrigerai/améliorerai quand je "verrai" ce que ça donne.


Voici donc le fonctionnement:
* Si le moteur PHP4 est en panne (erreur 500), la page courante est redirigée vers un script qui en force l'évaluation en PHP5.
* Si le moteur PHP5 est lui aussi en panne (2ème erreur 500), la page d'erreur HTML que vous commencez hélas à bien connaître est affichée.


Remarque: en PHP5 le portail provoque des petites erreurs isolées, et c'est normal.
Il faudra les corriger au cas par cas, en remplaçant par du code polyvalent PHP4/PHP5.
PHP5 n'a pas de compatibilité ascendante PHP4. Il est en théorie beaucoup plus sécurisé, mais se montre donc en pratique beaucoup plus strict avec le code fourni.

C'est en tous cas "mieux" que rien, et c'est le but de ma démarche.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 51.5%
 
Posts: 42258
Images: 16725
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Bascule PHP4/PHP5

Unread postby Marco » 19 Oct 2010, 19:45

critor2000 wrote:Voici donc le fonctionnement:
* Si le moteur PHP4 est en panne (erreur 500), la page courante est redirigée vers un script qui en force l'évaluation en PHP5.
* Si le moteur PHP5 est lui aussi en panne (2ème erreur 500), la page d'erreur HTML que vous commencez hélas à bien connaître est affichée.

Fonctionnement normal en cas de php5 ne fonctionne pas : php4 ne fonctionne pas - redirection vers page en php5 - erreur 500 - redirection vers page php5 - erreur 500 - etc. CàD boucle infinie de redirection.
Donc de toute façon tu pourras pas caser la page en html dans ces conditions, il faut que quand tu passes en mode php5 et que tu rencontres une erreur 500, tu modifies le .htaccess de façon à avoir un retour au mode php4.
Image
User avatar
Marco
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 27.8%
 
Posts: 1259
Joined: 22 Mar 2009, 00:00
Location: 78
Gender: Male
Calculator(s):
MyCalcs profile

Re: Bascule PHP4/PHP5

Unread postby critor » 19 Oct 2010, 19:58

Marco wrote:
critor2000 wrote:Voici donc le fonctionnement:
* Si le moteur PHP4 est en panne (erreur 500), la page courante est redirigée vers un script qui en force l'évaluation en PHP5.
* Si le moteur PHP5 est lui aussi en panne (2ème erreur 500), la page d'erreur HTML que vous commencez hélas à bien connaître est affichée.

Fonctionnement normal en cas de php5 ne fonctionne pas : php4 ne fonctionne pas - redirection vers page en php5 - erreur 500 - redirection vers page php5 - erreur 500 - etc. CàD boucle infinie de redirection.



Le 1ère version a été testée et était fonctionnelle.
Free n'étant plus en panne, je n'ai pas pu tester les ajouts de la 2ème version du script, mais elle a normalement été prévue pour ne pas donner de boucle infinie. (c'est la nouveauté principale - il y a un 2ème fichier .htaccess)

Voici le schéma:

* si( erreur 500 PHP4 ) alors
** .htaccess redirige sur un fichier PHP5 d'un sous-dossier spécifique, contenant un .htaccess différent
** si( erreur 500 PHP5 ) alors
*** le 2ème .htaccess renvoie sur la page d'erreur HTML
*** sinon le script PHP5 construit une URL spéciale qui forcera l'évaluation de la page initiale en PHP5
** fin si
* fin si
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 51.5%
 
Posts: 42258
Images: 16725
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Bascule PHP4/PHP5

Unread postby Marco » 19 Oct 2010, 20:05

Mais comment forces-tu l'utilisation de php5 ? Tu fais une inclusion par rapport à l'url demandée dans un fichier .php5 ?
Image
User avatar
Marco
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 27.8%
 
Posts: 1259
Joined: 22 Mar 2009, 00:00
Location: 78
Gender: Male
Calculator(s):
MyCalcs profile

Re: Bascule PHP4/PHP5

Unread postby critor » 19 Oct 2010, 20:23

Marco wrote:Mais comment forces-tu l'utilisation de php5 ? Tu fais une inclusion par rapport à l'url demandée dans un fichier .php5 ?



Oui. Tu en penses quoi ?


Ce qui fait que les paramètres de type "POST" ne sont pas gérés (mais le portail n'utilise que des paramètres de type "GET").
Que les paraètres de type "GET" ne sont pas définis par défaut (c'était une méthode connue d'attaque du PHP4) mais doivent être récupérés avec $_GET (mais d'après ce que j'ai vu rapidement, Mic a bien fait le travail).
Et que certains chemins relatifs ou globaux risquent de poser problème.
(les chemins relatifs devront l'être par rapport à la racine du site, les chemins relatifs utilisant ".." dans un "include" ne passeront pas en PHP5...)

On verra ces petits détails à la prochaine panne...
Les premiers tests sont assez satisfaisant (je m'attendais à bien pire...).


* la page d'accueil marche à l'exception de 2 cadres "mineurs", 1 à gauche et 1 à droite (compteur et shootbox je crois)
* le login marche
* on peut accéder aux archives

Je crois que seul le téléchargement d'archives ne marche pas, car il utilise un "include ../".
Petit détail à corriger, mais dans l'ensemble, on a de quoi être fonctionnel en cas de panne PHP4.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 51.5%
 
Posts: 42258
Images: 16725
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Bascule PHP4/PHP5

Unread postby Marco » 19 Oct 2010, 20:39

Tu pourrais éviter ce problème en mettant ton fichier php5 à la racine, ton fichier dans le dossier avec un autre .htaccess effectue une redirection avec header('Location:'); si php5 ne fonctionne pas la redirection ne pourra pas être faite et on aura bien la page d'erreur html, sinon, comme le fichier php5 qui inclut les autres est dans le bon dossier, y'a plus de problème de lien relatif.
Image
User avatar
Marco
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 27.8%
 
Posts: 1259
Joined: 22 Mar 2009, 00:00
Location: 78
Gender: Male
Calculator(s):
MyCalcs profile

Re: Bascule PHP4/PHP5

Unread postby critor » 19 Oct 2010, 20:50

Marco wrote:Tu pourrais éviter ce problème en mettant ton fichier php5 à la racine, ton fichier dans le dossier avec un autre .htaccess effectue une redirection avec header('Location:'); si php5 ne fonctionne pas la redirection ne pourra pas être faite et on aura bien la page d'erreur html, sinon, comme le fichier php5 qui inclut les autres est dans le bon dossier, y'a plus de problème de lien relatif.


De quel problème parles-tu?
(j'en ai énoncé plusieurs...)

Le moteur du portail utilise plein de fichiers PHP dans de nombreux sous-dossiers.
Régler le problème des éventuels chemins relatifs à un dossier (et non à la racine), je ne vois que 3 solutions:
  • copier/coller mon fichier d'évaluation PHP5 dans tous les dossiers et sous-dossiers (c'est lourd, surtout si il faut le mettre à jour...)
  • modifier tous les chemins relatifs à un dossier (faut voir... je crois qu'ils sont minoritaires...)
  • changer le dossier courant avec une espèce de commande cd/chdir/chgdir (qui je pense n'existe pas en PHP...)


Mais si tu trouves une solution, je t'en prie.
Il faudra lister toutes les "petites" fonctionnalités inutilisables lors de la prochaine panne...
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 51.5%
 
Posts: 42258
Images: 16725
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Bascule PHP4/PHP5

Unread postby Marco » 19 Oct 2010, 21:03

Euh tu me laisses perplexe là.
Tu n'inclus bien qu'un seul fichier à chaque fois ?
Si oui, ce fichier devrait dans tous les cas être index.php, avec les options qu'il faut.
Si tu l'inclus à partir d'un fichier .php5, il est évalué en php5.
index.php est à la racine, donc tu n'as qu'à inclure index.php à partir d'un unique fichier .php5 à la racine.
Là tu élimines le problème des liens relatifs.
Si y'a d'autres fichiers que index.php à inclure directement, suivre le même raisonnement. (ça nous fait un de plus pour download.php je crois)
Après corriger le code qui génère des warnings ça devrait pas être trop dur.
Image
User avatar
Marco
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 27.8%
 
Posts: 1259
Joined: 22 Mar 2009, 00:00
Location: 78
Gender: Male
Calculator(s):
MyCalcs profile

Re: Bascule PHP4/PHP5

Unread postby critor » 19 Oct 2010, 21:16

Je n'inclus bien sûr qu'un seul fichier php par requête.

Mais il y a plusieurs fichiers php sur le portail, dont certains dans des sous-dossiers, qui sont parfois appelés directement.
Comme le "download.php".

Il faudra voir si il y en a d'autres qui peuvent être appelés directement...
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 51.5%
 
Posts: 42258
Images: 16725
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor


Return to Autres discussions

Who is online

Users browsing this forum: ClaudeBot [spider] and 11 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1565 utilisateurs:
>1554 invités
>6 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)