Php 如何检测文件是否通过FTP上传

Php 如何检测文件是否通过FTP上传,php,file-upload,ftp,detect,Php,File Upload,Ftp,Detect,我有一个客户端,它使用我无法控制的第三方脚本将XML文件上载到我服务器上的目录。上传后,文件由php脚本处理 我有一个cronjob,它每小时检查一次dir,看看是否上传了一个文件,但是如果上传发生在,比如说,下午3:01,它将在下午4:00之前不会被处理。我的主机禁止运行cronjob的频率超过每小时一次 是否有一种方法可以在文件到达时立即检测并提供建议?简单的回答是“是”,可以检测文件上载并立即执行操作。然而,这不是我所说的“简单”解决方案。您可能希望设置某种类型的守护进程,以便能够(或使用

我有一个客户端,它使用我无法控制的第三方脚本将XML文件上载到我服务器上的目录。上传后,文件由php脚本处理

我有一个cronjob,它每小时检查一次dir,看看是否上传了一个文件,但是如果上传发生在,比如说,下午3:01,它将在下午4:00之前不会被处理。我的主机禁止运行cronjob的频率超过每小时一次


是否有一种方法可以在文件到达时立即检测并提供建议?

简单的回答是“是”,可以检测文件上载并立即执行操作。然而,这不是我所说的“简单”解决方案。您可能希望设置某种类型的守护进程,以便能够(或使用完全不同的语言来监视文件)


简单的解决方案是降低cron间隔,然后只添加某种反堆叠机制(如锁定文件),以确保脚本在已经运行时不会执行。

简短的回答是肯定的,可以检测到文件上载并立即执行操作。然而,这不是我所说的“简单”解决方案。您可能希望设置某种类型的守护进程,以便能够(或使用完全不同的语言来监视文件)


简单的解决方案是降低cron间隔,然后添加某种反堆叠机制(如锁定文件),以确保脚本在已经运行时不会执行。

制作一个文件checker.sh,并在后台运行。/checker.sh/dev/null 2>&1&,或者在屏幕上运行它

#!/bin/bash

COUNTER=0
while [  $COUNTER -lt 99999 ]; do

if [ -f "/path/to/your/file" ]; then
    #do action here ,run a  script a program etc #the file is there
fi

sleep 5
let COUNTER=COUNTER+1 

done

制作一个文件checker.sh,并在后台运行它。/checker.sh/dev/null 2>&1&,或者在屏幕上运行它

#!/bin/bash

COUNTER=0
while [  $COUNTER -lt 99999 ]; do

if [ -f "/path/to/your/file" ]; then
    #do action here ,run a  script a program etc #the file is there
fi

sleep 5
let COUNTER=COUNTER+1 

done

如果您正在运行Linux,可以查看inotifywait命令,它是inotify工具包的一部分。这可以设置为等待在特定目录中创建文件,如下所示:

#!/bin/bash
while true
do
inotifywait -e create /home/myuser/upload_dir/ && php /home/myuser/scripts/process_file.php
done

如果您正在运行Linux,可以查看inotifywait命令,它是inotify工具包的一部分。这可以设置为等待在特定目录中创建文件,如下所示:

#!/bin/bash
while true
do
inotifywait -e create /home/myuser/upload_dir/ && php /home/myuser/scripts/process_file.php
done

减少cron的间隔。如果cron中的任务很繁重,请创建其他cron。我想不出其他任何东西:)你能提供更多信息吗?文件是如何通过服务器上传的?他是使用ftp还是…?尝试运行一个运行脚本的bash脚本来检查它,你可以在后台运行它重定向输入输出:./checker.sh/dev/null 2>&,在checker.sh循环和睡眠中,并检查fiekl是否存在减少cron的间隔。如果cron中的任务很繁重,请创建其他cron。我想不出其他任何东西:)你能提供更多信息吗?文件是如何通过服务器上传的?他是使用ftp还是…?尝试运行一个运行脚本的bash脚本来检查它,你可以在后台运行它重定向输入输出:./checker.sh/dev/null 2>&,在checker.sh循环和睡眠中,检查fiekl是否存在这是我使用的解决方案,但使用php。cron作业每小时运行一次,并在“for”循环中休眠60秒。这是我使用的解决方案,但使用php。cron作业每小时运行一次,并在“for”循环中休眠60秒。在尝试安装inotify时,我得到了“make install permission denied”。我在共享Unix服务器上,这可能就是原因。在尝试安装inotify时,我得到了“make install permission denied”。我在一个共享的Unix服务器上,这可能就是原因。