Nginx'ten PHP'ye özel parametreler nasıl aktarılır?


10

Bir geçiş Nginx 1.2.4ile PHP-FPM 5.4.8birlikte kullanıyorum fastcgive özel parametreleri geçirmeye çalışıyorum PHP. İşte şimdiye kadar bulduğum seçenekler:

  • kullanarak envyönergesini bir ortam değişkeni ayarlamak için nginxve onu getir getenv()veya $_ENVdan PHP. Sorun, envyalnızca mainbağlam içinde çalışır, ancak parametrenin serverbağlam içinde ayarlanması gerekir .

  • fastcgi_paramdirektifin bunun için tasarlandığı şekliyle kullanılması .

Kullanarak bazı parametrelerin değerlerini değiştirmeyi denedim fastcgi_paramama başarısız oldu:

nginx:

fastcgi_param PATH_INFO "/var/tmp";

PHP:

Bulabildiğim önceden tanımlanmış tüm dizileri kontrol ettim:

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>';

Göstermek için sadece bir PATH_INFOoldu $_SERVER:

var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""

Ancak belirlediğim değer nginxdikkate alınmıyor.

S1: Direktifin yürürlüğe girmesi nginx/phpiçin herhangi bir düzeyde yapılandırmam gerekiyor fastcgi_parammu?

S2: fastcgi_paramYönerge önceden tanımlanmış bir parametre listesiyle sınırlı mı (örn PATH_INFO. Kendi değişkenlerimi belirleyebilirim, ancak değil FOO)?

S3: Q2'ye evet ise: Nginx'ten PHP'ye özel parametreler iletmenin bir yolu var mı?

Yanıtlar:


14

Fastcgi_param yönergesi ile ek parametreler iletebilirsiniz. Eminim çünkü bu işlevi kullandım.

Örnek nginx yapılandırmam

server {
    server_name localhost;
    include     conf/defaults.conf;
    root        /var/www;

    location    ~* "\.php$" {
        fastcgi_param CRS "crs";
        include conf/fastcgi-php.conf;
    }                                           
}

Ve phpinfo () çıktısının bir parçası:

...
_SERVER["USER"] fcgi
_SERVER["HOME"] /dev/null
_SERVER["FCGI_ROLE"]    RESPONDER
_SERVER["REMOTE_USER"]  no value
_SERVER["CRS"]  crs
_SERVER["QUERY_STRING"] no value

Ben fastcgi.confve fastcgi_paramsancak fastcgi-php.conf: nerelisin aldın? Yapıştırıcı ile paylaşmayı düşünür müsünüz?
Maksimum

Bu benim özel yapılandırmam ama sihir yok: fastcgi_pass 127.0.0.1:1028; fastcgi_index index.php; include conf/fastcgi.conf; ve conf / fastcgi.conf, fastcgi'nin gerekli parametrelerini ve ayarlarını geri kalanı içeriyor
Krzysztof Księżyk

Düşünebildiğim tek şey, derleme sırasında konfektöre bir şey eklemeyi unuttuğum nginx. Öte yandan, nginxgeçmişte derlerken bir şeyler eklemeyi unuttum , ancak nginxkullandığım bazı direktifler hakkında bilmediğini söylemeyi reddederim: burada hiçbir şey, şikayet yok, ama yine de fastcgi_paramçalışmıyor: (Orijinal ubuntu nginxpakete bir deneyeceğim ve nasıl gittiğini göreceğim.
Max

Evet, varsayılan ubuntu nginxpaketle çalışıyor ...
Max

@ user64204 bu kesinlikle yapılandırmanızla ilgili bir sorundu ve ubuntu paketi bazı yapılandırma dosyalarınızın üzerine yazmıştı. Ancak bize tam yapılandırmanızı göstermediğiniz için, sorunun gerçekte ne olduğunu belirlemenin bir yolu yoktur.
VBart

0

Özel değişkenlerinizi istek başlığına ileterek isteği değiştirebilirsiniz, örnek:

proxy_set_header Variable-name-here Value-here;

Ve sonra bu değerleri PHP betiğinizdeki istek başlığından okuyabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.