观察 root 并检查 PHP 中的新文件

Posted

技术标签:

【中文标题】观察 root 并检查 PHP 中的新文件【英文标题】:Watch root and check for new files in PHP 【发布时间】:2017-07-24 06:49:14 【问题描述】:

我想从 FTP 的根目录查看文件夹。自动会在root上传一些文件。我需要知道这个新文件何时上传,我需要做的是获取文件的名称并将名称添加到创建文件的数据库中。

我看到人们推荐使用 inotify (Linux)。但我不明白代码是用 bash 编写还是用简单的 php 文件编写。如果有人可以帮我举个例子和完整的解释

这是网上找的一个例子

#!/usr/local/bin/php
<?php
// directory to watch
$dirWatch = 'watch_dir';    
// Open an inotify instance
$inoInst = inotify_init();    
// this is needed so inotify_read while operate in non blocking mode
stream_set_blocking($inoInst, 0);    
// watch if a file is created or deleted in our directory to watch
$watch_id = inotify_add_watch($inoInst, $dirWatch, IN_CREATE | IN_DELETE);    
// not the best way but sufficient for this example :-)
while(true)    
  // read events (
  // which is non blocking because of our use of stream_set_blocking
  $events = inotify_read($inoInst);    
  // output data
  print_r($events);

// stop watching our directory
inotify_rm_watch($inoInst, $watch_id);    
// close our inotify instance
fclose($inoInst);
?>

【问题讨论】:

“我不明白代码是用 bash 还是简单的 php 文件编写”——你找到了一个例子。它以#!/usr/local/bin/php 开头。这不是放弃游戏吗? “如果有人能帮我举个例子和完整的解释”——你已经在问题中包含了这两个。什么,具体你不明白吗?你查过PHP手册中不明白的函数吗? @Quentin 我是一名大三学生......并且是 linux 和类似的东西的一个非常朋友。我不知道如何集成..看下面的评论..另一种方式,Guest提供另一种解决方案 【参考方案1】:

使用数组的快速而肮脏的循环可以做到这一点。这是一个 bash 示例;

#!/bin/bash
dir="/path/to/files/"
delay=60 #seconds to sleep between checks
#Get list of files already existing at startup:
for i in $dir*; do
    i="$i##*/" #Isolates the file name from the path
    knownlist+=("$i")
done

while true; do
    sleep $delay
    for i in $dir*; do
        match=0
        i="$i##*/"
        for ((ii=0;ii<$#knownlist[*];ii++)); do
            if [[ $i == $ii ]]; then match=1; break; fi
            #Basically, for every file in $dir, we check against all files
            #listed in the $knownfiles array, to see if any match.
        done
        if [[ match == 0 ]]; then
            #No match was found, so this is a new file.
            #Place your database commands here; $i holds the file's name

            knownlist+=("$i") #File is now known, so we add it to the list
        fi
    done
done

【讨论】:

以上是关于观察 root 并检查 PHP 中的新文件的主要内容,如果未能解决你的问题,请参考以下文章

已经存在数据查询并绕过php mysql中的新条目

Wordpress“插入-php”:文件中的php代码未执行

PHP和HTML如何加载新文件

执行vbscript(?)代码:自动打开目录中的新文件[关闭]

python 持久的监督观察员。当看门狗重新启动时,检查自上次启动以来是否有新/修改/删除/等文件或目录,并发送

检查文件 mime 类型是不是与 php 中的扩展名匹配