通过FTP添加新文件时运行PHP脚本

我有多台摄像机通过FTP随机发送图像到预定的文件夹。

例如:
录制/相机1 /图像/ – 第一台相机
录制/相机2 /图像/ – 第二台相机
等等

每个人都以.jpg格式保存图像,然后closuresFTP连接。

每次添加新文件后,我都需要调用一个PHP脚本。 让我们说,每当一个新的图像被添加到/录音文件夹我需要调用PHP脚本

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

等等。

服务器是运行ProFTPD的Linux机器

我怎样才能做到这一点?

请注意:Cron作业不是一个选项,因为会有数千个文件,而且我们没有使用数据库。 所以我们不能确定是否有新的文件。

Solutions Collecting From Web of "通过FTP添加新文件时运行PHP脚本"

我建议你看看ProFTPD的mod_exec 。 这是一个引用来解释它的目标:

在处理FTP命令的过程中,mod_exec模块可用于在各个点执行外部程序或脚本。 通过有意识的设计,ProFTPD不会也不会执行外部程序。 这是一个安全决定,因为它决定不允许ProFTPD作为一种通过外部程序或脚本中的错误泄露系统或披露信息的手段。 使用这个模块允许执行这样的外部程序,并且还通过这些程序向服务器打开所提及的可能性的妥协或泄露。

你也可以看看inotify哪个提供你监视系统文件活动。

您应该在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); 

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

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

您应该可以使用inotify在Linux上执行此操作。 有一个允许PHP接收inotify事件的PECL模块。 文档在这里 。

还有一种方法。

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

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

如果你是在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