我很难为这个问题找到一个好的标题,所以我希望这很清楚。我目前正在我的一个网站上使用 TwitterOauth 模块来发布推文。虽然这可行,但我需要限制提交的推文数量;每小时只有一个。
注意:我没有使用数据库的选项。这对于这个问题至关重要。
我已将其合并到处理实际发布到 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;}
问题是,虽然这行得通;它允许意外的双重提交;如果多个用户(并且运行此脚本的站点当前非常繁忙)触发此脚本,则恰好有 2 次提交(或更多,尽管尚未发生)到 Twitter 滑过,而不仅仅是 1。我的第一个想法是打开,写入和关闭文件的(虽然是一分钟)延迟,但我可能是错的。
有谁知道什么允许意外双重提交(以及如何解决这个问题)?