1--TEST-- 2stream_get_line() on non-blocking stream 3--SKIPIF-- 4<?php 5$sockets = @stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0); 6if (!$sockets) die("skip stream_socket_pair() should work"); 7fclose($sockets[0]); 8fclose($sockets[1]); 9?> 10--FILE-- 11<?php 12/** 13 * Tests that stream_get_line() behaves as documented on non-blocking streams: 14 * Never return incomplete lines, except on documented conditions: 15 * length bytes have been read, the string specified by ending is found, EOF. 16 */ 17 18$sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0); 19var_dump($sockets); 20 21stream_set_blocking($sockets[1], 0); 22 23$eol = b'<EOL>'; 24 25fwrite($sockets[0], b"line start"); 26var_dump(stream_get_line($sockets[1], 8192, $eol)); // Does not returns incomplete line (EOL not found) 27var_dump(stream_get_line($sockets[1], 8192, $eol)); 28fwrite($sockets[0], b", line end"); 29fwrite($sockets[0], b", $eol"); 30var_dump(stream_get_line($sockets[1], 8192, $eol)); // Returns full line (EOL found) 31var_dump(stream_get_line($sockets[1], 8192, $eol)); // Nothing to read 32var_dump(stream_get_line($sockets[1], 8192, $eol)); 33 34fwrite($sockets[0], b"incomplete line"); 35var_dump(stream_get_line($sockets[1], strlen(b"incomplete line"), $eol)); // EOL not found but $length has been read, return incomplete line 36 37fwrite($sockets[0], b"incomplete line"); 38var_dump(stream_get_line($sockets[1], 8192, $eol)); // Does not returns incomplete line (EOL not found) 39var_dump(fread($sockets[1], strlen(b"incomplete line"))); // Returns buffer readden by stream_get_line 40 41fwrite($sockets[0], b"end of file"); 42var_dump(stream_get_line($sockets[1], 8192, $eol)); // Does not returns incomplete line (EOL not found) 43 44fclose($sockets[0]); 45var_dump(stream_get_line($sockets[1], 8192, $eol)); // Returns incomplete line (End of file) 46 47fclose($sockets[1]); 48 49?> 50--EXPECTF-- 51array(2) { 52 [0]=> 53 resource(%d) of type (stream) 54 [1]=> 55 resource(%d) of type (stream) 56} 57bool(false) 58bool(false) 59string(22) "line start, line end, " 60bool(false) 61bool(false) 62string(15) "incomplete line" 63bool(false) 64string(15) "incomplete line" 65bool(false) 66string(11) "end of file" 67