J'utilise Nginx 1.2.4
en combinaison avec PHP-FPM 5.4.8
une fastcgi
passe et j'essaie de passer des paramètres personnalisés à PHP
. Voici les options que j'ai trouvées jusqu'à présent:
en utilisant la
env
directive pour définir une variable d'environnement dansnginx
et la récupérer avecgetenv()
ou$_ENV
depuisPHP
. Le problème est queenv
ne fonctionne que dans lemain
contexte alors que je dois définir le paramètre dans leserver
contexte.en utilisant la
fastcgi_param
directive telle qu'elle est conçue pour cela.
J'ai essayé de changer les valeurs de certains paramètres en utilisant fastcgi_param
mais n'a pas réussi:
nginx:
fastcgi_param PATH_INFO "/var/tmp";
PHP:
J'ai vérifié tous les tableaux prédéfinis que j'ai pu trouver:
echo '<pre>';
echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS);
echo "\n".'$_SERVER'."\n"; var_dump($_SERVER);
echo "\n".'$_GET'."\n"; var_dump($_GET);
echo "\n".'$_POST'."\n"; var_dump($_POST);
echo "\n".'$_FILES'."\n"; var_dump($_FILES);
echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST);
echo "\n".'$_SESSION'."\n"; var_dump($_SESSION);
echo "\n".'$_ENV'."\n"; var_dump($_ENV);
echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE);
echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg);
echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA);
echo "\n".'$http_response_header'."\n"; var_dump($http_response_header);
echo "\n".'$argc'."\n"; var_dump($argc);
echo "\n".'$argv'."\n"; var_dump($argv);
echo '</pre>';
Le seul à montrer PATH_INFO
était $_SERVER
:
var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""
Mais la valeur que j'ai définie nginx
n'est pas prise en compte.
Q1: Dois-je configurer quoi que ce soit au nginx/php
niveau pour que la fastcgi_param
directive prenne effet?
Q2: La fastcgi_param
directive se limite-t-elle à une liste prédéfinie de paramètres (par exemple, je peux définir PATH_INFO
mes propres variables mais pas de telles, par exemple FOO
)?
Q3: Si oui à Q2: existe-t-il un moyen de passer des paramètres personnalisés à PHP depuis Nginx?
fastcgi.conf
,fastcgi_params
mais pasfastcgi-php.conf
: d'où l'avez-vous obtenu? Cela vous dérange de le partager via pastebin?fastcgi_pass 127.0.0.1:1028;
fastcgi_index index.php;
include conf/fastcgi.conf;
et conf / fastcgi.conf contient le reste des paramètres et paramètres requis par fastcginginx
. D'un autre côté, j'ai oublié d'inclure des choses lors de la compilationnginx
dans le passé, maisnginx
je refuserais de commencer à dire qu'il ne connaissait pas certaines directives que j'utilisais: ici rien, rien à redire, mais celafastcgi_param
ne fonctionne pas: (Je vais essayer leubuntu nginx
package d' origine et voir comment ça se passe.ubuntu nginx
package par défaut ...Vous pouvez modifier la demande en passant vos variables personnalisées dans l'en-tête de la demande, exemple:
Et puis vous pouvez lire ces valeurs à partir de l'en-tête de la demande dans votre script PHP.
la source