PHP中的相对路径无法在服务器上运行

时间:2012-04-19 04:47:53

标签: php path include require relative

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

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

谢谢!


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

3 个答案:

答案 0 :(得分:2)

我很久以前就停止使用相对路径来避免你现在遇到的那种麻烦。考虑像所有PHP框架一样 - 它们定义一个变量来指示服务器根目录的确切位置,然后您可以使用它来构建文件的绝对路径。

您可以通过将此添加到root 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 :(得分:1)

我不能说我知道如何解决它,但这是我在目录问题上多次做过的事情:

首先,在您使用getcwd()的文件中调用require_once,看看您是否真的想到自己。

其次,请尝试./fb/而不是fb/

答案 2 :(得分:0)

为什么不尝试require_once('../fb/login.php');而不是更改php.ini文件?

或仅require_once('/fb/login.php');