Если у вас есть это
for ($ i = 0; $ i <10; $ i ++) include ('whatever.php');
Будет ли он вытаскивать файл десять фактических раз, или он будет только доступ к файлу один раз, и сохранить его содержимое и просто оценить его для других 9 раз?
Он будет включать файл десять раз.
Если это проблема, вы можете использовать include_once
Достаточно просто проверить – поместите спать () там, попросите файл сделать какой-то вывод, а во время одного из периодов сна измените файл, чтобы изменить его вывод.
whatever.php:
<?php echo 'hello from version 1.0'; sleep(10);
затем во время одного из снов измените его на «версия 2.0», используя другую оболочку. Если выход не изменится, тогда PHP загрузит файл ONCE и сохранит его в кэше – вы все равно получите 10 копий вывода / эффектов файла, но вы поймете, что PHP не ударил диск 10 раз.
Если вы спрашиваете, будет ли файл обналичен и включен в память вместо разбора и скомпилирован в байт-код PHP снова и снова: -Да, вы будете обрабатывать один и тот же файл n раз, если вы включите этот заданный файл n раз. Это стандартное поведение PHP, но …
Вы можете изменить это (и мне кажется, что вы это ищете?). Как я уже сказал, PHP будет включать файл в первый раз и не будет кэшировать его для вас … если вы не используете какой-либо PHP-кеширующий модуль, такой как APC:
При использовании APC все будет по-другому, полученный результат будет таким же, но поведение сервера сильно изменится! В первый раз, когда вы включаете файл, он будет разбираться, скомпилирован в байт-код PHP (машиночитаемые инструкции) и будет храниться в общей памяти. Позже, если этот файл не будет изменен, он НЕ будет обработан снова! PHP перейдет прямо к предварительно скомпилированной версии вашей программы и выполнит ее, сохранив много времени и ресурсов! Хорошо подходит для веб-приложений с высоким трафиком.
Подробнее о APC здесь