私はメーリングリストを持っており、定期的に情報を送信しています。このメーリング リストは大きくなりすぎて、あまりにも多くの接続が開かれ、サーバーにアクセスできないため、コマーシャル タイムに送信するには大きすぎます。そこで、夜間 (午前 4 時) に送信予定のニュースレターがあるかどうかを確認し、ある場合は送信する PHP ファイルを呼び出す bash スクリプトを作成しました。
バッシュスクリプト
#!/bin/sh
senddate=$(date +"%Y-%m-%d")
url=https://www.my.url/check_to_send_maillist.php?date=$senddate\&autosend=1
wget -O /my/log/dest.log --http-user=myuser --http-password=mypass $url
PHP スクリプト
$date=$_GET["date"];
if($date<>""){
$sql="select newsletters_id from " . TABLE_NEWSLETTERS . " where send_date='" . $fecha . "'";
$nid=executequery($sql);
if($nid<>""){
$url="https://www.my.url/send_newsletter.php?page=1&nID=%s&action=confirm_send&autosend=1";
$url=sprintf($url,$nid["newsletters_id"]);
header('location:' .$url);
}
}
テストは問題なく、すべてうまくいきました。実際のメーリング リストで使用すると、PHP スクリプトがニュースレターを送信する URL を 3 回呼び出したため、顧客はニュースレターを 3 回受信しました。私のメーリング リストには約 40,000 のアドレスがあります (外部サービスを使用する必要があることはわかっています)
Apache ログ
-BASH SCRIPT
server_ip - http_user [14/Dec/2012:04:00:02 +0100] "GET /check_to_send_maillist.php?date=2012-12-14&autosend=1 HTTP/1.0" 302 - "-" "Wget/1.10.2"
-PHP SCRIPT
server_IP - http_user [14/Dec/2012:04:04:59 +0100] "GET /my_send_script.php?page=1&nID=nid&action=confirm_send&autosend=1 HTTP/1.0" 200 21454 "-" "Wget/1.10.2"
server_IP - http_user [14/Dec/2012:04:20:01 +0100] "GET /my_send_script.php?page=1&nID=nid&action=confirm_send&autosend=1 HTTP/1.0" 200 21454 "-" "Wget/1.10.2"
server_IP - http_user [14/Dec/2012:06:05:38 +0100] "GET /my_send_script.php?page=1&nID=nid&action=confirm_send&autosend=1 HTTP/1.0" 200 268 "-" "Wget/1.10.2"
ヘッダーの場所がスクリプトを複数回呼び出すのはなぜですか? 強制的に 1 回だけ電話をかけるにはどうすればよいですか? 別の方法でそれを行うための提案はありますか?
どんな助けでも大歓迎です