PHP中的相对路径在服务器上不起作用[关闭]

问题描述 投票:2回答:3

背景信息:我一直在我自己的服务器(本地主机)上开发一个自托管的Facebook应用程序,并且一切正常。最近,我将文件上传到共享的托管在线服务器(hostgator),并弹出一个奇怪的错误。

我的require_once()函数似乎忽略了hostgator服务器上的相对路径。例如,在index.php中,我具有require_once('fb / login.php')。这将引发错误,指出找不到example.com/login.php中的文件。为什么require()忽略我路径的fb部分?记住,这在我的私人本地主机服务器上工作得很好。我做了一些谷歌搜索,并通过进入php.ini并打开include_path =“ .:”解决了一半的问题。这摆脱了第一个错误,但是现在login.php也具有require_once('fb / sdk / Facebook.php')并且无法找到该文件。我知道嵌套需求变得混乱,但这确实可以在我的本地主机服务器上工作。这两台服务器都是PHP5,并且我已经确保php.ini文件相似。默认情况下,本地php.ini的include_path带有注释。我什至用本地主机替换了在线php.ini文件。依然没有。我已经尝试过使用绝对路径,但是它们确实可以工作,但是我的代码中有很多包含项和要求,并且不想对每个路径都进行手工处理。有见识吗?这是一个非常令人毛骨悚然的问题,我希望有一个简单的解决方案。

谢谢!


我做了很多研究,最后使用$ _SERVER ['DOCUMENT_ROOT']。'fb / login.php'作为我所有需要和包含的路径。解决了我所有的问题,感谢上帝

php path include require
3个回答
2
投票
您可以通过将其添加到根index.php文件中来做到这一点:

define('DOCROOT', realpath(dirname(__FILE__)).'/');

然后,只需遍历所有require语句并首先添加DOCROOT:

require_once('fb/login.php');

成为:

require_once(DOCROOT . 'fb/login.php');

您甚至可以进行全局搜索并通过将require_once('替换为require_once(DOCROOT . '来进行替换


1
投票
首先要在您使用getcwd()的文件中调用require_once,以查看您是否确实在想自己的位置。

第二,尝试用./fb/代替fb/


0
投票
或只是require_once('/fb/login.php');
© www.soinside.com 2019 - 2024. All rights reserved.