Bug #69963 [Opn]: fgets reads EOF if there is nothing on the PIPE to read for a short period
Edit report at https://bugs.php.net/bug.php?id=69963&edit=1
ID: 69963
Updated by: cmb@php.net
Reported by: poonam dot chawla at mathworks dot com
Summary: fgets reads EOF if there is nothing on the PIPE to
read for a short period
Status: Open
Type: Bug
Package: Streams related
Operating System: Windows
PHP Version: 5.6.10
Block user comment: N
Private report: N
New Comment:
If that is a Windows only issue, it might be somehow related to
bug #69900.
Previous Comments:
------------------------------------------------------------------------
[2015-06-29 20:21:01] poonam dot chawla at mathworks dot com
Description:
------------
I am using PHP to read from STDIN and write to a log file. The PHP process is spawned by another
process (for the example sake, I am attaching a python script that spawns a new PHP process).
I observed that if there is nothing to read on the STDIN for a short period of time, PHP behaves
unexpectedly (reads EOF and exits).It was interesting to find out that PHP 5.4 exhibhits the correct
behavior, however both PHP 5.5 and 5.6 behave unexpectedly.
Test script:
---------------
PHP:
<?php
$in = fopen("php://stdin", "rb");
$out = fopen('C:/Users/pchawla/php_test/log_file.txt', 'w');
while ( ! feof($in) ) {
$line = fgets($in);
fwrite($out, $line);
}
?>
import subprocess
import sys
Python:
import subprocess
import sys
def log():
proc = subprocess.Popen(['php',
'C:/Users/pchawla/php_test/log_handler.php'], stdin=subprocess.PIPE)
while True:
line = sys.stdin.readline();
proc.stdin.write(line)
if __name__ == "__main__":
log()
Expected result:
----------------
fgets() should return FALSE only when there is an error or it reads EOF from the PIPE.
Actual result:
--------------
fgets() returns FALSE when there is nothing to read from the PIPE for a short period of time (~20
seconds).
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=69963&edit=1
Thread (9 messages)