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