You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

触发inotify事件时如何运行PHP代码 监听文件修改实现页面自动重载

实现方案

首先说明:你当前的写法存在两个核心问题:一是inotify_read是阻塞函数,页面配置的2秒自动刷新完全无法和inotify逻辑配合;二是Web请求下的PHP脚本默认有最大执行时长限制,无法长期运行监听逻辑。下面给两种适配不同场景的可行方案:

1. CLI 常驻监听方案(推荐,适合重载框架的服务端逻辑)

服务端的文件监听逻辑建议写CLI脚本长期运行,不受Web请求的时长限制,稳定性更高。

<?php
// 脚本执行方式:命令行运行 php watch_log.php
$inf = inotify_init();
// 绑定log.txt的修改事件监听
$watch = inotify_add_watch($inf, './log.txt', IN_MODIFY);

// 死循环实现常驻监听
while (true) {
    // 阻塞等待事件触发
    $events = inotify_read($inf);
    if (!empty($events)) {
        foreach ($events as $event) {
            // 匹配修改事件
            if ($event['mask'] & IN_MODIFY) {
                // 此处编写你需要触发的自定义代码,比如框架重载逻辑
                echo "log.txt 已更新,执行重载逻辑\n";
                // 示例:读取最新日志内容
                $logContent = file_get_contents('./log.txt');
                echo "最新日志:\n".$logContent."\n";
            }
        }
    }
}

// 以下是清理逻辑,常驻脚本默认不会执行到此处,停止脚本按Ctrl+C即可
inotify_rm_watch($inf, $watch);
fclose($inf);
?>

注意事项:

  • 执行前先确认PHP已安装inotify扩展,可通过php -m | grep inotify命令检查
  • 后台挂起脚本可使用命令:nohup php watch_log.php &

2. Web端实时展示方案(适合前端展示日志场景)

如果你需要在浏览器实时展示日志内容,也可以调整原有Web代码,但仅推荐本地调试使用,生产环境会大量占用PHP-FPM进程,稳定性不足。

<html style='background-color:#202020;'>
<head>
    <meta charset="UTF-8">
    <style>body {color: #FFFFFF;}</style>
</head>
<body id="chat">
<?php
// 首次加载输出初始日志
$log = file_get_contents('./log.txt');
echo nl2br(htmlspecialchars($log))."<hr>";

$inf = inotify_init();
$watch = inotify_add_watch($inf, './log.txt', IN_MODIFY);
// 解除脚本执行时长限制
set_time_limit(0);
// 关闭输出缓冲,实时推送内容到浏览器
ob_implicit_flush(true);
ob_end_flush();

while (true) {
    $events = inotify_read($inf);
    if (!empty($events)) {
        foreach ($events as $event) {
            if ($event['mask'] & IN_MODIFY) {
                echo "检测到日志更新:<br>";
                $newLog = file_get_contents('./log.txt');
                echo nl2br(htmlspecialchars($newLog))."<hr>";
            }
        }
    }
}

inotify_rm_watch($inf, $watch);
fclose($inf);
?>
</body>
</html>

内容的提问来源于stack exchange,提问作者Adi B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:12:03