May be it make sense. I thought about it today, but I am afraid to introduce new bugs in last minute. (this is not a simple addition). May be we will return to it after 5.2.1 release.
Thanks. Dmitry. > -----Original Message----- > From: Nuno Lopes [mailto:[EMAIL PROTECTED] > Sent: Saturday, January 06, 2007 7:48 PM > To: Dmitry Stogov; php-cvs@lists.php.net > Subject: Re: [PHP-CVS] cvs: php-src(PHP_5_2) / NEWS > /ext/standard proc_open.c > > > Uhm, maybe we can also apply this to unix code (skip 'sh')? > > > ----- Original Message ----- > From: "Dmitry Stogov" <[EMAIL PROTECTED]> > To: <php-cvs@lists.php.net> > Sent: Saturday, January 06, 2007 9:02 AM > Subject: [PHP-CVS] cvs: php-src(PHP_5_2) / NEWS /ext/standard > proc_open.c > > > > dmitry Sat Jan 6 09:02:02 2007 UTC > > > > Modified files: (Branch: PHP_5_2) > > /php-src NEWS > > /php-src/ext/standard proc_open.c > > Log: > > Improved proc_open(). Now on Windows it can run external > commands not > > through CMD.EXE > > > > > > > http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.473&r2=1. > > 2027.2.547.2.474&diff_format=u > > Index: php-src/NEWS > > diff -u php-src/NEWS:1.2027.2.547.2.473 > php-src/NEWS:1.2027.2.547.2.474 > > --- php-src/NEWS:1.2027.2.547.2.473 Thu Jan 4 23:55:56 2007 > > +++ php-src/NEWS Sat Jan 6 09:02:02 2007 > > @@ -1,6 +1,8 @@ > > PHP > > NEWS > > > |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| > ||||||||||||||||| > > ?? Jan 2007, PHP 5.2.1RC3 > > +- Improved proc_open(). Now on Windows it can run external > commands > > +not > > through > > + CMD.EXE. (Dmitry) > > > > 04 Jan 2007, PHP 5.2.1RC2 > > - Small optimization of the date() function (Matt,Ilia) > > > http://cvs.php.net/viewvc.cgi/php-src/ext/standard/proc_open.c?r1=1.36 > > .2.1.2.6&r2=1.36.2.1.2.7&diff_format=u > > Index: php-src/ext/standard/proc_open.c > > diff -u php-src/ext/standard/proc_open.c:1.36.2.1.2.6 > > php-src/ext/standard/proc_open.c:1.36.2.1.2.7 > > --- php-src/ext/standard/proc_open.c:1.36.2.1.2.6 Tue Jan > 2 15:29:09 2007 > > +++ php-src/ext/standard/proc_open.c Sat Jan 6 09:02:02 2007 > > @@ -15,7 +15,7 @@ > > | Author: Wez Furlong <[EMAIL PROTECTED]> > > | > > > > > +------------------------------------------------------------- > ---------+ > > */ > > -/* $Id: proc_open.c,v 1.36.2.1.2.6 2007/01/02 15:29:09 > nlopess Exp $ > > */ > > +/* $Id: proc_open.c,v 1.36.2.1.2.7 2007/01/06 09:02:02 > dmitry Exp $ > > +*/ > > > > #if 0 && (defined(__linux__) || defined(sun) || > defined(__IRIX__)) # > > define _BSD_SOURCE /* linux wants this when XOPEN mode is on */ @@ > > -489,6 +489,7 @@ int is_persistent = 0; /* TODO: ensure that > > persistent procs will work */ #ifdef PHP_WIN32 > > int suppress_errors = 0; > > + int bypass_shell = 0; > > #endif > > #if PHP_CAN_DO_PTS > > php_file_descriptor_t dev_ptmx = -1; /* master */ > > @@ -509,10 +510,17 @@ > > if (other_options) { > > zval **item; > > if (SUCCESS == zend_hash_find(Z_ARRVAL_P(other_options), > > "suppress_errors", sizeof("suppress_errors"), (void**)&item)) { > > - if (Z_TYPE_PP(item) == IS_BOOL && Z_BVAL_PP(item)) { > > + if ((Z_TYPE_PP(item) == IS_BOOL || Z_TYPE_PP(item) == IS_LONG) && > > + Z_LVAL_PP(item)) { > > suppress_errors = 1; > > } > > } > > + if (SUCCESS == zend_hash_find(Z_ARRVAL_P(other_options), > > + "bypass_shell", > > sizeof("bypass_shell"), (void**)&item)) { > > + if ((Z_TYPE_PP(item) == IS_BOOL || Z_TYPE_PP(item) == IS_LONG) && > > + Z_LVAL_PP(item)) { > > + bypass_shell = 1; > > + } > > + } > > } > > #endif > > > > @@ -727,21 +735,25 @@ > > > > memset(&pi, 0, sizeof(pi)); > > > > - command_with_cmd = emalloc(command_len + sizeof(COMSPEC_9X) + 1 + > > sizeof(" /c ")); > > - sprintf(command_with_cmd, "%s /c %s", GetVersion() < 0x80000000 ? > > COMSPEC_NT : COMSPEC_9X, command); > > - > > if (suppress_errors) { > > old_error_mode = > > SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX); > > } > > > > - newprocok = CreateProcess(NULL, command_with_cmd, &security, > > &security, > > TRUE, NORMAL_PRIORITY_CLASS, env.envp, cwd, &si, &pi); > > + if (bypass_shell) { > > + newprocok = CreateProcess(NULL, command, &security, > &security, TRUE, > > NORMAL_PRIORITY_CLASS, env.envp, cwd, &si, &pi); > > + } else { > > + command_with_cmd = emalloc(command_len + sizeof(COMSPEC_9X) + 1 + > > sizeof(" /c ")); > > + sprintf(command_with_cmd, "%s /c %s", GetVersion() < 0x80000000 ? > > COMSPEC_NT : COMSPEC_9X, command); > > + > > + newprocok = CreateProcess(NULL, command_with_cmd, &security, > > + &security, > > TRUE, NORMAL_PRIORITY_CLASS, env.envp, cwd, &si, &pi); > > + > > + efree(command_with_cmd); > > + } > > > > if (suppress_errors) { > > SetErrorMode(old_error_mode); > > } > > > > - efree(command_with_cmd); > > - > > if (FALSE == newprocok) { > > php_error_docref(NULL TSRMLS_CC, E_WARNING, "CreateProcess > failed"); > > goto exit_fail; > > > > -- > > PHP CVS Mailing List (http://www.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php