1

在过去的几个月里,我在 localhost 上建立了一个网站。在整个站点中,我不使用相对路径,而是$_SERVER["DOCUMENT_ROOT"]访问服务器的根目录,以便可以从那里引用文件。但是,我刚决定将我的网站上传到 000webhost。正如我很快发现的那样,对于那些使用它们的人来说,你可能已经意识到,它们的服务器根目录与你上传文件的实际目录不同。我相信它是虚拟主机......无论如何,我$_SERVER["DOCUMENT_ROOT"]现在在网站上抛出错误:

警告:include_once() [function.include-once]:open_basedir 限制生效。文件(/usr/local/apache/htdocs/mypath)不在允许的路径中

我查看的每个其他站点都说您应该替换$_SERVER["DOCUMENT_ROOT"]为 000webhost 提供给您的主目录。但是,如果我将来想更改托管服务,那我就完蛋了。有什么方法可以$_SERVER用来访问设置的虚拟目录或使用 htaccess 或其他东西来使我的代码工作?我尝试在我的根目录中的 htaccess 文件中使用 DocumentRoot,但在尝试访问该页面时它引发了 404 错误。

4

2 回答 2

4

我永远不会推荐使用DOCUMENT_ROOT. 例如,如果您想通过命令行或 cron 运行脚本,它是没有用的。

相反,我会include_path通过您的脚本之一设置。每个页面中都包含的东西(比如某种配置或引导脚本)。

例如,假设您config.php在应用程序的根目录(可能是 doc root,但这并不重要)中包含每个页面

set_include_path(implode(PATH_SEPARATOR, array(
    __DIR__, // this is the directory of this file, config.php
    get_include_path()
)));

然后,您可以在include/require语句中安全地使用此位置的相对路径

include 'foo.php';         // APP_ROOT/foo.php
include 'somedir/bar.php'; // APP_ROOT/somedir/bar.php

设置包含路径时,脚本所在的位置并不重要,只需构建适当的路径即可。说config.php住在里面APP_ROOT/configs/config.php,包含路径是

realpath(__DIR__ . '/..') // realpath just resolves the path traversal
于 2013-11-01T03:55:35.023 回答
-1

决定采用以下方法:

http://www.000webhost.com/forum/customer-assistance/4857-document_root-environment-variable.html

作品!

于 2013-11-01T04:34:25.927 回答