关于计时器的PHP脚本,无法获取文件缓存

时间:2012-04-05 14:55:40

标签: php time timer outputcache

我已经被困在这几天了,而且我真的无法让这个脚本正常运行。

我有一个非常基本的启动脚本,每次页面刷新时都会输出一个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]) ;
?>

3 个答案:

答案 0 :(得分:2)

这种方法如何生成随机数:

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

它将种子修复了两天(技术上为48小时,不一定匹配两整天)所以第一次调用rand()总是返回基于该种子的第一个数字。

答案 1 :(得分:1)

您是否检查过以确保文件实际已创建?目录“缓存”是否存在?你可以在Web服务器进程写入它吗?请注意,如果无法创建文件,file_put_contents将仅发出 WARNING ;如果您将服务器设置为不显示警告,则不会产生任何错误并且脚本似乎没有问题地运行。

我绝对同意该文件没有被写入;你的代码对我来说很好。 没有缓存/:

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

答案 2 :(得分:1)

替换

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

使用

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

另外

mt_rand优于rand您可能想要更改

修改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' 
);

现在测试你的脚本..它完全正常......如果你还需要其他任何东西,请告诉我

由于

:)