lbarnaud Tue Nov 4 21:04:28 2008 UTC
Added files:
/php-src/sapi/cli/tests 022.phpt 022.inc
Modified files:
/php-src/ext/standard php_fopen_wrapper.c
Log:
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.63&r2=1.64&diff_format=u
Index: php-src/ext/standard/php_fopen_wrapper.c
diff -u php-src/ext/standard/php_fopen_wrapper.c:1.63
php-src/ext/standard/php_fopen_wrapper.c:1.64
--- php-src/ext/standard/php_fopen_wrapper.c:1.63 Sat Aug 2 06:37:34 2008
+++ php-src/ext/standard/php_fopen_wrapper.c Tue Nov 4 21:04:28 2008
@@ -17,7 +17,7 @@
| Hartmut Holzgraefe <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_fopen_wrapper.c,v 1.63 2008/08/02 06:37:34 lbarnaud Exp $ */
+/* $Id: php_fopen_wrapper.c,v 1.64 2008/11/04 21:04:28 lbarnaud Exp $ */
#include <stdio.h>
#include <stdlib.h>
@@ -302,9 +302,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