2012-04-05 3 views
1

Я застрял на этом пару дней, и у меня действительно возникли проблемы с тем, чтобы этот скрипт работал правильно.PHP Script по таймеру, не может получить файл для кэширования

У меня есть очень простой стартовый скрипт, который выводит случайную страницу 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]) ; 
?> 
+0

Вы вернулись со своими скриптами t ... я думаю, что полная редизайн будет лучшей ... я работаю над ней – Baba

ответ

2

Как об этом методе, чтобы сгенерировать случайное число:

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

Он фиксирует семя в течение двух дней (технически в течение 48 часов, не обязательно совпадающих два полных дня), поэтому первый вызов to rand() всегда возвращает первое число на основе этого семени.

+0

Вы, сэр, легенда, почему я не предложил это простое решение раньше? Сохраняет так много головной боли lol – GibsonFX

+1

Приятно, но ваш скрипт все равно будет терпеть неудачу ... ваш массив не запускает форму 0 'rand (0, count ($ pages) -1);' будет генерировать массив ключей '0', который не существует и сделает ваш скрипт неудачным – Baba

+0

Спасибо за подсказку Баба, я действительно задавался вопросом, так ли это так часто вызывало пустые страницы :) – GibsonFX

1

Вы проверили, действительно ли файл создан? Существует ли «кеш» каталога? Может ли процесс веб-сервера писать на него? Обратите внимание, что 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 
+0

Действительно, код работает отлично, вы должны получить некоторую ошибку PHP – rednaw

+0

Большое спасибо :) – GibsonFX

1

Replace

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

С

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

Также

mt_rand лучше, чем rand вы можете изменить это слишком

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

Испытано ваш сценарий сейчас .. это работает прекрасно ... дайте мне знать, если вам нужно что-нибудь еще

Благодаря

:)

+0

Большое спасибо :) – GibsonFX

+0

Вы всегда рады – Baba