如果你有这个
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的信息在这里