我不知道为什么我会遇到这个问题。 我在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 中需要反斜杠。