我不知道为什么我遇到这个问题。我在Windows 7上运行IIS进行开发,但是有一个用于Web托管的Linux服务器。
问题是每当我使用PHP系统函数时,如file_exists()
或move_uploaded_file()
,使用类似/support/images/flags/countries/
的路径总是失败。支持目录位于站点的根目录下。我读过的所有文档似乎都表明路径应该有效。这是因为我使用Windows吗?甚至关于SO的帖子似乎也说它应该有效。
为了让它正常工作,我必须使用像{$_SERVER['DOCUMENT_ROOT']}/support/images/flags/countries
任何人都能解释为什么我的想法错了吗?
答案 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容易得多。