2013-11-01 46 views
1

我在过去几个月花了在本地主机上构建网站。在整个网站中,我使用$_SERVER["DOCUMENT_ROOT"]来访问我的服务器的根目录,而不是使用相对路径,所以我可以从那里引用文件。但是,我只是决定将我的网站上传到000webhost。正如我很快发现的那样,对于那些使用它们的人,您可能知道,他们的服务器根目录与您上传文件的实际目录不同。我相信这是虚拟主机......反正,我现在$_SERVER["DOCUMENT_ROOT"]抛出错误沿着这个网站上线:

警告:include_once()的[一旦function.include-]:实际上open_basedir的限制。文件(在/ usr /本地/ Apache/htdocs中/ mypath中)不

其他网站我看了看说,你应该只由000webhost的提供给你的home目录替换$_SERVER["DOCUMENT_ROOT"]允许的路径(S)内。但是,如果我想在将来更改托管服务,我就搞砸了。有没有什么办法可以使用$_SERVER来访问设定的虚拟目录,或者使用htaccess或其他东西来使我的代码工作?我尝试在我的根目录下的htaccess文件中使用DocumentRoot,但它在尝试访问该页面时抛出了404错误。

回答

4

我绝不会推荐使用DOCUMENT_ROOT。例如,如果您想要通过命令行或cron运行脚本,则无用。

我反而会通过你的一个脚本设置include_path。每一页都包含一些东西(比如某种配置或引导脚本)。

例如,假设你在你的应用程序的根目录config.php(可能是文档根目录,但是这并不重要),它包含在每一页上

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 
+1

@Nickersoft'我在过去的几个月中在localhost上构建了一个网站:这意味着在主机切换之前网站并没有完全活动,这意味着您有时间来实现这个解决方案。当潮水很低时就去做,而不是在以后有顾客时再感到绝望。 –

+0

哈哈我还没有客户......我只是希望很快就会推出。 – Nickersoft

相关问题