7

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

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

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

编辑(已更新答案):

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

让我感到困惑的是我看到的许多显示替换back-slashes (\)into的示例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__已经解决了符号链接。或者它可能包含在解析相对路径中?无论哪种方式,它似乎都巩固了我们的目标。

4

3 回答 3

8

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

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

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

于 2009-12-24T21:10:15.120 回答
4

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

于 2009-12-24T23:36:19.677 回答
2

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

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

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib');
于 2009-12-24T21:21:22.460 回答