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

#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 здесь