在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采用类似路径的字符串并返回适合正在运行的操作系统的路径...
答案 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';