Если вы включите файл в PHP в цикл, будет ли он обращаться к файлу при каждом запуске в цикле? - PullRequest
2 голосов
/ 29 октября 2011

Если у вас есть это

for($i = 0; $i < 10; $i++) include('whatever.php');

Будет ли он извлекать файл десять раз в действительности, или он получит доступ к файлу только один раз, сохранит его содержимое и просто оценит его для остальных 9 раз?*

Ответы [ 3 ]

4 голосов
/ 29 октября 2011

Он будет включать файл десять раз.

Если это проблема, вы можете использовать include_once

1 голос
/ 29 октября 2011

Достаточно просто проверить - поместите туда sleep (), сделайте, чтобы файл сделал некоторые выходные данные, и в течение одного из периодов ожидания измените файл, чтобы изменить его вывод.1003 *

<?php 

echo 'hello from version 1.0';
sleep(10);

затем во время одного из снов измените его на «версию 2.0», используя другую оболочку.Если выходные данные не меняются, тогда PHP загрузил файл ОДИН РАЗ и кэшировал его - вы все равно получите 10 копий вывода / эффектов файла, но вы будете знать, что PHP не попадал на диск 10 раз.

0 голосов
/ 29 октября 2011

Если вы спрашиваете, будет ли файл кэшироваться и включаться из памяти вместо того, чтобы снова и снова анализировать и компилировать в байт-код PHP: -Да, вы будете обрабатывать один и тот же файл n раз, если включите этот файл nраз.Это стандартное поведение PHP, но ...

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

При использовании APC , все будет иначе, полученный результат будет таким же, но поведение сервера сильно изменится!При первом включении файла он будет проанализирован, скомпилирован в байт-код PHP (машиночитаемые инструкции) и сохранен в общей памяти.Позже, если этот файл не будет изменен, он будет НЕ снова обработан!PHP перейдет прямо к предварительно скомпилированной версии вашей программы и выполнит ее, сэкономив вам много времени и ресурсов!Подходит для веб-приложений с большим трафиком.

Подробнее о APC здесь

...