2012-09-06 107 views
1

对于我的项目,我必须从我的(php)网站与远程设备进行通信。我需要实现的命令之一发送连续的数据流,直到它从用户接收到更多输入。php - file_get_contents/fread连续输入流

所以我的问题是这会是一个问题,如果我使用file_get_contents()?或者我应该使用fread()?我的输入是字符串形式,fread()说我应该使用file_get_contents(),但是如果我使用file_get_contents()我需要把它放在一个循环中,然后在数据包之间发送数据到我的设备停止发送数据?每次我打电话给file_get_contents()时,循环会关闭我的连接并打开一个新循环?

我每天可以使用的数据量也受到限制,如果我使用file_get_contents(),并且它限制了8KB的块大小,即我当天数据的8%。

回答

3

使用fsockopen,fread等... file_get_contents的目的是文件读取,而不是发送/接收数据的方式,你想要的。

0

我会用fopen和使用stream_context_create

$options = array(
    'http' => array(
     'method' => 'GET', 
    ), 
); 
$context = stream_create_context($options); 
$fh = fopen($your_url, 'r', false, $context); 

这将让你消耗的流作为文件。让你访问任何你想用它做的事情......就像用fgets或其他任何东西逐行解析它。

+0

无论如何,我必须使用'stream_create_context()'来处理file_get_contents。为了澄清fopen的流是否坐在后台(可能是在它自己的线程中?)在一些缓冲区中收集数据,直到我将数据从中抽出? – Harageth

+0

至于线程,我不确定。您可以查看源代码并查看。 https://github.com/php/php-src。数据收集在一个缓冲区中,等待你阅读。我从来没有检查过是否让缓冲区中的内容累积影响了我的脚本使用的内存,这主要是因为我必须得到一些有力的保证,以便我可以比数据流更快地处理数据。 – KyleWpppd