mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Open STDIN and php://stdin streams with the relevant
wrapper when the file descriptor is a socket (inetd, etc) Fixes bug #43731
This commit is contained in:
parent
43400aaf87
commit
9b0d76d585
3 changed files with 76 additions and 1 deletions
|
@ -291,9 +291,23 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, ch
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#if defined(S_IFSOCK) && !defined(WIN32) && !defined(__BEOS__)
|
||||
do {
|
||||
struct stat st;
|
||||
memset(&st, 0, sizeof(st));
|
||||
if (fstat(fd, &st) == 0 && (st.st_mode & S_IFMT) == S_IFSOCK) {
|
||||
stream = php_stream_sock_open_from_socket(fd, NULL);
|
||||
if (stream) {
|
||||
stream->ops = &php_stream_socket_ops;
|
||||
return stream;
|
||||
}
|
||||
}
|
||||
} while (0);
|
||||
#endif
|
||||
|
||||
if (file) {
|
||||
stream = php_stream_fopen_from_file(file, mode);
|
||||
} else {
|
||||
} else {
|
||||
stream = php_stream_fopen_from_fd(fd, mode, NULL);
|
||||
if (stream == NULL) {
|
||||
close(fd);
|
||||
|
|
14
sapi/cli/tests/022.inc
Normal file
14
sapi/cli/tests/022.inc
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
ob_start();
|
||||
var_dump(STDIN);
|
||||
|
||||
$fd = fopen("php://stdin","r");
|
||||
var_dump($fd);
|
||||
|
||||
$client_socket = stream_socket_accept($fd);
|
||||
|
||||
$data = ob_get_clean();
|
||||
fwrite($client_socket, $data);
|
||||
|
||||
?>
|
47
sapi/cli/tests/022.phpt
Normal file
47
sapi/cli/tests/022.phpt
Normal file
|
@ -0,0 +1,47 @@
|
|||
--TEST--
|
||||
STDIN/OUT/ERR stream type
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!getenv("TEST_PHP_EXECUTABLE")) die("skip TEST_PHP_EXECUTABLE not set");
|
||||
if (substr(PHP_OS, 0, 3) == "WIN") die("skip non windows test");
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$php = getenv("TEST_PHP_EXECUTABLE");
|
||||
$socket_file = dirname(__FILE__) . '/' . pathinfo(__FILE__, PATHINFO_FILENAME) . '.sock';
|
||||
$test_file = dirname(__FILE__) . '/' . pathinfo(__FILE__, PATHINFO_FILENAME) . '.inc';
|
||||
if (file_exists($socket_file)) {
|
||||
unlink($socket_file);
|
||||
}
|
||||
$socket = stream_socket_server('unix://' . $socket_file);
|
||||
var_dump($socket);
|
||||
if (!$socket) {
|
||||
exit(1);
|
||||
}
|
||||
$desc = array(
|
||||
0 => $socket,
|
||||
1 => STDOUT,
|
||||
2 => STDERR,
|
||||
);
|
||||
$pipes = array();
|
||||
$proc = proc_open("$php -n " . escapeshellarg($test_file), $desc, $pipes);
|
||||
var_dump($proc);
|
||||
if (!$proc) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$client_socket = stream_socket_client('unix://' . $socket_file);
|
||||
var_dump($client_socket);
|
||||
echo stream_get_contents($client_socket);
|
||||
fclose($client_socket);
|
||||
|
||||
proc_terminate($proc);
|
||||
proc_close($proc);
|
||||
unlink($socket_file);
|
||||
?>
|
||||
--EXPECTF--
|
||||
resource(%d) of type (stream)
|
||||
resource(%d) of type (process)
|
||||
resource(%d) of type (stream)
|
||||
resource(%d) of type (stream)
|
||||
resource(%d) of type (stream)
|
Loading…
Add table
Add a link
Reference in a new issue