Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[un poil HS] PB de script php

2 réponses
Avatar
Bzzz
Salut liste,

j'utilisais depuis un moment un script PHP achetement pratique puisqu'il
permet d'appeler d'autres scripts en n'importe quel langage sans passer
par les lourdeurs de fcgi.

Le PB, c'est que depuis le dist upgrade en wheezy, ben =C3=A7a m=C3=B4rchep=
=C3=BB
(erreur 404) au lieu de la page Pale d'awstats:(

Je subodore un PB PHP mais c'est pas mon truc =C3=A7a.
Il-y-a t'il une bonne =C3=A2me qui pourrait me dire d'o=C3=B9 =C3=A7a pourr=
ait venir?



<?php

// Piqu=C3=A9 sur: http://forum.slicehost.com/index.php?p=3D/discussion/2=
561/setup-awstats-on-my-nginx-server/p1

$descriptorspec =3D array(
0 =3D> array("pipe", "r"), // stdin is a pipe that the child will read=
from
1 =3D> array("pipe", "w"), // stdout is a pipe that the child will wri=
te to
2 =3D> array("pipe", "w") // stderr is a file to write to
);

$newenv =3D $_ENV;
$newenv["SCRIPT_FILENAME"] =3D $_ENV["X_SCRIPT_FILENAME"];
$newenv["SCRIPT_NAME"] =3D $_ENV["X_SCRIPT_NAME"];

if (is_executable($_ENV["X_SCRIPT_FILENAME"])) {
$process =3D proc_open($_ENV["X_SCRIPT_FILENAME"], $descriptorspec, $pi=
pes, NULL, $newenv);
if (is_resource($process)) {
fclose($pipes[0]);
$head =3D fgets($pipes[1]);
while (strcmp($head, "\n")) {
header($head);
$head =3D fgets($pipes[1]);
}
fpassthru($pipes[1]);
fclose($pipes[1]);
fclose($pipes[2]);
$return_value =3D proc_close($process);
}
else {
header("Status: 500 Internal Server Error");
echo("Internal Server Error (500) - SCRIPT /usr/lb/cgi-bin/cgi-bin.=
php THAT ALLOWS LANGUAGE-X SCRIPTS CALLS");
}
}
else {
header("Status: 404 Page Not Found");
echo("Page Not Found (404) - SCRIPT /usr/lb/cgi-bin/cgi-bin.php THAT AL=
LOWS LANGUAGE-X SCRIPTS CALLS");
}
?>


--=20
<trax> tu pr=C3=A9pares quoi comme bac ?
<rajae> LETRE
<trax> ah...

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/20121120231943.204215a2@anubis.defcon1

2 réponses

Avatar
Goldy
Le 20/11/2012 23:19, Bzzz a écrit :
Salut liste,

j'utilisais depuis un moment un script PHP achetement pratique puisqu'il
permet d'appeler d'autres scripts en n'importe quel langage sans passer
par les lourdeurs de fcgi.

Le PB, c'est que depuis le dist upgrade en wheezy, ben ça môrchepû
(erreur 404) au lieu de la page Pale d'awstats:(

Je subodore un PB PHP mais c'est pas mon truc ça.
Il-y-a t'il une bonne âme qui pourrait me dire d'où ça pourrait venir?



<?php

// Piqué sur: http://forum.slicehost.com/index.php?p=/discussion/2561/setup-awstats-on-my-nginx-server/p1

$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a file to write to
);

$newenv = $_ENV;
$newenv["SCRIPT_FILENAME"] = $_ENV["X_SCRIPT_FILENAME"];
$newenv["SCRIPT_NAME"] = $_ENV["X_SCRIPT_NAME"];

if (is_executable($_ENV["X_SCRIPT_FILENAME"])) {
$process = proc_open($_ENV["X_SCRIPT_FILENAME"], $descriptorspec, $pipes, NULL, $newenv);
if (is_resource($process)) {
fclose($pipes[0]);
$head = fgets($pipes[1]);
while (strcmp($head, "n")) {
header($head);
$head = fgets($pipes[1]);
}
fpassthru($pipes[1]);
fclose($pipes[1]);
fclose($pipes[2]);
$return_value = proc_close($process);
}
else {
header("Status: 500 Internal Server Error");
echo("Internal Server Error (500) - SCRIPT /usr/lb/cgi-bin/cgi-bin.php THAT ALLOWS LANGUAGE-X SCRIPTS CALLS");
}
}
else {
header("Status: 404 Page Not Found");
echo("Page Not Found (404) - SCRIPT /usr/lb/cgi-bin/cgi-bin.php THAT ALLOWS LANGUAGE-X SCRIPTS CALLS");
}
?>





Il n'y a pas particulièrement de raisons pour que cela ne marche plus,
si le script renvoie 404, c'est que le script appelé n'est pas
exécutable ou n'existe pas.

De là, il faudrait dumper la variable $_ENV["X_SCRIPT_FILENAME"] pour
voir ce qu'elle contient réellement, et vérifier que le script appelé
est bien exécutable ou qu'il n'y a pas de problèmes de droits.

Rajoute var_dump($_ENV["X_SCRIPT_FILENAME"]); avant la condition if pour
voir.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Bzzz
On Wed, 21 Nov 2012 02:17:16 +0100
Goldy wrote:


Il n'y a pas particulièrement de raisons pour que cela ne marche plu s,
si le script renvoie 404, c'est que le script appelé n'est pas
exécutable ou n'existe pas.



Ben si justement, il n'a pas changé de place (même dir) et est
bien exécutable, cékeskejcomprenpô!

En fait, j'ai rajouté un 'print' juste après le 'if' et il ne s'e st rien
passé, ergo: ça rejoint ce que tu dis en échouant le test.

De là, il faudrait dumper la variable $_ENV["X_SCRIPT_FILENAME"] pour
voir ce qu'elle contient réellement, et vérifier que le script appelé
est bien exécutable ou qu'il n'y a pas de problèmes de droits.

Rajoute var_dump($_ENV["X_SCRIPT_FILENAME"]); avant la condition if pour
voir.



avant: Page Not Found (404) - SCRIPT /usr/lb/cgi-bin/cgi-bin.php THAT ALLOWS
LANGUAGE-X SCRIPTS CALLS

après: NULL Page Not Found (404) - SCRIPT /usr/lb/cgi-bin/cgi-bin.php THAT
ALLOWS LANGUAGE-X SCRIPTS CALLS

Pas étonnant que le test échoue :(

Bon, j'ai aussi ajouté: var_dump($newenv);
juste après la ligne: $newenv = $_ENV;
et ça renvoie maintenant: array(0) { } NULL Page Not Found (404) -
SCRIPT /usr/lb/cgi-bin/cgi-bin.php THAT ALLOWS LANGUAGE-X SCRIPTS CALLS

Donc, il semble y avoir un PB pour lire l'environment, mais lequel?

php -v retourne:
PHP 5.4.4-9 (cli) (built: Oct 29 2012 14:03:08)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

et le svr HTTP est nginx avec php-fpm (qui retourne la même chose que php,
sauf qu'on a (fpm-cgi) à la place de (cli)).

Rahhhhhhh


EDIT: atrouvy! → dans le php.ini de fpm, la VAR 'variables_order' était =
"GPCS" au lieu de "EGPCS" - sans doute une erreur que j'ai commise
lors de la migration.

Dans l'cochon, comme disent les Allemands :)

--
<+Fanagame> ahah c marrant Vaillant le pigeon de combat
<+Fanagame> mais c vrai que ya eu 32 pigeons décorés pendant
la 2nde guerre mondiale ?!
<@Karasu> ils donnent bien la légion d'honneur à Pascal Obispo

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/