发送电子邮件的PHP脚本,列出目录/子目录中发生的文件更改
发布时间:2020-12-13 22:30:29 所属栏目:PHP教程 来源:网络整理
导读:我有一个目录,其中包含许多用户通过FTP添加文件的子目录.我正在尝试开发一个 PHP脚本(我将作为一个cron作业运行),它将检查目录及其子目录中的文件,文件大小或修改日期的任何更改.我搜索得很长很难,到目前为止只发现了一个有效的脚本,我试图修改它 – 原始位
我有一个目录,其中包含许多用户通过FTP添加文件的子目录.我正在尝试开发一个
PHP脚本(我将作为一个cron作业运行),它将检查目录及其子目录中的文件,文件大小或修改日期的任何更改.我搜索得很长很难,到目前为止只发现了一个有效的脚本,我试图修改它 – 原始位于
here – 但它似乎只发送第一封电子邮件通知显示目录中列出的内容.它还会创建目录和子目录内容的文本文件,但是当脚本第二次运行时,它似乎会崩溃,我收到一封没有内容的电子邮件.
那里的任何人都知道在PHP中这样做的简单方法吗?我发现的脚本非常复杂,我已经尝试了几个小时来调试它但没有成功. 提前致谢! 解决方法
干得好:
$log = '/path/to/your/log.js'; $path = '/path/to/your/dir/with/files/'; $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),RecursiveIteratorIterator::SELF_FIRST); $result = array(); foreach ($files as $file) { if (is_file($file = strval($file)) === true) { $result[$file] = sprintf('%u|%u',filesize($file),filemtime($file)); } } if (is_file($log) !== true) { file_put_contents($log,json_encode($result),LOCK_EX); } // are there any differences? if (count($diff = array_diff($result,json_decode(file_get_contents($log),true))) > 0) { // send email with mail(),SwiftMailer,PHPMailer,... $email = 'The following files have changed:' . "n" . implode("n",array_keys($diff)); // update the log file with the new file info file_put_contents($log,LOCK_EX); } 我假设您知道如何发送电子邮件.此外,请记住,$log文件应保留在您要监视的$path之外,当然,原因很明显. 在第二次阅读你的问题之后,我注意到你提到你要检查文件是否有变化,我只是在检查修改的大小和日期,如果你真的想检查文件内容是否不同我建议你使用文件的哈希值,所以这个: $result[$file] = sprintf('%u|%u',filemtime($file)); 变成这样: $result[$file] = sprintf('%u|%u|%s',filemtime($file),md5_file($file)); // or $result[$file] = sprintf('%u|%u|%s',sha1_file($file)); 但请记住,由于散列函数必须打开并读取1-5 MB CSV文件的所有内容,因此这将更加昂贵. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |