PHP - 远程文件更改时的电子邮件通知

时间:2012-02-29 08:04:29

标签: php file email notifications

我想知道是否有办法在我的网络服务器上发送一个php脚本,每当来自另一个Web服务器的文件发生变化时,都会给我发送电子邮件。

例如,此文件经常更改:http://media1.clubpenguin.com/play/en/web_service/game_configs/paper_items.json

关于游戏的博客,该文件对于在竞争对手之前创建更新帖子非常重要。我经常忘记检查它。

有没有办法让脚本在文件更新时通过电子邮件发送给我,或检查该文件是否已更新,如果有文件,请给我发电子邮件?

3 个答案:

答案 0 :(得分:3)

使用crontab将检查脚本设置为每分钟运行一次并将此文件与本地存储的版本进行比较(或者使用md5校验和 - 如果文件更改,它将有所不同。)

file_get_contents('http://url-to-file', 'checkfile.tmp');
if (md5(file_get_contents('lastfile.tmp')) != md5(file_get_contents('checkfile.tmp')))
{
    //copy checkfile to lastfile
    unlink('lastfile.tmp');
    copy('checkfile.tmp', 'lastfile.tmp'); 
    //send email or do something you want ;)
}

答案 1 :(得分:1)

您需要将这两个文件放在同一个文件夹中。

  • old.json
  • scriptForCron.php

scriptForCron.php 中写:

$url='http://media1.clubpenguin.com/play/en/web_service/game_configs/paper_items.json';
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$execute = curl_exec($ch);

$fp=fopen('old.json','w+');
$oldjson=fread($fp,filesize('old.json'));

if($execute!=$oldjson){
 mail('your@mail.com','Yoohoo', 'File changed');
 fputs($fp,$execute);
}
fclose($fp);

然后将 scriptForCron.php 添加到cron作业。 您可以要求托管支持。

答案 2 :(得分:0)

此代码不会实时检查更新 - 这几乎是不可能的 - 但每1小时一分钟。

首先,在系统中保存一个与此内容相同的文件。以任何方式命名,例如paper_items.json。

现在创建一个名为checkitems.php的文件。阅读经常更改的文件,比较它的内容是否等于paper_items.json。如果相等,无所事事,如果没有,将在线文件保存到您当地的paper_items.json并使用PHP的mail()给您发送电子邮件,例如“有变化”。

最后,设置一个cron作业,每隔n(例如1)小时或1分钟运行一次,等等。