【发布时间】:2011-12-17 14:26:25
【问题描述】:
如果你有这个
for($i = 0; $i < 10; $i++) include('whatever.php');
它会实际拉取文件 10 次,还是只访问文件一次,并保留其内容并简单地评估其他 9 次?
【问题讨论】:
如果你有这个
for($i = 0; $i < 10; $i++) include('whatever.php');
它会实际拉取文件 10 次,还是只访问文件一次,并保留其内容并简单地评估其他 9 次?
【问题讨论】:
如果您询问文件是否要从内存中提取和包含,而不是一次又一次地解析和编译为 PHP 字节码:-是的,如果包含给定文件 n,您将处理同一个文件 n 次次。这是标准的 PHP 行为,但是...
您可以更改它(在我看来,您正在寻找它?)。正如我所说,PHP 将在第一次包含该文件并且不会为您缓存它...除非您使用任何 PHP 缓存模块,例如 APC:
当使用APC时,情况会有所不同,输出的结果会是一样的,但是服务器的行为会发生很大的变化!第一次包含文件时,它会被解析、编译成 PHP 字节码(机器可读指令)并存储在共享内存中。稍后,除非给定的文件被修改,否则它将不会再次被处理! PHP 将直接进入您程序的预编译版本并执行它,为您节省大量时间和资源!适用于高流量 Web 应用程序。
更多关于 APC here
【讨论】:
检查起来很简单——在其中放置一个 sleep(),让文件进行一些输出,然后在其中一个睡眠期间修改文件以更改其输出。
whatever.php:
<?php
echo 'hello from version 1.0';
sleep(10);
然后在其中一个睡眠期间,使用另一个 shell 将其更改为“2.0 版”。如果输出没有改变,那么 PHP 已经加载了一次文件并缓存了它——你仍然会得到文件输出/效果的 10 个副本,但你会知道 PHP 没有命中磁盘 10 次。
【讨论】:
它将包含该文件十次。
如果有问题,您可以使用include_once
【讨论】: