如果在PHP循环中包含一个文件,它会在每次循环中运行时访问该文件吗?


If you include a file in PHP within a loop will it access the file every time it runs in the loop?

如果你有这个

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

它会实际拉出文件10次,还是只访问文件一次,并保留其内容并简单地对其他9次进行评估?

它将包含该文件十次。

如果有问题,可以使用include_once

检查起来很简单——在那里放一个sleep(),让文件做一些输出,在其中一个睡眠期间,修改文件以改变它的输出。

whatever.php:

<?php 
echo 'hello from version 1.0';
sleep(10);

然后在其中一个休眠期间,使用另一个shell将其更改为"version 2.0"。如果输出没有改变,那么PHP已经加载了文件一次并缓存了它—您仍然会得到文件输出/效果的10个副本,但是您会知道PHP没有访问磁盘10次。

如果你问文件是否要从内存中被兑现和包含,而不是一次又一次地解析和编译为PHP字节码:-是的,如果你包含给定文件n次,你将处理相同的文件n次。这是标准的PHP行为,但是…

你可以改变它(在我看来,你正在寻找它?)正如我所说,PHP将第一次包含该文件,并且不会为您缓存它…除非你使用PHP缓存模块,如APC:

当使用APC时,情况将会有所不同,输出结果将是相同的,但服务器的行为将会改变很多!第一次包含文件时,它将被解析、编译为PHP字节码(机器可读指令),并存储在共享内存中。稍后,除非给定的文件被修改,否则它将再次处理NOT !PHP将直接进入预编译版本的程序并执行它,为您节省大量的时间和资源!适合高流量的web应用程序。

更多关于APC的信息在这里