[6.4] PHP 7.2.13 : $_SERVER['PHP_SELF'] bizarre
#1

Bonsoir,

Je viens de me rendre compte d'un comportement bizarre avec PHP (v7.2.13) concernant la variable $_SERVER['PHP_SELF']

Aussi bizarre que cela puisse paraître, il me dédouble la chaîne de caractères à l'intérieur, telle que :

Code :
/info.php/info.php
, pour un fichier info.php à la racine de mon site !

Résultat, pour certains de mes scripts PHP, je ne peux plus utiliser :

Code :
if($_SERVER['PHP_SELF'] == '/URL/script.php') {

mais :


Code :
if(stristr($_SERVER['PHP_SELF'], '/URL/script.php')) {

Quelqu'un aurait une idée de la raison de ce comportement - qui me semble aberrant - !?





Et, comme une image vaut mille mots :
[Image: 1546376706.png]

GPG:Fingerprint ed25519 : 072A 4DA2 8AFD 868D 74CF  9EA2 B85E 9ADA C377 5E8E
GPG:Fingerprint rsa4096 : 4E0D 4AF7 77F5 0FAE A35D  5B62 D0FF 7361 59BF 1733
Répondre
#2

Étrange en effet.
Es-ce un bug ?
En version 7.2.10 as tu le même comportement ?

« La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. » Antoine de Saint-Exupéry
Répondre
#3

Il faut que je teste ça sur une autre machine ! :p
(car maintenant qu'il a été upgradé...)

GPG:Fingerprint ed25519 : 072A 4DA2 8AFD 868D 74CF  9EA2 B85E 9ADA C377 5E8E
GPG:Fingerprint rsa4096 : 4E0D 4AF7 77F5 0FAE A35D  5B62 D0FF 7361 59BF 1733
Répondre
#4

Il y a quel serveur web derrière ? Si c'est nginx, je vérifierais qu'il n'y a pas n'importe quoi dans les fastcgi_param
Répondre
#5

Le fichier 'fastcgi_params':

Code :
$ cat /etc/nginx/fastcgi_params                                                                                       

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;
fastcgi_param  PATH_INFO          $fastcgi_script_name;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

fastcgi_param  HTTP_PROXY         "";

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Néanmoins, si j'ai bien compris le fichier n'est réellement appelé que lors d'une redirection proxy soit vers localhost, soit vers une ip désignée...
Donc, je ne comprendrais pas en quoi, ces déclarations modifieraient celles du vhost qui est frontal !?

(d'autant que je n'avais pas ce problème sous PHP 7.0, et encore moins avant, puisqu'on tournait avec PHP 5.x)

GPG:Fingerprint ed25519 : 072A 4DA2 8AFD 868D 74CF  9EA2 B85E 9ADA C377 5E8E
GPG:Fingerprint rsa4096 : 4E0D 4AF7 77F5 0FAE A35D  5B62 D0FF 7361 59BF 1733
Répondre
#6

(08-01-2019, 12:04:51)PengouinBSD a écrit :  Le fichier 'fastcgi_params':

Code :
$ cat /etc/nginx/fastcgi_params                                                                                       

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;
fastcgi_param  PATH_INFO          $fastcgi_script_name;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

fastcgi_param  HTTP_PROXY         "";

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Néanmoins, si j'ai bien compris le fichier n'est réellement appelé que lors d'une redirection proxy soit vers localhost, soit vers une ip désignée...
Donc, je ne comprendrais pas en quoi, ces déclarations modifieraient celles du vhost qui est frontal !?

(d'autant que je n'avais pas ce problème sous PHP 7.0, et encore moins avant, puisqu'on tournait avec PHP 5.x)

le fichier fastcgi_param est souvent inclus dans les blocs du genre location ~ ".php$", mais tu peux avoir d'autres fastcgi_param là dedans. J'imagine qu'un truc du genre fastcgi_param  SCRIPT_FILENAME    $fastcgi_script_name/$fastcgi_script_name donnerait ton résultat bizarre ^^

je ne fais que supposer car je ne sais pas du tout comment est montée l'infra, il s'agit peut être aussi d'un bug.
Répondre
#7

Tu as raison, j'avais oublié cet aspect ! :p

Le bloc 'location ... php' :

Code :
$ cat /etc/nginx/***/mon-domaine.net/php.cfg                                                                                    
       location ~ \.php$ {

               try_files $uri =404;

               fastcgi_index   index.php;
               fastcgi_intercept_errors        on;

               include fastcgi_params;

               fastcgi_param REDIRECT_STATUS 200;
               fastcgi_pass unix:/run/php-fpm.mon-domaine.net.sock;

               fastcgi_split_path_info ^(.+\.php)(/.+)$;

       }

GPG:Fingerprint ed25519 : 072A 4DA2 8AFD 868D 74CF  9EA2 B85E 9ADA C377 5E8E
GPG:Fingerprint rsa4096 : 4E0D 4AF7 77F5 0FAE A35D  5B62 D0FF 7361 59BF 1733
Répondre
#8

j'ai comme l'impression que ça vient de fastcgi_split_path_info
http://nginx.org/en/docs/http/ngx_http_f..._path_info

tu peux essayer de le commenter ?
Répondre
#9

Malheureusement, c'est pareil !
(j'ai redémarré les deux services...)

GPG:Fingerprint ed25519 : 072A 4DA2 8AFD 868D 74CF  9EA2 B85E 9ADA C377 5E8E
GPG:Fingerprint rsa4096 : 4E0D 4AF7 77F5 0FAE A35D  5B62 D0FF 7361 59BF 1733
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)