Edit report at https://bugs.php.net/bug.php?id=55208&edit=1
ID: 55208 Updated by: f...@php.net Reported by: loco at andrews dot lv Summary: setting correct SCRIPT_NAME vs PHP_SELF is impossible in certain circumstances -Status: Assigned +Status: Feedback Type: Bug Package: FPM related Operating System: Gentoo Linux (2.6.39-gentoo-r3) PHP Version: 5.3.6 Assigned To: fat Block user comment: N Private report: N New Comment: Not enough information was provided for us to be able to handle this bug. Please re-read the instructions at http://bugs.php.net/how-to-report.php If you can provide more information, feel free to add it to this bug and change the status back to "Open". Thank you for your interest in PHP. Hi, I'm not able to reproduce the problem on my side. Can you please provide the following information: 1- nginx configuration (I need the doc_root and the fastcgi and location configuration): * server { * ... * root ...; * ... * location ~ \.php { * fastcgi_pass 127.0.0.1:9000; * fastcgi_split_path_info ^(.+\.php)(.*)$; * fastcgi_param PATH_INFO $fastcgi_path_info; * fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; * include fastcgi.conf; * } * } 2- PHP-FPM [pool] configuration 3- ini settings cgi.fix_pathinfo Thx ++ jerome Previous Comments: ------------------------------------------------------------------------ [2011-07-14 15:55:40] loco at andrews dot lv Description: ------------ I am running nginx 1.0.4 with php-fpm and php 5.3.6. It seems that PHP_SELF has strong dependency on the setting of SCRIPT_NAME. When setting SCRIPT_NAME to something, $_SERVER['PHP_SELF'] will contain PHP_SELF environment value concatenated with environment value of SCRIPT_NAME. If SCRIPT_NAME is not set to anything, then $_SERVER['PHP_SELF'] contains what is passed to the environment, however, since SCRIPT_NAME is not set, PHP scripts that rely on SCRIPT_NAME will not work. Example #1: accessing URL: /index.php/some/url setting server variables: SCRIPT_NAME /some/url PHP_SELF /some/url result: print $_SERVER['SCRIPT_NAME']; // outputs: "/some/url" - OK print $_SERVER['PHP_SELF']; // outputs: "/some/url//some/url" - NOT OK! Example #2: SCRIPT_NAME (unset) PHP_SELF /some/url result: print $_SERVER['SCRIPT_NAME']; // outputs: "" print $_SERVER['PHP_SELF']; // outputs: "/some/url" Example #3: SCRIPT_NAME /some/url PHP_SELF (unset) result: print $_SERVER['SCRIPT_NAME']; // outputs: "/some/url" print $_SERVER['PHP_SELF']; // outputs: "" --- Bottom line: if configured as demonstrated in the first example, scripts that rely on SCRIPT_NAME will work properly, but scripts that require PHP_SELF won't work, as it contains the invalid URL; if configured as shown in the second example, scripts that rely on PHP_SELF work properly, but scripts that require SCRIPT_NAME, don't work at all; lastly, if configured as in the third example, scripts that use SCRIPT_NAME will work properly, but scripts that use PHP_SELF won't work, as PHP_SELF is empty. Any workaround for this issue? When using mod_php with apache, both SCRIPT_NAME and PHP_SELF can be set to the same value, and will be interpreted by PHP exactly like they are passed. However, in FCGI/PHP-FPM environment I cannot find a way to set them both to the same value! How is $_SERVER['PHP_SELF'] being constructed? Why should it rely on SCRIPT_NAME at all? How to set server environment correctly, so it is the same under FastCGI and under mod_php / apache 2.2? Andrejs Test script: --------------- <?php print '<pre>'; printf("SCRIPT_NAME: \"%s\"\n", $_SERVER['SCRIPT_NAME']); printf("PHP_SELF: \"%s\"\n", $_SERVER['PHP_SELF']); print '</pre>'; ?> Expected result: ---------------- I'd thought PHP_SELF should be possible to define explicitly through the server environment, without other variables affecting it's value. How come is it so that in the apache/mod_php mode both SCRIPT_NAME and PHP_SELF contain the same value? This does not seem to be possible in the FastCGI environment, at least when using php-fpm. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=55208&edit=1