diff options
Diffstat (limited to 'php-bug65641.patch')
-rw-r--r-- | php-bug65641.patch | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/php-bug65641.patch b/php-bug65641.patch new file mode 100644 index 0000000..d9b31d1 --- /dev/null +++ b/php-bug65641.patch @@ -0,0 +1,63 @@ +From 8cac75969e5abb2b6be5bbd489d851a4f9e50979 Mon Sep 17 00:00:00 2001 +From: Remi Collet <remi@php.net> +Date: Mon, 15 Sep 2014 13:29:55 +0200 +Subject: [PATCH] Fixed bug #65641 PHP-FPM incorrectly defines the SCRIPT_NAME + variable when using Apache + +ProxyPass is unable to provide correct PATH_INFO +as it is not aware of file path (while SetHandler is). + +As we can extract PATH_INFO from PATH_TRANSLATED, +we also need to check if present in SCRIPT_NAME +and remove it. + +After applying this patch. +With mod_php +_SERVER["REQUEST_URI"] /info.php/foo/bar?q=1 +_SERVER["SCRIPT_NAME"] /info.php +_SERVER["PATH_INFO"] /foor/bar +_SERVER["PHP_SELF"] /info.php/foo/bar +_SERVER["QUERY_STRING"] q=1 + +With mod_proxy_fcgi + SetHandler +_SERVER["REQUEST_URI"] /info.php/foo/bar?q=1 +_SERVER["SCRIPT_NAME"] /info.php +_SERVER["PATH_INFO"] /foo/bar +_SERVER["PHP_SELF"] /info.php/foo/bar +_SERVER["QUERY_STRING"] q=1 + +With mod_proxy_fcgi + ProxyPass +_SERVER["REQUEST_URI"] /info.php/foo/bar?q=1 +_SERVER["SCRIPT_NAME"] /info.php +_SERVER["PATH_INFO"] /foo/bar +_SERVER["PHP_SELF"] /info.php/foo/bar +_SERVER["QUERY_STRING"] q=1 +--- + sapi/fpm/fpm/fpm_main.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c +index 56a06f9..331342c 100644 +--- a/sapi/fpm/fpm/fpm_main.c ++++ b/sapi/fpm/fpm/fpm_main.c +@@ -1231,6 +1231,17 @@ static void init_request_info(TSRMLS_D) + SG(request_info).request_uri = orig_script_name; + } + path_info[0] = old; ++ } else if (apache_was_here && env_script_name) { ++ /* Using mod_proxy_fcgi and ProxyPass, apache cannot set PATH_INFO ++ * As we can extract PATH_INFO from PATH_TRANSLATED ++ * it is probably also in SCRIPT_NAME and need to be removed ++ */ ++ int snlen = strlen(env_script_name); ++ if (snlen>slen && !strcmp(env_script_name+snlen-slen, path_info)) { ++ _sapi_cgibin_putenv("ORIG_SCRIPT_NAME", orig_script_name TSRMLS_CC); ++ env_script_name[snlen-slen] = 0; ++ SG(request_info).request_uri = _sapi_cgibin_putenv("SCRIPT_NAME", env_script_name TSRMLS_CC); ++ } + } + env_path_info = _sapi_cgibin_putenv("PATH_INFO", path_info TSRMLS_CC); + } +-- +1.9.2 + |