ID:               50503
 Comment by:       carsten_sttgt at gmx dot de
 Reported By:      tidustracker at freenet dot de
 Status:           Feedback
 Bug Type:         Program Execution
 Operating System: Windows Vista
 PHP Version:      5.3.1
 New Comment:

> but that's not a proc_open bug then.

Correct, but I think it there a basic problem with proc_open on
Windows. In this case with the environment.

Just see this example:
http://de.php.net/manual/en/function.proc-open.php#function.proc-open.examples

It's not working on Windows (returning 1 and no output). If you
change:
- $process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
+ $process = proc_open('php', $descriptorspec, $pipes);

it's "working". But also no output, because the environment $_ENV is
empty (even the new process should inherit the current ENV).

if you now change:
- write($pipes[0], '<?php print_r($_ENV); ?>');
+ write($pipes[0], '<?php print_r($_SERVER); ?>');

you can see there is an output. But as long $env is an array (and not
null) the script is not working). And so it's also not possible to
define new env variables for the new process.

Regards,
Carsten


Previous Comments:
------------------------------------------------------------------------

[2009-12-17 01:31:51] paj...@php.net

but that's not a proc_open bug then. PHP has no idea about what has
called it. I'm not sure either why they are not defined in this case.



------------------------------------------------------------------------

[2009-12-17 01:22:23] tidustracker at freenet dot de

The script is working very well? Adjust the two paths and run it in
CLI. The ENVs are not the problem, the ENVs cause the problem.

The php example code starts via proc_open a new php process.
With an passed $env array to proc_open, the two constants SOL_TCP and
SOL_UDP described at http://php.net/manual/en/sockets.constants.php are
missing in the new php process.

------------------------------------------------------------------------

[2009-12-17 01:01:51] paj...@php.net

Please provide a valid/working script.

The easiest way to verify that all ENVs are correctly defined is to
simply echo them out (echo %ENVNAME%).

------------------------------------------------------------------------

[2009-12-17 00:40:37] tidustracker at freenet dot de

Description:
------------
It seems that passing an array(filled or empty) to proc_open drops the
two constants SOL_TCP and SOL_UDP in created process

Reproduce code:
---------------
$arrConstants = get_defined_constants(true);

print('Constants: '. count($arrConstants['sockets']) . PHP_EOL);
print_r($arrConstants['sockets']);

ob_start(); ?>
        $arrConstants = get_defined_constants(true);

        file_put_contents('D:/proc_open_bug.txt', 'Constants: '.
count($arrConstants['sockets']) . PHP_EOL .
print_r($arrConstants['sockets'], true));
<?php
        $strCode = ob_get_contents();
ob_end_clean();

$arrDescriptor  = array(0 => array('pipe', 'r'), 1 => array('pipe',
'w'), 2 => array('pipe', 'w'));
$arrOptions             = array('suppress_errors' => false, 'bypass_shell' =>
true);
$arrPipes               = array();
$strCWD                 = null;
$arrEnv                 = array('process' => true); // Constants SOL_TCP and 
SOL_UDP
are NOT available in opened process
#$arrEnv                = null;                                         // All 
fine with constants SOL_TCP and SOL_UDP

proc_open('php_53 -r "'. $strCode. '"', $arrDescriptor, $arrPipes,
$strCWD, $arrEnv, $arrOptions);

Expected result:
----------------
passing an array to proc_open expects 86 constants including SOL_TCP
and SOL_UDP in the new process

Actual result:
--------------
only 84 constants


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=50503&edit=1

Reply via email to