我已经读过,当包含一个php文件时,使用绝对路径的处理时间比相对路径快。
您建议使用什么?
include("includes/myscript.php");
或
include("/home/ftpuser/public_html/includes/myscript.php");
甚至
set_include_path("/home/ftpuser/public_html/includes");
include("myscript.php");
还是我真的不应该担心的事情?
答案 0 :(得分:16)
我通常手动设置一个常量,或者像这样:
define('ROOT', dirname(__FILE__));
然后做
require ROOT . '/include/file.php';
答案 1 :(得分:8)
这是99%的最佳方法:
include(dirname(__FILE__)."/includes/myscript.php");
这最终成为绝对路径,这意味着它将忽略include_path
,这是我体验中大量包含相关错误的已知来源......
虽然表现明智,但我怀疑绝对和相对路径之间存在很大差异。这是一种微观优化,从长远来看,这意味着什么。 include_path
中通常只有2-3件事情,除非您添加更多内容。两个常见的罪魁祸首是./
以及安装pear
的路径。
答案 2 :(得分:7)
我使用microtime(true)
编写了一个简单的速度测试脚本。它测试以下五种方法,包括一百万次迭代的方法:
// Absolute path.
include('/home/ftpuser/public_html/includes/myscript.php');
// Predefined path.
define('PATH', '/home/ftpuser/public_html/includes/');
include(PATH . 'myscript.php');
// Relative path.
include('myscript.php');
// Using set_include_path().
set_include_path('/home/ftpuser/public_html/includes/');
include('myscript.php');
// Superglobal path.
include(dirname(__FILE__) . '/myscript.php');
结果如下(以秒为单位):
Absolute path: 263.222 Predefined path: 263.545 Relative path: 301.214 Using set_include_path(): 302.396 Superglobal path: 269.631
我基于这些结果的观点是使用预定义的路径,因为它是绝对路径超过的最快路径。但是,绝对路径的缺点是,当需要进行更改时,必须在每个文件中更改它。
希望这有帮助。 :)
P.S。
define
和set_include_path()
在执行脚本期间仅使用过一次(它们位于循环外部)。
答案 3 :(得分:3)
绝对不要硬编码你的路径,比如选项二。一个很好的选择是:
define('BASE_DIR', '/home/ftpuser/public_html/includes');
include(BASE_DIR . '/myscript.php');
include(BASE_DIR . '/myscript2.php');
include(BASE_DIR . '/myscript3.php');
include(BASE_DIR . '/myscript4.php');
考虑到你可能有5到50之间(我猜),我真的不会担心它。只需走相对路径。包含时差甚至不会是显而易见的。如果您正在开发一个大型Web应用程序并且将有数百个,那可能是另一个故事...
答案 4 :(得分:2)
我倾向于通过在我的应用初始化时设置包含路径来设置我的包含目录/库。
set_include_path("/home/ftpuser/public_html/includes");
include("myscript.php");
zend框架类似于加载库类。
答案 5 :(得分:1)
当不使用绝对路径时,php会尝试在所有包含路径中找到该文件,直到找到匹配项为止。
可以根据需要添加多个包含路径,因此在极少数情况下,这会导致脚本变慢。
如果你使用绝对路径包含许多文件(例如初始化框架)可以加快脚本的速度......
我认为当文件系统上多次出现相同的相对路径/文件名削减时,它也会导致复杂化,因此当您可能需要另一次出现时,php会选择第一次出现
答案 6 :(得分:1)
最重要的是安排包含路径,以便最大数量的require
/ include
- 调用在第一个提到的路径中被捕获,但不包括首先通过绝对路径提交文件。
依赖于通过绝对路径包含所有内容很难维护,因为更改库的路径意味着单独更改引用它的所有文件而不是在一个地方更改包含路径。
答案 7 :(得分:0)
通过检查执行每个方法所花费的时间测试所有方法对你有好处,我个人从不担心它,只是使用相对路径。
我猜绝对路径会稍快一些,可能值得想知道错误会发生什么,它会将你的完整文件路径吐出到用户界面(显然会关闭error_reporting)并且这会导致安全风险吗? / p>