lbarnaud Tue Nov 4 21:05:55 2008 UTC Added files: (Branch: PHP_5_2) /php-src/sapi/cli/tests 022.phpt 022.inc
Modified files: /php-src/ext/standard php_fopen_wrapper.c Log: MFH: Open STDIN and php://stdin streams with the relevant wrapper when the file descriptor is a socket (inetd, etc) Fixes bug #43731 http://cvs.php.net/viewvc.cgi/php-src/ext/standard/php_fopen_wrapper.c?r1=1.45.2.4.2.9&r2=1.45.2.4.2.10&diff_format=u Index: php-src/ext/standard/php_fopen_wrapper.c diff -u php-src/ext/standard/php_fopen_wrapper.c:1.45.2.4.2.9 php-src/ext/standard/php_fopen_wrapper.c:1.45.2.4.2.10 --- php-src/ext/standard/php_fopen_wrapper.c:1.45.2.4.2.9 Mon Dec 31 07:20:13 2007 +++ php-src/ext/standard/php_fopen_wrapper.c Tue Nov 4 21:05:55 2008 @@ -17,7 +17,7 @@ | Hartmut Holzgraefe <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_fopen_wrapper.c,v 1.45.2.4.2.9 2007/12/31 07:20:13 sebastian Exp $ */ +/* $Id: php_fopen_wrapper.c,v 1.45.2.4.2.10 2008/11/04 21:05:55 lbarnaud Exp $ */ #include <stdio.h> #include <stdlib.h> @@ -290,9 +290,23 @@ 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); http://cvs.php.net/viewvc.cgi/php-src/sapi/cli/tests/022.phpt?view=markup&rev=1.1 Index: php-src/sapi/cli/tests/022.phpt +++ php-src/sapi/cli/tests/022.phpt --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) http://cvs.php.net/viewvc.cgi/php-src/sapi/cli/tests/022.inc?view=markup&rev=1.1 Index: php-src/sapi/cli/tests/022.inc +++ php-src/sapi/cli/tests/022.inc <?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); ?> -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php