用PHP包含文件?

时间:2009-05-21 04:56:27

标签: php optimization include performance

我正在开发一个应用程序,我要求我必须包含多个文件,如下所示:

File1.php will include File2.php

File2.php will include File3.php

File3.php will include File4.php

现在,做这些的最佳和最佳方式是什么。我尝试使用include(),但我认为它减慢了我的服务器,因为我的服务器负载图比普通服务器负载高出约3-5倍。

这些所有文件都是升沉意味着每个文件都是50 KB。所以任何人都可以建议我包含这些文件的最佳选择,以免影响网站的速度,

哪个最好?

require()

require_once()

include()

include_once()

如果有人有其他选择,请告诉我,

由于

8 个答案:

答案 0 :(得分:3)

include()和require()之间的区别在于您是分别收到警告还是致命错误。 PHP文档没有提到任何性能差异。

如果要避免重复包含文件的内容,则使用_once()变体很有用。来自PHP docs for include_once:

  

include_once()可用于在特定执行脚本期间可能包含和评估多个文件的情况,因此在这种情况下,它可以帮助避免诸如函数重定义,变量值重新分配等问题。 。

答案 1 :(得分:2)

您应该重新组织文件。有一个“common.php”文件,其中包含所有需要的文件。你不应该有这样的链。

我真诚地怀疑一些包含正在减慢您的服务器速度。大多数Web应用程序都有数十个,甚至数百个PHP文件。 3个额外的文件无法使你的应用程序变慢。

此外,您提到的功能之间的速度差异可以忽略不计,尽管您应该使用include_once / require_once而不是相应的功能,以确保您不会多次包含相同的文件。

答案 2 :(得分:2)

Jusn要知道的一张纸条。在我的一个项目中,我必须为很多类(大约50个)实现一种工厂。我为每个类创建了一个文件,包含它们的速度非常慢。我决定将它们加入一个文件中。这种惊人的表现非常值得注意。

我认为当文件系统有很多条目时,它与文件系统速度减慢有关...不确定为什么会这样,但事实 - 包括1个大文件,然后快50个小。

答案 3 :(得分:2)

关于Tech Your Universe的文章谈到了require vs require_once issue。在本质上,当执行绝对路径 require()肯定比require_once()快时,include()肯定比include_once()快。当他们用sans-once电话取代曾经的电话时,他们的确切要求是:

  

首先,strace透露有   2848系统调用以提供页面,向下   从4782,( - 40%)。接下来我去了ab   为了更多的测试,发现了   平均页面请求时间下降到   36.5,从46.5ms(-22%),服务器能够提供27.1个请求   每秒,从21.4(+%22)上升。

根据comment 90017 by Konstantin Rozinov on the require_once page on php.netrequire()require_once()之间的差异很小,只会对大型网络应用程序产生影响。我个人喜欢大的定义,但我想我们得到了这个想法。评论员还声称“当使用APC操作码缓存时,两者之间的速度差异完全无关紧要。”关于require和require_once的实际实现:“这表明操作系统(在我的情况下是Ubuntu Linux)或Apache是​​”缓存“或者知道以前的stat()调用的结果,所以它不会打扰它们“。把它当作值得的。

我的个人总结:

  • 如果您打算使用require_once, 尝试使用绝对路径。
  • 请务必使用某种操作码缓存。

答案 4 :(得分:0)

你的答案主要取决于你的需要。要记住的要点是:

  1. 包含比要求更快。
  2. 如果文件被“包含”但未找到,则不会导致致命错误。该脚本将继续运行。
  3. 如果文件被“requried”但未找到,则脚本执行会立即停止。
  4. 然而,附注: 如果你的应用程序包含file3中的file4,file2中的file3和file1中的file2,那么我会说你应该重新考虑你的文件组织。我相信你可以想出一种更好的方法来将代码组织成文件。

    附加:include和require之间的速度差异很小。但是,require_once()比require()重得多。同样适用于include_once()和include()。

    欢呼声,

    JRH

答案 5 :(得分:0)

我更喜欢将所有内容分成多个文件,因为它方便我开发,但在将其上传到服务器之前将其全部压缩成一个文件。

PHP字符串和正则表达式函数可以非常轻松地编写一个脚本来替换任何包含'somefile.php'的脚本;与该文件的实际内容(如果需要,剥离<??>)。

答案 6 :(得分:0)

绝对选择include()require()变体上的*_once()或{{1}}。你可能需要某种opcode cache来提高你的表现。

答案 7 :(得分:0)

我建议使用xdebug PHP扩展来对脚本进行基准测试和配置文件。 它会告诉你每个函数执行的时间。 您可以在此处找到有关如何安装以及可以执行的操作的更多信息:http://www.xdebug.org/