我有一些适合我的代码。但是,我现在正在修改它,以便在每次刷新页面时不改变,而是在星期一每周刷新一次。
每次刷新时更改它的代码是:
<center><?php
?><div style="min-height: 75px; padding-top: 0px; padding-left: 5px; padding-right: 5px;">
<?php
$file = "/pathway/to/the_file/on_the_server/theme_name/file_name.txt";
$quote = file($file);
echo $quote[array_rand($quote)];
?></div></center>
我一直在寻找答案,并且还没有找到足够的例子来改变它。我认为我迄今为止发现的最接近可能的例子是[这里] [1]
[1]:How to show different image every 2 weeks in php?。我从该链接定位的具体示例如下:
$week = date('W');
$changes = (int)(($week-1)/2);
$image = $changes % 8 + 1;
printf("Week: %d, Images changed: %d, Current Image: %d\n"
, $week, $changes, $image);
现在,通过该示例,似乎需要知道“图像”的数量。因为我正在使用我将不断添加的引用文件,所以我不打算计算每次有多少引号,也不会在每次向文件添加更多引号时不断更改此代码。
有没有办法改变这个例子以适应我正在努力做我正在寻找的东西,或者我在这里没有正确的道路?
提前感谢您的意见。
答案 0 :(得分:0)
您可以使用filemtime()
确定上次更改文件的时间。文档说“时间以Unix timestamp”的形式返回,这意味着它只需几秒钟。您可以使用time()
获取当前时间。您可以使用date('N')
获取星期几。您可以使用file_get_contents()
和file_put_contents()
来获取和撰写“当前报价文件”的内容。
为了稳定性,检查file_exists()
。
$currentQuoteFile = "current-quote.txt";
$quoteFile = "all-quotes.txt";
if (!file_exists($currentQuoteFile)) {
// Create a new "current quote file" if it doesn't exist yet.
$pickNewQuote = true;
} else {
$lastModified = filemtime($currentQuoteFile);
$oneDayInSeconds = 60 * 60 * 24;
$oneWeekInSeconds = $oneDayInSeconds * 7;
// Look for the Monday on or before the last modified date. This lets us
// emulate "updating on Monday" without actually requiring someone to visit
// this page every Monday.
$lastModified -= (date("N", $lastModified) - 1) * $oneDayInSeconds;
// If the current time is at least a week later than the Monday on or
// before the quote file was updated, we need to pick a new quote.
$pickNewQuote = time() - $oneWeekInSeconds > $lastModified;
}
if ($pickNewQuote) {
$quotes = file($quoteFile);
$quote = $quotes[array_rand($quotes)];
file_put_contents($currentQuoteFile, $quote);
} else {
$quote = file_get_contents($currentQuoteFile);
}
有关“查找上次修改日期或之前的星期一”的进一步说明,请考虑如果您的网站在星期四,星期二访问后会发生什么。星期四,您将创建一个新的当前报价文件,并且在星期二,自上次更新文件以来不到一周,但我们希望看起来像我们在星期一更新。通过查看上次修改时间之前的星期一,我们会看到自那天起已经过了一周,所以我们将创建一个新的当前报价文件。
你可以通过删除小时和分钟部分来使这更好,所以它总是在星期一午夜“更新”,但我太累了,不能写,你应该能够用{ {1}},或者只是一些聪明的除法和乘法。
答案 1 :(得分:0)
你可以这样做。您可以将照片文件名称及其更改的最后日期存储在文件中。星期一,照片会更改并记录到文件中。使用array_rand可能每周都会重复一次。您可以轻松添加额外的逻辑,以确保阵列中的新照片与前一周不同。希望有所帮助
if (date('l') == 'Monday') {
$aFileContents = file('photoDate.txt');
if($aFileContents[1] == date('Y-m-d')) {
$photo = $aFileContents[0];
} else {
$photo = array_rand($aPhotoArray);
$fp = fopen('photoDate.txt', 'w');
fwrite($fp, $photo . '\n');
fwrite($fp, date('Y-m-d'));
fclose($fp);
}
} else {
$aFileContents = file('photoDate.txt');
$photo = $aFileContents[0];
}