|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2009-06-25 14:22 UTC] allerlei+bugs dot php dot net at sihw dot nl
Description: ------------ Bug #47625 was closed as bogus (because it would be the same as bug #47042) but it is not. In version 5.2.10 at least, PHP_SELF and SCRIPT_FILENAME are set based on the ORIG_SCRIPTNAME, while in version 5.2.8 these are based on SCRIPT_NAME. So bug #47042 fixes some bug, but introduces a new one. Therefore this is not a duplicate bug. It is not bogus because the values of PHP_SELF etc changed betwoon 5.2.10 without this being part of the specification for 5.2.10. It breaks a lot of code on my systems, including phpmyadmin and joomla. Problem is that PHP_SELF should refer to the URL before the internal redirect or external handler. This is a problematic requirement because of all the jugling with SCRIPTNAME and ORIG_SCRIPTNAME, but bug #47625 described the bug exactly. The problem might me in the naming: handlers put the redirection into ORIG_SCRIPTNAME and the original path in SCRIPTNAME. I use a handler called startscript that is called with some pathinfo like /../startscript/php/myuser/path/to/script/. So the path /centraal/scripts/info.php when called from a vsite owned by user jelmer, is rewritten to /usr/bin/startscript/php/jelmer/scripts/info.php but PHP_SELF should remain /centraal/scripts/info.php Thank you for your thougths, Jelmer PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Nov 20 09:00:02 2025 UTC |
Probably not easy to reproduce without a wrapper like cgiwrap. I did not get suexec to work, but if you have an install with suexec handling php-cgi succesfully, that might work. Here are the $_SERVER values on my test system with apache. This uses /spinwebstartscript/startscript/php/USERNAME as a handler for php files. So the file test.php will be called through the handler /spinwebstartscript/startscript/php/USERNAME/test.php. Weird thing is that phpinfo() reports the SCRIPT_NAME environment var differently. Propably this is after some transformation in the php process, because the only thing different in the two configurations is the php version. The interesting value is SCRIPT_NAME. This is $_SERVER on 5.2.8: [REDIRECT_SCRIPT_URL] => /test.php [REDIRECT_SCRIPT_URI] => http://wensweb/test.php [REDIRECT_HANDLER] => startscript_php [REDIRECT_STATUS] => 200 [SCRIPT_URL] => /test.php [SCRIPT_URI] => http://wensweb/test.php [HTTP_HOST] => wensweb [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 6.0; nl; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729) [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => nl-nl,en;q=0.7,fr;q=0.3 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_CHARSET] => UTF-8,* [HTTP_KEEP_ALIVE] => 300 [HTTP_CONNECTION] => keep-alive [HTTP_CACHE_CONTROL] => max-age=0 [PATH] => /sbin:/usr/sbin:/bin:/usr/bin [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache [SERVER_NAME] => wensweb [SERVER_ADDR] => 192.168.0.10 [SERVER_PORT] => 80 [REMOTE_ADDR] => 192.168.0.3 [DOCUMENT_ROOT] => /home/pakket/wensweb/web [SERVER_ADMIN] => webmaster@wensweb.spinvis [SCRIPT_FILENAME] => /home/pakket/wensweb/web/test.php [REMOTE_PORT] => 55426 [REDIRECT_URL] => /test.php [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /test.php [SCRIPT_NAME] => /test.php [ORIG_PATH_INFO] => [ORIG_PATH_TRANSLATED] => /home/pakket/wensweb/web/test.php [ORIG_SCRIPT_NAME] => /spinwebstartscript/startscript/wensweb/php/test.php [PHP_SELF] => /test.php [REQUEST_TIME] => 1246544056 And this is $SERVER on 5.2.10: [REDIRECT_SCRIPT_URL] => /test.php [REDIRECT_SCRIPT_URI] => http://wensweb/test.php [REDIRECT_HANDLER] => startscript_php [REDIRECT_STATUS] => 200 [SCRIPT_URL] => /test.php [SCRIPT_URI] => http://wensweb/test.php [HTTP_HOST] => wensweb [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 6.0; nl; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729) [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => nl-nl,en;q=0.7,fr;q=0.3 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_CHARSET] => UTF-8,* [HTTP_KEEP_ALIVE] => 300 [HTTP_CONNECTION] => keep-alive [HTTP_CACHE_CONTROL] => max-age=0 [PATH] => /sbin:/usr/sbin:/bin:/usr/bin [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache [SERVER_NAME] => wensweb [SERVER_ADDR] => 192.168.0.10 [SERVER_PORT] => 80 [REMOTE_ADDR] => 192.168.0.3 [DOCUMENT_ROOT] => /home/pakket/wensweb/web [SERVER_ADMIN] => webmaster@wensweb.spinvis [SCRIPT_FILENAME] => /home/pakket/wensweb/web/test.php [REMOTE_PORT] => 55464 [REDIRECT_URL] => /test.php [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /test.php [SCRIPT_NAME] => /spinwebstartscript/startscript/wensweb/php/test.php [ORIG_PATH_INFO] => [ORIG_PATH_TRANSLATED] => /home/pakket/wensweb/web/test.php [PHP_SELF] => /spinwebstartscript/startscript/wensweb/php/test.php [REQUEST_TIME] => 1246544340 Thanks, Jelmerok, i compiled cgiwrap 4.1 with the following settings. ./configure '--with-php=/export/home/sriramn/sun/httpd22/cgi-bin/php-cgi.5210' '--with-httpd-user=sriramn' '--with-php-cgiwrap' '--with-install-dir=/export/home/sriramn/sun/httpd22/cgi-bin' '--with-install-group=staff' --with-cgiwrapd --with-php-interpreter Initializing Logging Redirecting STDERR to STDOUT Setting SIGXCPU to default behaviour Environment Variables: QUERY_STRING: '' SCRIPT_NAME: '/cgi-bin/php-cgiwrapd' SCRIPT_FILENAME: '/export/home/sriramn/sun/httpd22/cgi-bin/php-cgiwrapd' REDIRECT_URL: '/php-cgi/cgi-info.php' PATH_INFO: '/sriramn/php-cgi/cgi-info.php' PATH_TRANSLATED: '/export/home/sriramn/sun/httpd22/htdocs/sriramn/php-cgi/cgi-info.php' REMOTE_USER: '<NULL>' REMOTE_HOST: '<NULL>' REMOTE_ADDR: '127.0.0.1' Trying to extract user from PATH_INFO. Retrieved User Name: 'sriramn' User Data Retrieved: UserID: 'sriramn' UID: '101' GID: '10' Home Dir: '/export/home/sriramn' Checking user minimum uid. Script Base Directory: '/export/home/sriramn/public_html/cgi-bin' Fetching script string Trying to extract script from PATH_INFO Extracted PATH_INFO '/php-cgi/cgi-info.php' Building script path Condensing slashes. Script Relative Path: 'php-cgi/cgi-info.php' Script Absolute Path: '/export/home/sriramn/public_html/cgi-bin/php-cgi/cgi-info.php' Checking for special interpreted script (php). Interpreter Path: '/export/home/sriramn/sun/httpd22/cgi-bin/php-cgi.5210' Fixing Environment Variables. Environment Variables: QUERY_STRING: '' SCRIPT_NAME: '/cgi-bin/php-cgiwrapd/sriramn/php-cgi/cgi-info.php' SCRIPT_FILENAME: '/export/home/sriramn/public_html/cgi-bin/php-cgi/cgi-info.php' REDIRECT_URL: '/php-cgi/cgi-info.php' PATH_INFO: '<NULL>' PATH_TRANSLATED: '/export/home/sriramn/sun/httpd22/htdocs/sriramn/php-cgi/cgi-info.php' REMOTE_USER: '<NULL>' REMOTE_HOST: '<NULL>' REMOTE_ADDR: '127.0.0.1' UIDs/GIDs Changed To: RUID: '101' EUID: '101' RGID: '10' EGID: '10' Changing current directory to '/export/home/sriramn/public_html/cgi-bin/php-cgi' Executing: '/export/home/sriramn/sun/httpd22/cgi-bin/php-cgi.5210' Arguments: 0: '/export/home/sriramn/sun/httpd22/cgi-bin/php-cgi.5210' 1: 'cgi-info.php' Output of script follows: ===================================================== X-Powered-By: PHP/5.2.10 Content-type: text/html server software Apache/2.2.11 (Unix) script name /php-cgi/cgi-info.php script filename /export/home/sriramn/sun/httpd22/htdocs/sriramn/php-cgi/cgi-info.php path info path translated redirect uri redirect url/php-cgi/cgi-info.php self uri is /php-cgi/cgi-info.php and php 5.2.10 seem to be returning the right output. what configuration am i missing ? fyi, here is how my apache conf looks .. AddHandler cgi-wrapper .php AddHandler cgi-wrapper .cgi Action cgi-wrapper /cgi-bin/php-cgiwrapd/sriramn what am I missing here ? i will also hook up SuEXEC and see if I can reproduce that way..Sorry about the delay and the work I caused. I hope this is not something I missed somewhere. The thing is, the same 'startscript' is used for both 5.2.8 and 5.2.10. This program uses the php-cgi executable to start the script (is execs into php-cgi + arguments). I used this script to generate the environment: #!/usr/bin/perl print "Content-type: text/plain\n\n"; foreach my $i (sort keys %ENV) { print "${i}: " . $ENV{$i} . "\n"; } #end This is (most of) the output: DOCUMENT_ROOT: /home/pakket/wensweb/web GATEWAY_INTERFACE: CGI/1.1 HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 HTTP_ACCEPT_CHARSET: UTF-8,* HTTP_ACCEPT_ENCODING: gzip,deflate HTTP_ACCEPT_LANGUAGE: nl-nl,en;q=0.7,fr;q=0.3 HTTP_CONNECTION: keep-alive HTTP_HOST: www.wensweb.nl HTTP_KEEP_ALIVE: 300 HTTP_USER_AGENT: Mozilla/5.0 (Windows; U; Windows NT 6.0; nl; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729) PATH: /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin PATH_INFO: PATH_TRANSLATED: /home/pakket/wensweb/web/test8932.cgi QUERY_STRING: REDIRECT_HANDLER: startscript_exe REDIRECT_SCRIPT_URI: http://www.wensweb.nl/test8932.cgi REDIRECT_SCRIPT_URL: /test8932.cgi REDIRECT_STATUS: 200 REDIRECT_URL: /test8932.cgi REMOTE_ADDR: 83.161.60.47 REMOTE_PORT: 50783 REQUEST_METHOD: GET REQUEST_URI: /test8932.cgi SCRIPT_FILENAME: /home/pakket/wensweb/web/test8932.cgi SCRIPT_NAME: /spinwebstartscript/startscript/wensweb/exe/test8932.cgi SCRIPT_URI: http://www.wensweb.nl/test8932.cgi SCRIPT_URL: /test8932.cgi SERVER_ADDR: 81.26.210.110 SERVER_ADMIN: * SERVER_NAME: www.wensweb.nl SERVER_PORT: 80 SERVER_PROTOCOL: HTTP/1.1 SERVER_SIGNATURE: SERVER_SOFTWARE: Apache -- The script is now removed ofcause. Do you think these values are correct enough? If you think this is not bogus (as all stuff works ok in 5.2.8..) I can give you access if you need it. Please e-mail me privately for that. Jelmer)