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

时间:2009-12-24 21:07:44

标签: php windows linux unix include-path

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

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

注意上面包含的尾随正斜杠。包括/的前向斜杠是否也适用于两个操作系统?

编辑(用答案更新):

从我可以收集的内容来看,下面的代码是为nix和Windows操作系统普遍定义include / require路径的正确方法。请随时在下面的评论中更正任何内容。

让我感到困惑的是我看到的许多例子,显示将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__已经解析了符号链接。或者它可能包括解决相对路径?无论哪种方式,它似乎巩固了我们的目标。

3 个答案:

答案 0 :(得分:8)

正斜杠适用于两种操作系统,这是最佳选择。

我找不到对此的绝对引用,但它在PHP手册的几个地方表示,如herehere。而且,它适用于我,Windows和Windows Linux用户。

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

答案 1 :(得分:4)

或者,您可以使用PHP的预定义常量DIRECTORY_SEPARATOR,它将为您提供特定于操作系统的目录定界符。另见http://www.php.net/manual/en/dir.constants.php

答案 2 :(得分:2)

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

但是,如果你在PHP中为路径做一些事情,那么数组将比字符串更方便。

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib');