1

私はこれに数日間立ち往生していて、このスクリプトを正しく機能させるのに本当に苦労しています。

非常に基本的な開始スクリプトがあり、ページが更新されるたびにtext / html/phpのランダムなページを出力します。

<?php
$pages = array(1 => 'text1-1.php', 2 => 'text1-2.php', 3 => 'text1-3.php', 4 => 'text1-  4.php');
$key = array_rand ( $pages );
include($pages[$key]) ;
?>

私の目標は、1日または2日ごと(または指定された時間)にのみ出力を変更するスクリプトを作成することです。そのため、ページを何度更新しても、タイマーが切れるまで出力は変更されません。

私は人々が私に与えたヒントから以下をまとめて試しましたが、私が何を試しても、ページが更新されるたびに、スクリプトは常に異なるものを出力します。

問題はファイルがキャッシュされていないことだと思いますが、その理由はわかりません。

あなたが見ることができる他の問題があれば、私はいくつかのポインタに感謝します。:)

あなたが提供できるどんな助けにも感謝します。:)

<?php
$pages = array(1 => 'text1-1.php', 2 => 'text1-2.php', 3 => 'text1-3.php', 4 => 'text1-   4.php');

$cachefile = "cache/timer.xml";
$time = $key = null;
$time_expire = 24*60*60;

if(is_file($cachefile)) {
    list($time, $key) = explode(' ', file_get_contents($cachefile));
}

if(!$time || time() - $time > $time_expire) {
    $key = rand(0,count($pages)-1);
    file_put_contents($cachefile, time().' '.$key);
}
include($pages[$key]) ;
?>
4

3 に答える 3

2

この方法で乱数を生成するのはどうですか。

srand(floor(time()/60/60/24/2));
$key = rand(0,count($pages)-1);

シードを2日間(技術的には48時間、必ずしも2日間一致するとは限りません)修正するため、rand()を最初に呼び出すと、常にそのシードに基づいて最初の番号が返されます。

于 2012-04-05T15:04:18.023 に答える
1

ファイルが実際に作成されていることを確認しましたか?ディレクトリ「キャッシュ」は存在しますか?Webサーバープロセスで書き込みできますか?file_put_contentsは、ファイルを作成できない場合にのみ警告を発行することに注意してください。サーバーが警告を表示しないように設定されている場合、エラーは生成されず、スクリプトは問題なく実行されているように見えます。

私はファイルが書き込まれていないことに完全に同意します。あなたのコードは私にとってはうまくいきます。キャッシュなし/:

Warning: file_put_contents(cache/timer.xml): failed to open stream: No such file or directory in ...

キャッシュ/および書き込み権限あり:

$ php test.php
text1-1.php
$ php test.php
text1-1.php
$ php test.php
text1-1.php
$ php test.php
text1-1.php
$ php test.php
text1-1.php
$ php test.php
text1-1.php
$ php test.php
text1-1.php
$ php test.php
text1-1.php
$ php test.php
text1-1.php
$ php test.php
text1-1.php
于 2012-04-05T15:06:34.887 に答える
1

交換

if(!$time || time() - $time > $time_expire) {

if (! $time || (time () - $time) > $time_expire) {

また

mt_randrandあなたもそれを変更したいと思うかもしれないよりも良いです

編集1

あなたarrayはフォームを開始していないので、あなた0もすべきです

交換

$key = rand(0,count($pages)-1);

$key = mt_rand( 1, count ( $pages ));

または

配列を作成します

$pages = array (
        0 => 'text1-1.php',
        1 => 'text1-2.php',
        2 => 'text1-3.php',
        3 => 'text1-4.php' 
);

スクリプトを今すぐテストしました..完全に正常に動作します...他に何か必要な場合はお知らせください

ありがとう

:)

于 2012-04-05T15:11:13.783 に答える