PHP基本路径'/'不适用于文件系统功能

时间:2016-02-24 23:00:18

标签: php

我不知道为什么我遇到这个问题。我在Windows 7上运行IIS进行开发,但是有一个用于Web托管的Linux服务器。

问题是每当我使用PHP系统函数时,如file_exists()move_uploaded_file(),使用类似/support/images/flags/countries/的路径总是失败。支持目录位于站点的根目录下。我读过的所有文档似乎都表明路径应该有效。这是因为我使用Windows吗?甚至关于SO的帖子似乎也说它应该有效。

为了让它正常工作,我必须使用像{$_SERVER['DOCUMENT_ROOT']}/support/images/flags/countries

这样的路径

任何人都能解释为什么我的想法错了吗?

2 个答案:

答案 0 :(得分:0)

您应该在PHP中使用DIRECTORY_SEPARATOR常量。 Linux中的文件和文件夹有些不同。使用它将保留Windows和Linux中的兼容性。

这是我用来构建路径的一个小函数:

function buildPath(...$segments){
    return join(DIRECTORY_SEPARATOR, $segments);
}

echo buildPath('path', 'to', 'folder');

另一个兼容性专有技术是Linux区分大小写,在选择“TabLe”时也在数据库中。在Windows中,无论你如何编写它都会起作用,在Linux上它必须完全相同。

使用正斜杠在浏览器中创建链接是可行的方法,例如将人员链接到/var/wwww/css/index.css(很可能只是./css/index.css),但对于内部操作,Linux中需要反斜杠。

答案 1 :(得分:0)

使用$_SERVER['DOCUMENT_ROOT']并不是一个好主意,特别是如果您计划在服务器变量不可用的应用程序中使用CLI。你应该尝试像

这样的东西
dirname(__FILE__)
在您的脚本中

,或考虑引入一个自定义常量,该常量包含根文件夹的完整系统路径 - 例如,

define('MY_APP_ROOT', '/my/full/path/');

比依赖Apache或IIS容易得多。