PHP 基本路径“/”不适用于文件系统函数


PHP base path '/' not working for file system functions

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

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

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

谁能解释为什么我的想法是错误的?

使用

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

dirname(__FILE__)

改为在您的脚本中,或者考虑引入一个自定义常量,该常量将包含根文件夹的完整系统路径 - 例如,

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

在这方面比依赖Apache或IIS容易得多。

你应该

在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 中需要反斜杠。

相关文章: