【问题标题】:Proper way to set PHP include path for *Nix and Windows为 *Nix 和 Windows 设置 PHP 包含路径的正确方法
【发布时间】:2010-12-29 21:47:25
【问题描述】:

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

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

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

编辑(已更新答案):

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

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

【问题讨论】:

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

标签: php windows linux unix include-path


【解决方案1】:

正斜杠对两种操作系统都有效,而且是可行的方法。

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

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

【讨论】:

  • @Derek,很好的信息-谢谢。我会假设我上面的定义适用于两个操作系统。
  • 我经常想知道为什么仍然使用反斜杠,因为它会引起转义头痛,而正斜杠也可以。
  • 我认为答案是正斜杠在所有其他 Windows 中都不起作用,主要是在 PHP 中。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 2014-09-12
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多