Here's what I can tell so far:
the arguments do get passed to cgi_main.c's main() function just fine, and the arguments are even parsed okay. The problem seems to occur because when the arguments are parsed from a script like so: #!/usr/bin/php -c /path/to/ini/file <?php ... ?> it seems that there's at least one leading space in the argument to the -c option, i.e. in sapi/cgi/cgi_main.c, cgi_sapi_module.php_ini_path_override is set to " /path/to/ini/file" instead of "/path/to/ini/file". This in turn ends up confusing php_init_config() in main/php_ini.c, and although it will return SUCCESS (as the file isn't found thanks to the leading spaces), which is okay because the defaults are used instead, and no warning or error is given about not being able to find php.ini in " /path/to/ini/file". I didn't catch this until about an hour ago, but all of my CLI PHP scripts were relying on default settings rather than the ones I had set in "/usr/local/zend/etc/cli/php.ini", or as far as php_init_config() was concerned, said file with a leading space. A quick fix for the problem would be to trim off those leading spaces to the argument to -c, but I'm not sure if that wouldn't cause more problems in the long run. For instance, is it possible to have leading spaces in directory names on some operating systems? It's not a problem for me, and it probably wouldn't be a huge problem overall, but if there's a chance guaranteed it will affect somebody. Anyways, quick solution, very in-elegant and probably not very safe (but it worked, so at least it proves I'm somewhat right on this) was to stick the following bit of code (my additions prefixed with >): if (php_ini_path_override) { php_ini_search_path = php_ini_path_override; > while (php_ini_search_path[0] == ' ') { > for (i = 0; i < strlen(php_ini_search_path); i++) { > php_ini_search_path[i] = php_ini_search_path[i + 1]; > } > } free_ini_search_path = 0; } in main/php_ini.c. Strips out the leading spaces and lets my scripts work properly again, with the proper php.ini settings. Comments? J [EMAIL PROTECTED] wrote: > ID: 14930 > Updated by: edink > Reported By: [EMAIL PROTECTED] > Old Status: Open > Status: Analyzed > Bug Type: Output Control > Operating System: linux 2.4.9 > PHP Version: 4.1.1 > New Comment: > > I was able to reproduce this. However it does not appear > to be a php bug. Most likely a glibc bug. > > If I put this line on top of my script: > #!/usr/bin/php -q -c /path/to/ini/file -C > > the following values get passed to > php's main() function. > > argc=3 > argv[0]: php > argv[1]: -q -c /path/to/ini/file -C > argv[2]: ./test (which is the name of the script) > > With parameters passed like that, php has > no chance of passing them correctly. > > FreeBSD systems appear to be free of this problem. > > Previous Comments: > ------------------------------------------------------------------------ > > > > Edit this bug report at http://bugs.php.net/?id=14930&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]