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

7

这是在*nix和Windows中定义包含路径的正确方式吗?

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

请注意我上面包含的斜杠。对于包含/需要,两个操作系统使用的是相同的斜杠吗?
编辑(已更新答案):
从我可以了解到的情况来看,下面的代码是普遍定义包含/需要路径的正确方式,适用于*nix和Windows操作系统。请在下面的评论中纠正任何错误。
让我感到困惑的是,我看到许多示例显示将反斜杠(\)替换为正斜杠(/)。根据以下一些答案,这是不必要的。
因此,最终正确的代码(对于纯粹主义者)是:
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 :。因此,在Windows上,/www/file.php 应该可以正常工作。如果PHP可以可选地将绝对路径名解释为基于Apache配置中定义的DocumentRoot,则会很好,但这可能要求过高了。 - David Spector
我认为你需要使用PHP函数set_include_path或Apache指令include_path来改变Include路径,而不是使用define。 - David Spector
3个回答

8

正斜杠在两种操作系统下都可以使用,并且这是最佳选择。

我没有找到绝对的参考资料,但PHP手册的多个位置都有提到,比如这里这里。而且,在我作为Windows和Linux用户的经验中,它可以正常工作。

最后,你可能会在Windows上指定混合路径,比如c:\\apache\\htdocs\\myapp/index.php这也完全可行。


@Derek,好信息 - 谢谢。我会假设我的上述定义适用于两个操作系统。 - Jeff
1
我经常想知道为什么还在使用反斜杠,因为它会导致转义困扰,而正斜杠同样可以胜任。 - Ether
我认为答案是正斜杠在 Windows 的所有其他部分中并不起作用,只有在 PHP 中大多数情况下才能使用。 - David Spector

4

2
许多人惊讶地发现,在Windows和MSDOS上,/可以正常使用。在路径名中,它甚至可以在OpenVMS上使用。
然而,如果您在PHP中进行路径处理,使用数组比字符串更方便。
$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接