0

私にはうまく機能しているコードがいくつかあります。ただし、ページを更新するたびに変更するのではなく、週に 1 回月曜日にのみ更新するように変更しようとしています。

更新ごとに変更するコードは次のとおりです。

<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]: PHP で 2 週間ごとに異なる画像を表示するには? . そのリンクからターゲットにしている特定の例は次のとおりです。

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

さて、その例では、「画像」の数を知る必要があるようです。代わりに、常に追加する見積もりファイルを使用しているため、見積もりの​​数を数えたり、ファイルに見積もりを追加するたびにこのコードを常に変更したりするつもりはありません。

私が探していることをするために働いているものに合うようにその例を変更する方法はありますか、それとも私はここで正しい道を進んでいませんか?

ご意見をお寄せいただきありがとうございます。

4

2 に答える 2

0

を使用filemtime()して、ファイルが最後に変更された時期を特定できます。ドキュメントには、「時間はUnix タイムスタンプとして返​​されます」とありますが、これは秒単位であることを意味します。で現在時刻を取得できます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 週間経過していることがわかるため、新しい現在の見積もりファイルを作成します。

date()時間と分の部分を削除することでこれをさらに改善できるため、月曜日の真夜中に常に「更新」されますが、それを書くには疲れすぎて、 、またはいくつかを使用して理解できるはずです賢い割り算と掛け算。

于 2013-08-23T03:13:31.763 に答える