Edit report at https://bugs.php.net/bug.php?id=36030&edit=1
ID: 36030
Comment by: an0nym at narod dot ru
Reported by: silencer at inbox dot ru
Summary: stream_set_timeout() does not work for php://stdin
Status: Open
Type: Feature/Change Request
Package: Streams related
Operating System: *
PHP Version: 5.3
Block user comment: N
Private report: N
New Comment:
Still isn't working on PHP 5.3.9.
[an0nym@localhost ~]$ php -v
PHP 5.3.9 (cli) (built: Jan 11 2012 17:59:59)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
[an0nym@localhost ~]$ cat test.php
<?php
var_dump(stream_set_timeout(STDIN, 5));
[an0nym@localhost ~]$ php test.php
bool(false)
[an0nym@localhost ~]$
Workaround.
[an0nym@localhost ~]$ cat input.php
<?php
for ($i = 0;; ++$i)
{
printf("%d\n", $i);
sleep($i);
}
[an0nym@localhost ~]$ cat output.php
<?php
stream_set_blocking(STDIN, 0);
$rss = array(STDIN);
$wss = $ess = null;
while (stream_select($rss, $wss, $ess, $argv[1]))
{
printf("%f\n", microtime(true));
echo stream_get_contents(STDIN);
}
printf("%f\n", microtime(true));
[an0nym@localhost ~]$ time php input.php | php output.php 5
1327087817.988219
0
1
1327087818.988345
2
1327087820.988437
3
1327087823.988534
4
1327087827.988655
5
1327087832.988771
6
1327087837.993888
real 0m21.023s
user 0m0.017s
sys 0m0.020s
[an0nym@localhost ~]$
Previous Comments:
------------------------------------------------------------------------
[2009-11-11 04:20:35] voidroid at gmail dot com
Still does not work with PHP 5.3.0
Using the following as an alternative:
$current_choice = trim(`bash -c "read -s -t 1 -n 1 ANS; echo \\\$ANS"`);
It times out after 1 second but I would prefer less as I want a quicker refresh!
------------------------------------------------------------------------
[2009-06-30 16:20:59] silencer at inbox dot ru
Still don't working with
PHP 5.2.10-pl0-gentoo (cli)
------------------------------------------------------------------------
[2006-01-16 10:56:22] silencer at inbox dot ru
Description:
------------
stream_set_timeout can't be used for php://stdin (PHP executed as CGI, not
Apache module).
Bug #22837 describe same problem for PHP4 and promises "better support" in
PHP5, but still don't working.
Reproduce code:
---------------
<?php
$fp=fopen('php://stdin','r');
stream_set_timeout($fp,1) or die ('Failed');
echo 'Success';
?>
Expected result:
----------------
output "Success"
Actual result:
--------------
output "Failed"
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=36030&edit=1