为 *Nix 和 Windows 设置 PHP 包含路径的正确方法

Proper way to set PHP include path for *Nix and Windows

提问人:Jeff 提问时间:12/25/2009 最后编辑:Jeff 更新时间:10/25/2013 访问量:9952

问:

这是 *nix 和 Windows 的包含路径的正确方法吗?define

define( 'INCPATH', realpath( dirname( __FILE__ ) ) . '/' );

请注意我上面包含的尾部正斜杠。两个操作系统的 includes/requires 的正斜杠是否也相同?

编辑(更新答案):

据我所知,我下面的代码是为 *nix 和 Windows 操作系统通用定义包含/要求路径的正确方法。请随时在下面的评论中更正任何内容。

让我感到困惑的是我看到的许多例子显示替换成.根据下面的一些答案,这是不必要的。back-slashes (\)forward-slashes(/)

因此,最终正确的代码(对于纯粹主义者)是:

define( 'INCPATH', realpath( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR );

该代码生成以下结果:

*nix: /path/to/the/file/

Windows: C:\Path To\the\file\

一个简短的解释,从内到外():__FILE__realpath()

文件文件的完整路径和文件名。始终包含已解析符号链接的绝对路径。

dirname()返回的字符串是删除了任何尾随 /component 的路径。负责删除文件名。

realpath()成功时返回规范化(规范化/标准化)绝对路径名。生成的路径将没有符号链接或组件。我认为这是为了彻底起见而包含的,因为已经解析了符号链接。或者,也许它包含在解析相对路径中?无论哪种方式,它似乎都巩固了我们的目标。'/./''/../'__FILE__

php windows linux unix 包含路径

评论

0赞 David Spector 9/7/2018
在Windows中,如果当前目录位于C以外的设备上,则只需要前导C:。 因此,/www/file.php 在Windows上应该可以正常工作。如果 PHP 可以选择将绝对路径名解释为植根于 Apache 配置中定义的 DocumentRoot,那就太好了,但这可能要求太多了。
0赞 David Spector 9/7/2018
我认为您必须使用 PHP 函数 set_include_path 或 Apache 指令include_path而不是定义来更改 Include 路径。

答:

8赞 Derek Illchuk 12/25/2009 #1

正斜杠适用于两个操作系统,这是要走的路。

我找不到对此的绝对引用,但它在 PHP 手册中的几个地方都有说明,比如 这里 和 这里而且,它适用于我,Windows和Linux用户。

最后,您最终可能会在 Windows 上指定混合路径,例如 ,并且一切正常。c:\\apache\\htdocs\\myapp/index.php

评论

0赞 Jeff 12/25/2009
@Derek,好信息 - 谢谢。我将假设我上面的定义适用于两个操作系统。
1赞 Ether 12/25/2009
我经常想知道为什么仍然使用反斜杠,因为它会引起转义头痛,而正斜杠也同样有效。
0赞 David Spector 9/7/2018
我认为答案是正斜杠不适用于所有其他 Windows,主要是在 PHP 中。
2赞 wallyk 12/25/2009 #2

令许多人惊讶的是,它在 Windows 和 MSDOS 上运行良好。在路径名中,它甚至可以在 OpenVMS 上运行。/

但是,如果您在 PHP 中为路径做一些事情,数组将是一个比字符串更方便的结构。

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib');
4赞 Decent Dabbler 12/25/2009 #3

或者,您可以使用PHP的预定义常量,这将为您提供特定于操作系统的目录分隔符。另请参阅 http://www.php.net/manual/en/dir.constants.phpDIRECTORY_SEPARATOR