Hello.
Here is an modified patch for PHP command-line interface. It adds option -D
which forces php to chdir to the script directory.
diff -ruN php5-200308051930.orig/sapi/cli/php_cli.c
php5-200308051930/sapi/cli/php_cli.c
--- php5-200308051930.orig/sapi/cli/php_cli.c 2003-08-01
17:08:26.000000000 +0000
+++ php5-200308051930/sapi/cli/php_cli.c 2003-08-06
00:33:49.000000000 +0000
@@ -97,6 +97,7 @@
{'B', 1, "process-begin"},
{'C', 0, "no-chdir"}, /* for compatibility with CGI (do not chdir to
script directory) */
{'c', 1, "php-ini"},
+ {'D', 0, "chdir"},
{'d', 1, "define"},
{'E', 1, "process-end"},
{'e', 0, "profile-info"},
@@ -362,6 +363,7 @@
" -a Run interactively\n"
" -c <path>|<file> Look for php.ini file in
this directory\n"
" -n No php.ini file will be
used\n"
+ " -D Go to script
directory\n"
" -d foo[=bar] Define INI entry foo
with value 'bar'\n"
" -e Generate extended
information for debugger/profiler\n"
" -f <file> Parse <file>.\n"
@@ -527,6 +529,8 @@
const char *param_error=NULL;
int scan_input = 0;
int hide_argv = 0;
+ int do_chdir = 0;
+ char *new_cwd;
/* end of temporary locals */
#ifdef ZTS
zend_compiler_globals *compiler_globals;
@@ -687,6 +691,9 @@
case 'C': /* don't chdir to the script directory */
/* This is default so NOP */
break;
+ case 'D': /* chdir to the script directory */
+ do_chdir = 1;
+ break;
case 'd': /* define ini entries on command line */
define_command_line_ini_entry(optarg);
break;
@@ -902,6 +909,12 @@
zend_llist_destroy(&global_vars);
PG(during_request_startup) = 0;
+ if (do_chdir && strcmp(file_handle.filename, "-")) {
+ new_cwd = strdup(file_handle.filename);
+ php_dirname(new_cwd, strlen(new_cwd));
+ chdir(new_cwd);
+ free(new_cwd);
+ }
switch (behavior) {
case PHP_MODE_STANDARD:
if (strcmp(file_handle.filename, "-")) {
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php