2009-12-24 105 views
7

这是define的一个包含路径的正确方法* nix和Windows设置PHP的正确方法包括* Nix和Windows的路径

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

请注意上面包含的尾部正斜杠。对于这两种操作系统来说,包括/是否需要相同的正斜杠?

EDIT(使用答案修订版):

据我所知,我下面的代码是普遍的定义既一个包含/需要路径的正确方法的* 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()):

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

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

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

回答

7

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

我找不到绝对的参考,但它在PHP手册的几个地方显示,如herehere。而且,它适用于我,一个Windows用户。

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

+0

@Derek,很好的信息 - 谢谢。我会假设我的定义在两个操作系统上都可以工作。 – Jeff 2009-12-24 21:21:31

+1

我经常想知道为什么反斜杠还在使用,因为它会导致逃生头痛,正斜杠也会起作用。 – Ether 2009-12-24 21:30:19

2

令很多人感到意外的是,/在Windows和MSDOS上正常工作。在路径名中,它甚至可以在OpenVMS上运行。

但是,如果您在PHP中为路径做某些事情,则数组将比字符串更方便。

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