この質問の良いタイトルを見つけるのに苦労していたので、これが明確であることを願っています。私は現在、自分のサイトの1つでTwitterOauthモジュールを使用してツイートを投稿しています。これは機能しますが、送信されるツイートの量に制限を設定する必要があります。1時間に1つだけ。
注:データベースを使用するオプションはありません。これは質問にとって最も重要です。
Twitter APIへの実際の投稿を処理するPHPファイルに、これを次のように組み込みました。
# Save the timestamp, make sure lastSentTweet exists and is writeable
function saveTimestamp(){
$myFile = "./lastSentTweet.inc";
$fh = fopen($myFile, 'w');
$stringData = '<?php function getLastTweetTimestamp() { return '.time().';}';
fwrite($fh, $stringData);
fclose($fh);
}
# Include the lastSentTweet time
include('./lastSentTweet.inc');
# Define the delay
define('TWEET_DELAY', 3600);
# Check for the last tweet
if (time() > getLastTweetTimestamp() + TWEET_DELAY) {
// Posting to Twitter API here
} else {
die("No.");
}
(初期)lastSentTweet.inc
ファイルの内容(chmod 777):
<?php function getLastTweetTimestamp() { return 1344362207;}
問題は、これが機能している間です。偶発的な二重送信が可能です。複数のユーザー(およびこのスクリプトが実行されているサイトが現在非常に混雑している)がこのスクリプトをトリガーすると、1つだけではなく2つの送信(まだ発生していませんが、それ以上)がTwitterにスリップスルーすることがあります。これは、ファイルを開いたり、書き込んだり、閉じたりする際の(1分ではありますが)遅延ですが、間違っている可能性があります。
偶発的な二重提出を可能にするもの(およびこれを修正する方法)を誰かが知っていますか?