【发布时间】:2010-12-29 21:47:25
【问题描述】:
这是define *nix 和 Windows 的包含路径的正确方法吗?
define( 'INCPATH', realpath( dirname( __FILE__ ) ) . '/' );
请注意我上面包含的尾部正斜杠。两个操作系统的包含/要求的正斜杠是否也相同?
编辑(已更新答案):
据我所知,我下面的代码是为 *nix 和 Windows 操作系统普遍定义包含/要求路径的正确方法。请随时更正以下 cmets 中的任何内容。
让我感到困惑的是我看到的许多示例显示将back-slashes (\) 替换为forward-slashes(/)。根据下面的一些答案,这是不必要的。
所以最终正确的代码(纯粹主义者)是:
define( 'INCPATH', realpath( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR );
该代码产生以下结果:
*nix: /path/to/the/file/
Windows: C:\Path To\the\file\
简要说明,从内到外 (__FILE__) 到 (realpath()):
FILE 文件的完整路径和文件名。始终包含解析符号链接的绝对路径。
dirname() 返回的字符串是 path 并删除了任何尾随 / 组件。负责删除文件名。
realpath() 成功时返回规范化(规范化/标准化)的绝对路径名。生成的路径将没有符号链接、'/./' 或 '/../' 组件。我认为这是为了彻底性而包含在内,因为__FILE__ 已经解析了符号链接。或者它可能包含在解析相对路径中?无论哪种方式,它似乎都巩固了我们的目标。
【问题讨论】:
-
在 Windows 中,如果当前目录位于 C 以外的设备上,则只需要前导 C:。因此,/www/file.php 在 Windows 上应该可以正常工作。如果 PHP 可以选择性地将绝对路径名解释为以 Apache 配置中定义的 DocumentRoot 为根,那就太好了,但这可能要求太多了。
-
我认为您必须使用 PHP 函数 set_include_path 或 Apache 指令 include_path 而不是定义来更改包含路径。
标签: php windows linux unix include-path