我有多台摄像机通过FTP将图像随机发送到预定的文件夹。
例如:
录音/ camera1 / images / - 用于第一台摄像机
录音/ camera2 / images / - 用于第二台摄像机
等
每个图像都以.jpg格式保存,然后关闭FTP连接。
每次添加新文件后我都需要调用PHP脚本。假设每当将新图像添加到/ recordings文件夹中时,我需要使用
调用php脚本newimage.php?location=recordings/camera1/images/picture002.jpg
等等。
服务器是运行ProFTPD的Linux机箱
我如何完成这项工作?
请注意:Cron作业不是一个选项,因为会有数千个文件而且我们没有使用数据库。所以我们无法确定是否有任何新文件。
答案 0 :(得分:4)
我建议你看一下ProFTPD mod_exec。 这是一个解释其目标的引文:
mod_exec模块可用于 执行外部程序或脚本 在过程中的各个方面 处理FTP命令。通过意识 设计,ProFTPD不会也不会 执行外部程序。这是一个 安全决定,因为它已经确定 不允许ProFTPD作为一个 危害系统的手段或 通过错误披露信息 外部程序或脚本。用于 这个模块允许这样的外部 要执行的程序,以及 打开服务器到提到的 妥协的可能性或 通过这些计划披露。
您还可以查看inotify,它可以监控系统文件活动。
答案 1 :(得分: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);
答案 2 :(得分:1)
我会制作一个每隔5或10分钟查找新文件的cronjob。然后使用wget
调用PHP脚本以查找找到的任何新图像。
更新:看来你需要以某种方式挂钩ProFTPD。也许mod_exec可以提供帮助。
答案 3 :(得分:1)
您应该可以使用inotify在Linux上执行此操作。有一个PECL模块,允许PHP接收inotify事件。文档为here。
答案 4 :(得分:1)
还有另一种方式。
mod_exec打开您的FTP服务器以解决安全问题。读取日志文件有时会导致服务器无法写入日志文件等。
尝试启用mod_mysql。然后启用日志记录到数据库表,这样您就可以扫描MySQL表中的更改。尝试使用MySQL和proFTPd http://www.iezzi.ch/archives/110
搜索日志记录答案 5 :(得分: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