我使用 inotifywait 来监视新文件的文件夹,并在检测到“close_write”时将文件的路径发送到 php 脚本以处理它。
该命令如下所示:
inotifywait -e close_write --format '%w%f' -m -r /path/do/dir | while read LINE; do php /home/scripts/watcher.php $LINE; done
当它在 ssh 中执行时,它可以完美运行。当我将它包装在 php 中的 exec() 或 system() 函数中时,为了将其作为带有主管的守护程序运行,它不会将第二个参数传递给通常包含绝对路径的 watcher.php 脚本触发 inotifywait 的文件。
exec() 甚至根本不触发脚本,而 passthru() 和 system() 实际上命中 watcher.php 但除了第一个之外没有任何参数,其中包含脚本本身的路径。
当执行包装脚本时,为了观察文件夹,它给出了 ionotifywait 的输出:
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
上传新文件时,没有任何反应。watcher.php 没有被触发。
当我使用 passthru() 或 system() 并上传文件时,它会点击 watcher.php,它在文件顶部执行此操作:print_r($argv);
passthru("inotifywait -e close_write --format '%w%f' -m -r /path/do/dir | while read LINE; do php /home/scripts/watcher.php $LINE; done");
这仅输出
Array (
[0] => /home/scripts/watcher.php
)
如果我在 cli 中手动运行 ionotifywait 命令,它会在上传新文件时打印预期的输出
Array
(
[0] => /home/scripts/watcher.php
[1] => /path/to/dir/hello.jpg
)