2009-05-30 101 views
4

我有多台摄像机通过FTP以随机间隔将图像发送到预定文件夹。当通过FTP添加新文件时运行PHP脚本

例如:
录音/摄像机1 /图像/ - 对于第一相机
录音/ camera2 /图像/ - .jpg格式为第二相机

它们中的每保存图像,然后关闭FTP连接。

我需要每次添加新文件的时间后调用PHP脚本。比方说,每当一个新的图像添加到/录音文件夹,我需要调用PHP脚本

newimage.php?location=recordings/camera1/images/picture002.jpg 

等。

服务器是一台Linux机器上运行的ProFTPD

如何,我可以完成这件事?

请注意:cron作业是不是一种选择,因为会有成千上万的文件,我们没有使用DB。所以我们无法确定是否有新文件。

+0

请注意:cron作业是不是就会有成千上万的文件,我们没有使用DB因此,我们不能找出是否有任何新文件的选项 – ToughPal 2009-05-30 19:51:34

回答

4

我建议你看一看的ProFTPD的mod_exec。 这里引用解释其目标:

的mod_exec模块可用于 在 处理FTP命令的过程中执行外部程序或者在不同的点脚本 。通过有意识的设计,ProFTPD不会并且不会 执行外部程序。这是一个 安全决定,因为决定 不允许ProFTPD充当 损害系统的方式或 通过 中的错误披露信息外部程序或脚本。使用 这个模块允许执行这样的外部 程序,并且 通过这些程序打开服务器到提及的可能性或 泄露的可能性。

您还可以看看inotify,它可以让您监视系统文件活动。

+0

`inotify`链接已损坏。是否有最新的替代方案? – 2014-06-09 22:37:53

1

我会做一个cronjob看起来为新文件,每5分钟或10分钟。然后调用PHP脚本wget找到任何新图像。

更新:看来你需要以某种方式挂钩到ProFTPD。也许mod_exec可以帮助。

+0

PL简单说明:Cron作业不是一个选项,因为会有数千个文件,而且我们没有使用数据库。因此,我们无法确定是否有任何新文件 – ToughPal 2009-05-30 19:51:49

+0

好的,在您编写crontab出来后,我又添加了一条建议。 – 2009-05-30 20:00:16

1

您应该能够使用的inotify做到这一点在Linux上。有一个允许PHP接收inotify事件的PECL模块。该文档是here

1

还有一种方法。

mod_exec打开你的FTP服务器的安全问题。读取日志文件有时会导致服务器无法写入日志文件等。

尝试启用mod_mysql。然后启用日志记录到数据库表,这样你就可以扫描你的MySQL表的变化。尝试搜索使用MySQL和ProFTPD的http://www.iezzi.ch/archives/110

2

你应该在PHP中使用fam_monitor_directory功能(如果它是使用--with-fam编译)记录。它完全符合你的需求,即在目录内容改变时执行PHP程序。

使用这样的事情在你的cronjob(不要紧多少文件有目录,循环去一次每个变化目录:

/* opens a connection to the FAM service daemon */ 
$fam_res = fam_open(); 

/* The second argument is the full pathname of the directory to monitor. */ 
$nres = fam_monitor_directory ($fam_res, '/home/www/example.com/cameras/'); 

while(fam_pending ($fam_res)) { 
    $arr = (fam_next_event($fam_res)) ; 
    if ($arr['code']) == FAMCreated) { 
     /* deal here with the new file, which name now is stored in $arr['filename'] */ 
    } 
} 

fam_close($fam_res); 
0

如果你是linux下 只是执行该代码

inotifywait -m /path/to/folder -e create -e moved_to | 
while read path action file; do 
    echo "The file '$file' appeared in directory '$path' via '$action'" 
    # do something with the file for example 
    php index.php upload '$path/$file' 
done