如果你有这个
for($i = 0; $i < 10; $i++) include('whatever.php');
它会将文件拉出十次实际时间,还是只会访问文件一次,并保留其内容并简单地评估其他9次?
答案 0 :(得分:4)
它将包含该文件十次。
如果这是一个问题,您可以使用include_once
答案 1 :(得分:1)
足够简单来检查 - 在那里放一个sleep(),让文件做一些输出,在其中一个睡眠期间,修改文件以改变它的输出。
whatever.php:
<?php
echo 'hello from version 1.0';
sleep(10);
然后在其中一个睡眠期间,使用另一个shell将其更改为“2.0版”。如果输出没有改变,那么PHP已经加载了文件ONCE并缓存了它 - 你仍然会获得10个文件输出/效果的副本,但是你会知道PHP没有10次击中磁盘。 / p>
答案 2 :(得分:0)
如果您正在询问该文件是否将从内存中兑现并包含在内而不是一次又一次地解析和编译为PHP字节码: - 是的,如果包含该文件,则将处理相同的文件n次倍。这是标准的PHP行为,但是......
你可以改变它(在我看来你正在寻找它吗?)。正如我所说, PHP将首次包含该文件,不会为您缓存 ...除非您使用任何PHP缓存模块,如APC:
使用APC时,情况会有所不同,输出结果会相同,但服务器行为会发生很大变化!第一次包含文件时,它将被解析,编译成PHP字节码(机器可读指令)并存储在共享内存中。之后,除非该给定文件被修改,否则将再次处理 NOT ! PHP将直接进入程序的预编译版本并执行它,为您节省大量时间和资源!适用于高流量Web应用程序。
有关APC的更多信息here