【问题标题】:If you include a file in PHP within a loop will it access the file every time it runs in the loop?如果您在循环中包含 PHP 中的文件,它会在每次循环中运行时访问该文件吗?
【发布时间】:2011-12-17 14:26:25
【问题描述】:

如果你有这个

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

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

【问题讨论】:

    标签: php file loops include


    【解决方案1】:

    如果您询问文件是否要从内存中提取和包含,而不是一次又一次地解析和编译为 PHP 字节码:-是的,如果包含给定文件 n,您将处理同一个文件 n 次次。这是标准的 PHP 行为,但是...

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

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

    更多关于 APC here

    【讨论】:

      【解决方案2】:

      检查起来很简单——在其中放置一个 sleep(),让文件进行一些输出,然后在其中一个睡眠期间修改文件以更改其输出。

      whatever.php:

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

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

      【讨论】:

      • 判断 PHP 中 include 方法行为的好方法,谢谢 :)
      【解决方案3】:

      它将包含该文件十次。

      如果有问题,您可以使用include_once

      【讨论】:

      • 如果我将 include_once 放在 for 循环中,它会不会只包含一次,然后其他 9 次什么也不显示?
      • 嗯,是的:P 有时你想要它包含十次,有时你不想。
      猜你喜欢
      • 2013-08-18
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多