如何以操作系统友好的方式引用本地路径?

时间:2009-09-24 01:27:01

标签: php

在PHP中,如何以操作系统友好的方式引用文件?我正在看一些像

这样的代码
<?php
require_once(dirname(dirname(__FILE__)).'/common/config.inc.php');

...

我必须在Windows机器上运行,但它没有解析正确的路径:

PHP Warning:  require_once(C:\workspace/common/config.inc.php): failed to open stream: No such file or directory in C:\workspace\somescript.php on line 2
PHP Fatal error:  require_once(): Failed opening required 'C:\workspace/common/config.inc.php' (include_path='.;C:\php5\pear') in C:\workspace\somescript.php on line 2

看起来它正试图打开窗户不喜欢的正斜杠。文件C:\ workspace \ commonconfig.inc.php存在。该脚本只是找不到它,因为它有正斜杠吗?

在require_once语句中,我不应该以某种os友好的方式表达路径的最后部分吗?你是怎样做的?

在PHP中,有类似于Python的os.path.normpath(path)吗? ..which采用类似路径的字符串并返回适合正在运行的操作系统的路径...

3 个答案:

答案 0 :(得分:8)

您可以使用一些东西。

使用内置常量DIRECTORY_SEPARATOR代替硬编码斜杠,或者根据我的喜好,使用自己的代码:

define('DS', DIRECTORY_SEPARATOR);

..它使您的代码更紧凑。

或者,使用realpath()并使用unix样式的正斜杠表达所有路径,因为:

  

在Windows上,realpath()会将unix样式路径更改为windows样式   <?php echo realpath('/windows/system32'); ?>

     

以上示例将输出:   C:\WINDOWS\System32

答案 1 :(得分:2)

require_once(realpath(dirname(__FILE__) . "/the/rest/of/yr/path/and/file.php"));

答案 2 :(得分:2)

我这样做:

$dir = str_replace("\\", '/', dirname(dirname(__FILE__));
require_once $dir . '/common/config.inc.php';

适用于Windows和Linux。虽然在这种情况下,为什么不这样做:

require_once '../common/config.inc.php';