On Sat, Sep 19, 2009 at 3:48 AM, Marcus Merz <[email protected]> wrote:
> Hi,
>
> i ran into a problem with mod_fcgid and i wonder whether anybody can
> replicate my problem.
>
> There is also a bug report in here:
>
> http://sourceforge.net/tracker/?func=detail&aid=2854396&group_id=174879&atid=870991
>
>
Any PHP experts out there?
The basic problem from your description is that PHP thinks the .jpg file is
the PHP script and tries to parse that (instead of modify.php). I easily
duplicated that.
I then looked up the setting of cgi.fix_pathinfo. My php.ini has a comment
that says it defaults to 1. mod_fcgid has a setting that is supposed to
mirror that (PHP_Fix_Pathinfo_Enable). So I set "PHP_Fix_Pathinfo_Enable 1"
in my mod_fcgid configuration, but still no change in failure.
I then edited php.ini, set cgi.fix_pathinfo=0, set "PHP_Fix_Pathinfo_Enable
0" (the default) in my mod_fcgid conf, and retested.
Now PHP is trying to run modify.php instead of interpreting a .jpg file
(good!). It fails to open the file properly ("*Warning*:
getimagesize(./wtmrk./IMG_4418.jpg)") but that may be something about how I
attempted to set up modify.php.
So set "cgi.fix_pathinfo=0" in the proper* php.ini and try again. (*You may
have a separate one for mod_php vs. "CGI"; set the latter one.)
BTW, here were the request environment settings sent over by mod_fcgid:
SCRIPT_FILENAME=/home/trawick/inst/22/htdocs/modify.php
REDIRECT_URL=/wtmrk/IMG_4418.jpg
REQUEST_URI=/wtmrk/IMG_4418.jpg
SCRIPT_NAME=/modify.php
PATH_INFO=/wtmrk/IMG_4418.jpg
PATH_TRANSLATED=/home/trawick/wtmrk/IMG_4418.jpg
Another way to look at it is to consider if mod_fcgid is doing the right
thing when PHP_Fix_Pathinfo_Enable is 1 (matching PHP's default). I don't
know about that ;)
That logic (in mod_fcgid.c) is as follows:
/* "DOCUMENT_ROOT"/"SCRIPT_NAME" -> "SCRIPT_NAME" */
const char *doc_root = apr_table_get(e, "DOCUMENT_ROOT");
const char *script_name = apr_table_get(e, "SCRIPT_NAME");
if (doc_root && script_name
&& apr_filepath_merge(&merge_path, doc_root, script_name, 0,
r->pool) == APR_SUCCESS) {
apr_table_setn(e, "SCRIPT_NAME", merge_path);
}
In our example, the Action for wtmrk is defined as "/modify.php", so
SCRIPT_NAME is "/modify.php" when we get here. apr_filepath_merge() just
returns the 3rd parameter when it starts with "/", so our supposedly-merged
script name is unchanged. That's not what I would have expected. (Also, I
wonder what happens when SCRIPT_NAME is outside of DOCUMENT_ROOT.)
Recap: Try cgi.fix_pathinfo=0; maybe somebody else will chime in on the
PHP_Fix_Pathinfo_Enable processing.