Php 将文件保留为套接字,并等待从另一个进程写入的结束

Php 将文件保留为套接字,并等待从另一个进程写入的结束,php,file-io,Php,File Io,假设我们有一个程序X,它连续地写一个文件,例如/tmp/test.file 我有一个PHP脚本,它将这个文件提供给客户端,以便客户端可以下载/读取它 当数据写入/tmp/test.file时,我如何能够连续地执行此操作 如果我使用下面的代码 <?php $fp = fopen("/tmp/test.file","r"); while(!feof($fp)) { echo fread($fp,4096); } fclose($fp); 它立即停止,因为它读取整个文件直到EOF,所以它不

假设我们有一个程序X,它连续地写一个文件,例如/tmp/test.file

我有一个PHP脚本,它将这个文件提供给客户端,以便客户端可以下载/读取它

当数据写入/tmp/test.file时,我如何能够连续地执行此操作

如果我使用下面的代码

<?php

$fp = fopen("/tmp/test.file","r");
while(!feof($fp))
{
 echo fread($fp,4096);
}
fclose($fp);
它立即停止,因为它读取整个文件直到EOF,所以它不关心是否有另一个进程正在写入此文件


谢谢你的建议,对PHP脚本文件使用一个连续的Ajax调用,例如间隔5秒,并通过偏移量获取文件内容。您可以将文件的当前偏移量存储到会话或COOKIE中

您可以使用PHP函数获取文件偏移量

正如PHP的官方文件定义的ftell:

ftell-返回文件读/写指针的当前位置

此外,该函数可能很有用,因为PHP的官方文档对其进行了定义:

stream_get_contents-将流的其余部分读入字符串


然后,在每个间隔中,将响应数据附加到HTML标记。

即使您在文件块上迭代,这仍然是一个同步文件读取。为什么需要写入文件?尝试写入流,并将流本身与流的内容一起发送到浏览器。但是,请记住,PHP的生命周期——所有事情都发生在一个请求上——可能意味着它不是执行某些特定任务的最佳工具,例如流式广播。