diff options
Diffstat (limited to 'sapi/cli/php_cli.c')
-rw-r--r-- | sapi/cli/php_cli.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index d1fa6a6d00..52055c98c9 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -674,11 +674,7 @@ static int do_cli(int argc, char **argv) /* {{{ */ char *exec_direct=NULL, *exec_run=NULL, *exec_begin=NULL, *exec_end=NULL; char *arg_free=NULL, **arg_excp=&arg_free; char *script_file=NULL, *translated_path = NULL; -#if defined(PHP_WIN32) && !defined(PHP_CLI_WIN32_NO_CONSOLE) && (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE) - int interactive = php_win32_console_is_own(); -#else int interactive=0; -#endif int lineno = 0; const char *param_error=NULL; int hide_argv = 0; @@ -918,6 +914,20 @@ static int do_cli(int argc, char **argv) /* {{{ */ goto err; } +#if defined(PHP_WIN32) && !defined(PHP_CLI_WIN32_NO_CONSOLE) && (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE) + if (!interactive) { + /* The -a option was not passed. If there is no file, it could + still make sense to run interactively. The presense of a file + is essential to mitigate buggy console info. */ + interactive = php_win32_console_is_own() && + !(script_file || + argc > php_optind && behavior!=PHP_MODE_CLI_DIRECT && + behavior!=PHP_MODE_PROCESS_STDIN && + strcmp(argv[php_optind-1],"--") + ); + } +#endif + if (interactive) { #if (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE) printf("Interactive shell\n\n"); |