2

背景信息:我一直在我自己的服务器(本地主机)上开发一个自托管的 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') 并且无法找到该文件。我知道它会因嵌套需求而变得混乱,但这确实适用于我的本地主机服务器。两台服务器都是 PHP5,我确保 php.ini 文件是相似的。默认情况下,localhost php.ini 已包含 include_path 注释。我什至已经用我的本地主机替换了在线 php.ini 文件。依然没有。我尝试过使用绝对路径,它们确实有效,但我的代码中有很多包含和要求,并且不想手动编写每条路径的代码。有什么见解吗?这是一个非常令人愤怒的问题,我希望有一个简单的解决方案。

谢谢!


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

4

3 回答 3

2

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

您可以通过将其添加到您的根 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 . '

于 2012-04-19T05:13:10.507 回答
1

我不能说我知道如何解决它,但这是我多次处理目录问题的方法:

首先是调用getcwd()你使用的文件require_once,看看你是否真的在你认为的位置。

二、尝试./fb/代替fb/

于 2012-04-19T04:53:30.200 回答
0

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

要不就require_once('/fb/login.php');

于 2012-04-19T04:51:21.637 回答