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

Reply via email to