观察 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 中的新文件的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress“插入-php”:文件中的php代码未执行
执行vbscript(?)代码:自动打开目录中的新文件[关闭]