2012-06-25 4 views
1

Включая те же файлы несколько раз на одной странице. Я заметил, что, когда я это делаю, кажется, что PHP кэширует файлы. Когда я генерирую случайное число с функцией rand, в обоих случаях одинаково. Кто-нибудь знает, как я могу остановить PHP от этого? Я попробовал несколько различных функций заголовка, как это, но они не работают:Включен ли кеш PHP во время выполнения?

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Pragma: no-cache"); // HTTP/1.0 

Edit: Хорошо, я тупой, и я забыл, что я называя включает в себя от JQuery скрипт, который я считаю кэширование файлов , Я вернулся, чтобы посмотреть код, который кто-то просил, и заметил его. Всем спасибо.

+0

Куда вы включили()? Покажите нам еще код ... – Jocelyn

+0

Я включаю два файла, которые выводят rand() – Keith

+0

Вы засовываете генератор случайных чисел? –

ответ

1

Я бы предположил, что включение одного и того же файла несколько раз не является особенно хорошей практикой.

Лучшим решением было бы включить его один раз и вызвать функции, которые он содержит несколько раз.

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

Затем просто включите его один раз в начале вашей программы.

Я знаю, что это прямо не отвечает на вопрос, но делать это таким образом, это лучше практика кодирования и сделает ваш код намного проще в управлении и обслуживании.

Надеюсь, что это поможет.

+1

Я согласен, и я могу изменить его так, чтобы работать, но мне также интересно, если это кеширование. Я где-то читал, что все переменные в include считываются в пространство имен и больше не доступны. Я не могу найти нигде больше, что говорит об этом. – Keith

0

Скорее всего, вы засеиваете pRNG с тем же значением внутри этого файла. Заголовки влияют на браузер, а не на сценарий.

Я точно знаю, что включенные файлы не кэшируются: я создал консольную программу, где каждая «функция» была реализована путем включения файла. Изменение файла без перезагрузки программы по-прежнему позволяло загружать обновленные файлы.

Итак, ваша проблема - случайное семя или что-то в другом месте. Попробуйте echo microtime(), чтобы узнать, дает ли он одинаковый результат оба раза.

+0

microtime произвел тот же результат из всех включений (0.83720300 1340651830) – Keith

Смежные вопросы