2
votes

php `$ _SERVER ['PHP_SELF']` est vide

J'ai un problème avec ma configuration nginx et php. Pour une raison quelconque, $ _SERVER ['PHP_SELF'] est vide.

Je cours:

  • Ubuntu 18.04
  • nginx (version nginx: nginx / 1.14.0 (Ubuntu))
  • php (PHP 7.2.10-0ubuntu0.18.04.1)

Je n'ai aucune idée de la cause de ce problème. J'ai beaucoup lu en ligne mais je n'ai trouvé aucune solution.

Juste pour voir s'il manque plus d'informations, j'ai vérifié ce que je reçois de print_r ($ _ SERVER); code>, voici ce que je reçois (Informations privées censurées ...):

Array ([USER] => www-data [HOME] => / var / www [HTTP_COOKIE] => CENSORED [HTTP_ACCEPT_LANGUAGE] => en-GB, en; q = 0.9, he-IL; q = 0.8, he; q = 0.7, en-US; q = 0.6, ru; q = 0.5 [HTTP_ACCEPT_ENCODING] => gzip, deflate, br [HTTP_ACCEPT] => text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, image / apng, / ; q = 0.8 [HTTP_USER_AGENT] => CENSORED [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [ HTTP_CACHE_CONTROL] => max-age = 0 [HTTP_CONNECTION] => keep-alive [HTTP_HOST] => cumta.morhaviv.com [SCRIPT_FILENAME] => /var/www/morhaviv.com/public_html/cumta/css/test.php [REDIRECT_STATUS] => 200 [SERVER_NAME] => www.cumta.morhaviv.com [SERVER_PORT] => 443 [SERVER_ADDR] => 153.92.209.235 [REMOTE_PORT] => 22964 [REMOTE_ADDR] => 176.231.2.86 [SERVER_SOFTWARE] = > nginx / 1.14.0 [GATEWAY_INTERFACE] => CGI / 1.1 [HTTPS] => sur [REQUEST_SCHEME] => https [SERVER_PROTOCOL] => HTTP / 1.1 [DOCUMENT_ROOT] => /var/www/morhaviv.com/public_html/ cumta [DOCUMENT_URI] => /css/test.php [REQUEST_URI] => /css/test.php [SCRIPT_NAME] => /css/test.php [CONTENT_LENGTH] => [CONTENT_TYPE] => [REQUEST_METHOD] => GET [QUERY_STRING] => [PATH_INFO] => [FCGI_ROLE] => RESPONDER [PHP_SELF] => [REFLOAT_TIME ] => 1549710420.5126 [REQUEST_TIME] => 1549710420)

Mon nginx.conf:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    # multi_accept on;
}

http {
    include        fastcgi_params; 
    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Je suis conscient que cette question manque peut-être d'informations supplémentaires, mais je n'ai vraiment aucune idée de quoi le reste est important, alors veuillez commenter et j'ajouterai les informations manquantes.

Merci pour votre aide!


3 commentaires

Vérifiez Google. Configuration php-cgi non valide.


@emix je l'ai fait, mais je n'ai rien trouvé pour résoudre mon problème ...


Aussi, si vous comptez utiliser PHP_SELF. Évitez de l'utiliser. Ou entourez-le de htmlentities () car il est vulnérable à l'injection XSS.


3 Réponses :


0
votes

Assurez-vous d'inclure cette ligne dans le fichier de configuration de nginx:

include fastcgi_params

À part cela, je ne vois aucune raison pour que cela ne fonctionne pas.

J'espère que cela aide


6 commentaires

Dois-je l'inclure dans le fichier de configuration fastcgi ou dans le fichier de configuration du site dans le répertoire sites-available?


@ morha13 le fichier de configuration principal - nginx.conf . peut être dans /etc/nginx/nginx.conf , selon le système d'exploitation que vous utilisez


Merci de votre aide! J'ai essayé de l'ajouter, mais cela ne semble toujours pas fonctionner. J'ai essayé de l'ajouter dans le fichier nginx.conf, voici comment je l'ai implémenté: pastebin.com/KbxDuQZR


essayez de suivre ceci: nginx.com/resources/wiki/start/ topics / examples / phpfcgi peut-être que vous saurez ce dont vous avez besoin. laissez-moi savoir une fois que c'est résolu


Ok, je vais essayer, merci! Je vous ferai savoir si je l'ai compris


Je l'ai fait! Cela a pris du temps mais je l'ai compris! Dans le lien que vous avez envoyé, en bas, il y a quelques notes, la dernière note était le problème. Ce guide fonctionne bien sur php.ini avec cgi.fix_pathinfo = 1 (par défaut). Certains guides insistent pour le changer en cgi.fix_pathinfo = 0 mais cela rend la variable PHP_SELF cassée (différente de DOCUMENT_URI).



4
votes

Certains tutoriels sur l'installation du serveur nginx avec php, insistent pour changer le paramètre du fichier php.ini cgi.fix_pathinfo , à 0.

Ma solution était donc en train de changer dans le php.ini:

cgi.fix_pathinfo = 1

à la valeur par défaut:

cgi.fix_pathinfo = 0 

C'est essentiellement .

La solution a été trouvée grâce au commentaire de kenzotenma sur sa réponse, avec ce lien: https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/


2 commentaires

Je suppose que ce n'est pas une solution sécurisée - security.stackexchange.com/questions/177354/...


avec security.limit_extensions ou nginx try_files / if, c'est sûr



0
votes

La définition de fix_pathinfo sur 1 est une vulnérabilité potentielle. Ajoutez plutôt cette ligne à la section nginx php_fpm :

fastcgi_param SCRIPT_FILENAME $ racine_document $ fastcgi_script_name;

et simplement attribuer manuellement une variable globale:

$ _SERVER ['PHP_SELF'] =! vide ($ _ SERVER ['PHP_SELF'])? $ _SERVER ['PHP_SELF']: '/'.basename($_SERVER['SCRIPT_FILENAME']);

En savoir plus


0 commentaires