from 和ジオ

失われたソースファイル 5

コピーアンドペースト用の記事

失われたソースファイル 5

ありがちなんだけど良くなくしてしまうスクリプトファイルなどを おいておく場所です。

Webサイト更新をメール通知する PHP スクリプト

サイトの更新をメールで知らせてくれる PHP スクリプトです。 とりあえず、なにかしらの文字列が「なくなったら」更新、という ことにしています。

この PHP は Webサイト用ではなく、コマンドライン起動用に なっています。

<?php

// チェック先 URL
$check_url = "http://www.ほげ.com/";
// 更新で削除されそうな文字列正規表現
$check_str = "2005/1/14 17:15 更新";
// チェック先 HTML の文字コード
$check_charset = "SJIS";
// このシステムが動く文字コード (Fedora なので UTF-8)
$system_charset = "UTF-8";
// 更新通知先メールアドレス
$mail_address = "hoge@もげ.com";

// システム文字コードを PHPに設定
mb_language("ja");
mb_internal_encoding($system_charset);

// HTTP で対象サイト HTML 取得
if(!$fno = fopen($check_url, 'r')) {
    die("$check_url を開くことができませんでした");
}

// HTML から更新チェック用文字列を探す
$find = false;
while($line = fgets($fno)) {

    // 取得 HTML の文字コードをシステムに一致させる
    $line = mb_convert_encoding($line, $system_charset, $check_charset);

    if(ereg($check_str, $line)) {
        $find = true;
        break;
    }

}
fclose($fno);

// 文字列が発見できなかったら更新と見なしてメール送信
if($find == false) {

    // 一度送ったらもう送らない
    if(!file_exists("sended.txt")) {

        mb_send_mail($mail_address, "更新通知", "$check_url が更新されたよ。" );

        // メール送ったら送信時間を書いたファイルを作成しておく
        $fco = fopen("sended.txt","w");
        $today = date("Y/m/d l H:i:s");
        fputs($fco, $today . "¥n");
        fclose($fco);

    }

}

?>

一度更新にかかりメールを送った場合は「sended.txt」をつくり以後の 送信を抑止します。それを解除するときはファイルを消してください。 エラーチェックは適当に入れてください。 (あと、send"ed" はわざとですので念のため。。)

でもって、一定間隔で更新を確認したい場合は、UNIX で動作させて cron に登録するといいでしょう。(Windows でも「タスク」だか つかえばできるかもしれません)

crontab -e

して、下記のように登録します。 あまり過激な設定は相手のサーバに負荷がかかりますので しないこと。 スクリプトは、antenna.php というファイル名にしています。

*/30 * * * * php -f ‾/hoge/antenna.php > /dev/null 2>&1

登録確認は下記のコマンドです。

$ crontab -l

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.4422 installed on Tue Jan 18 14:45:59 2005)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
*/15 * * * * php -f ‾/hoge/antenna.php > /dev/null 2>&1

ログは下記です。

/var/log/cron

おわり

サーバサイドで動く適当なものが見つからなかったので 作ったものです。アレンジして使ってください。