【问题标题】:How to detect whether file uploaded by FTP如何检测文件是否通过FTP上传
【发布时间】:2014-11-29 07:13:21
【问题描述】:

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

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

有没有办法在文件到达后立即检测和建议?

【问题讨论】:

  • 减少 cron 的间隔。如果 cron 中的任务很重,请创建其他 cron。我想不出别的了:)
  • 你能提供更多信息吗?文件是如何通过服务器上传的?他使用的是 ftp 还是 ..?
  • 尝试运行一个bash脚本来运行一个检查它的脚本,你可以在后台运行它,重定向输入输出:./checker.sh /null >/dev/null 2> & , 并在 checker.sh 循环和 sleep ,并检查 fiekl 是否存在

标签: php file-upload ftp detect


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    创建一个文件 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
    

    【讨论】:

    • 这是我在 php.ini 中寻求的解决方案。 cron 作业每小时运行一次,并在“for”循环中休眠 60 秒。
    【解决方案3】:

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

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

    【讨论】:

    • 我在尝试安装 inotify 时得到了“make install permission denied”。我在一个共享的 Unix 服务器上,这也许就是原因。
    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 2012-10-27
    • 2012-04-26
    • 2013-03-24
    相关资源
    最近更新 更多