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


Relative paths in PHP not working on server

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

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

谢谢!


好吧,我做了大量的研究,最终使用了_SERVER美元['DOCUMENT_ROOT']。FB/登录.php"作为我所有要求和包含的路径。解决了我所有的问题,感谢上帝

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

您可以通过将其添加到根索引.php文件中来做到这一点:

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

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

require_once('fb/login.php');

成为:

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

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

我不能说我知道如何解决它,但这是我多次对目录问题所做的:

第一件事是在你使用的文件中调用getcwd() require_once,看看你是否真的在你认为你所在的位置。

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

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

或者只是require_once('/fb/login.php');