mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
111 lines
2.4 KiB
PHP
111 lines
2.4 KiB
PHP
--TEST--
|
|
Using proc_open() with a command array (no shell)
|
|
--FILE--
|
|
<?php
|
|
|
|
$php = getenv('TEST_PHP_EXECUTABLE');
|
|
$ds = [
|
|
0 => ['pipe', 'r'],
|
|
1 => ['pipe', 'w'],
|
|
2 => ['pipe', 'w'],
|
|
];
|
|
|
|
echo "Empty command array:\n";
|
|
try {
|
|
proc_open([], $ds, $pipes);
|
|
} catch (ValueError $exception) {
|
|
echo $exception->getMessage() . "\n";
|
|
}
|
|
|
|
echo "\nNul byte in program name:\n";
|
|
try {
|
|
proc_open(["php\0oops"], $ds, $pipes);
|
|
} catch (ValueError $exception) {
|
|
echo $exception->getMessage() . "\n";
|
|
}
|
|
|
|
echo "\nNul byte in argument:\n";
|
|
try {
|
|
proc_open(["php", "array\0oops"], $ds, $pipes);
|
|
} catch (ValueError $exception) {
|
|
echo $exception->getMessage() . "\n";
|
|
}
|
|
|
|
echo "\nEmpty program name:\n";
|
|
try {
|
|
proc_open([""], $ds, $pipes);
|
|
} catch (ValueError $exception) {
|
|
echo $exception->getMessage() . "\n";
|
|
}
|
|
|
|
echo "\nBasic usage:\n";
|
|
$proc = proc_open([$php, '-r', 'echo "Hello World!\n";'], $ds, $pipes);
|
|
fpassthru($pipes[1]);
|
|
proc_close($proc);
|
|
|
|
putenv('ENV_1=ENV_1');
|
|
/* PATH is needed to find ASan DLLs (and maybe others) on Windows */
|
|
$env = ['ENV_2' => 'ENV_2', 'PATH' => getenv('PATH')];
|
|
$cmd = [$php, '-n', '-r', 'var_dump(getenv("ENV_1"), getenv("ENV_2"));'];
|
|
|
|
echo "\nEnvironment inheritance:\n";
|
|
$proc = proc_open($cmd, $ds, $pipes);
|
|
fpassthru($pipes[1]);
|
|
proc_close($proc);
|
|
|
|
echo "\nExplicit environment:\n";
|
|
$proc = proc_open($cmd, $ds, $pipes, null, $env);
|
|
fpassthru($pipes[1]);
|
|
proc_close($proc);
|
|
|
|
echo "\nCheck that arguments are correctly passed through:\n";
|
|
$args = [
|
|
"Simple",
|
|
"White space\ttab\nnewline",
|
|
'"Quoted"',
|
|
'Qu"ot"ed',
|
|
'\\Back\\slash\\',
|
|
'\\\\Back\\\\slash\\\\',
|
|
'\\"Qu\\"ot\\"ed\\"',
|
|
];
|
|
$cmd = [$php, '-r', 'var_export(array_slice($argv, 1));', '--', ...$args];
|
|
$proc = proc_open($cmd, $ds, $pipes);
|
|
fpassthru($pipes[1]);
|
|
proc_close($proc);
|
|
|
|
?>
|
|
--EXPECT--
|
|
Empty command array:
|
|
proc_open(): Argument #1 ($command) must not be empty
|
|
|
|
Nul byte in program name:
|
|
Command array element 1 contains a null byte
|
|
|
|
Nul byte in argument:
|
|
Command array element 2 contains a null byte
|
|
|
|
Empty program name:
|
|
First element must contain a non-empty program name
|
|
|
|
Basic usage:
|
|
Hello World!
|
|
|
|
Environment inheritance:
|
|
string(5) "ENV_1"
|
|
bool(false)
|
|
|
|
Explicit environment:
|
|
bool(false)
|
|
string(5) "ENV_2"
|
|
|
|
Check that arguments are correctly passed through:
|
|
array (
|
|
0 => 'Simple',
|
|
1 => 'White space tab
|
|
newline',
|
|
2 => '"Quoted"',
|
|
3 => 'Qu"ot"ed',
|
|
4 => '\\Back\\slash\\',
|
|
5 => '\\\\Back\\\\slash\\\\',
|
|
6 => '\\"Qu\\"ot\\"ed\\"',
|
|
)
|