0

问候,

我正在使用 iwatch 观看后缀目录。

iwatch /home/vmail/eamorr/photos/new/

发送新电子邮件时,iwatch 会输出一行,例如:

[11/Feb/2011 12:23:43] IN_CREATE /home/vmail/eamorr/photos/new//1297427022.Vca01I1e396M000383.eamorr

如何将其重定向到 PHP 程序进行处理?

这是我尝试过的:

iwatch /home/vmail/eamorr/photos/new/ | php /home/hynese/sites/eamorr/emailPhotoHandler/handlePhotos.php

这是 handlePhotos.php 文件:

<?php
$data = file_get_contents("php://stdin");

$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = $data;
fwrite($fh, $stringData);
fclose($fh);

?>

它应该创建一个文件“testFile.txt”并将“[11/Feb/2011 12:23:43] IN_CREATE /home/vmail/eamorr/photos/new//1297427022.Vca01I1e396M000383.eamorr”放入其中......但是我得到的只是一无所有-甚至没有创建文件...

我认为这与 PHP 中的管道和标准输入有关。

有人有什么想法吗?

提前谢谢了,

4

1 回答 1

1

在读取整个文件/流之前,file_get_contents() 不会返回。在这种情况下,永远不会。假设 iwatch 继续运行,iwatch 将保持 PHP 的 STDIN 打开,因此 file_get_contents() 永远不会结束。

请改用stream_get_line()fgets()。这将为您逐行提供 iwatch 输出。

编辑:另外,命令应该是php -f <script>,而不是php <script>

于 2011-02-11T12:52:57.783 回答