gpt4 book ai didi

发送电子邮件的 PHP 脚本,列出目录/子目录中发生的文件更改

转载 作者:可可西里 更新时间:2023-10-31 23:43:48 25 4
gpt4 key购买 nike

我有一个包含许多子目录的目录,用户可以通过 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, json_encode($result), LOCK_EX);
}

我假设您知道如何发送电子邮件。另外,请记住,$log 文件应该保存在您要监控的 $path 之外,当然,原因很明显。

第二次阅读您的问题后,我注意到您提到您想要检查文件 是否更改,我只是检查修改的大小和日期,如果你真的想检查文件内容是否不同,我建议你使用文件的哈希值,所以这样:

$result[$file] = sprintf('%u|%u', filesize($file), filemtime($file));

变成这样:

$result[$file] = sprintf('%u|%u|%s', filesize($file), filemtime($file), md5_file($file));
// or
$result[$file] = sprintf('%u|%u|%s', filesize($file), filemtime($file), sha1_file($file));

但请记住,这会更加昂贵,因为哈希函数必须打开并读取 1-5 MB CSV 文件的所有内容。

关于发送电子邮件的 PHP 脚本,列出目录/子目录中发生的文件更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5876435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com