如何将此更改为每周而不是每次刷新?

时间:2013-08-23 02:58:02

标签: php

我有一些适合我的代码。但是,我现在正在修改它,以便在每次刷新页面时不改变,而是在星期一每周刷新一次。

每次刷新时更改它的代码是:

<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);

现在,通过该示例,似乎需要知道“图像”的数量。因为我正在使用我将不断添加的引用文件,所以我不打算计算每次有多少引号,也不会在每次向文件添加更多引号时不断更改此代码。

有没有办法改变这个例子以适应我正在努力做我正在寻找的东西,或者我在这里没有正确的道路?

提前感谢您的意见。

2 个答案:

答案 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];
}