<?php
$fh = fopen('/var/log/system', 'r');
while (true) {
$line = fgets($fh);
if ($line !== false) {
// show the line or send it via email or to a websocket..
} else {
// sleep for 0.1 seconds (or more?)
usleep(0.1 * 1000000);
fseek($fh, ftell($fh));
}
}
6条答案
按热度按时间qlzsbp2j1#
你需要用sleep循环:
(测试过了)
tuwxkamq2#
是的,你需要在循环中睡一段时间,但你不必重新打开文件。我只是在寻找类似的问题。我想读取一个自上次读取以来可能已更改的文件。
问题是资源已到达文件结尾(
EOF
)。并没有继续阅读。解决方案是使用fseek($fh, ftell($fh))
重置指针。一个等待文本文件中输入的完整程序可能看起来像这样:
j8ag8udp3#
举例来说:
nbewdwxp4#
你可以在不使用文件句柄时关闭它(一旦一部分数据被写入)。或者你可以使用一个缓冲区来存储数据,只有当它满了的时候才把它放到文件中。这样你就不会一直打开文件。
如果你想在文件被写入时就得到所有的东西,你可能需要扩展代码,写入数据,这样它也会输出到其他地方(屏幕,一些变量,其他文件.)
ldxq2e6h5#
68bkxrlz6#
只是一个想法。
你有没有想过使用 *nix tail命令?从php中执行命令(带有一个参数,将返回一定数量的行),并在php脚本中处理结果。