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

PHP中的相对路径在服务器上不起作用,php,path,include,require,Php,Path,Include,Require,背景资料: 我一直在自己的服务器(localhost)上开发一个自托管的Facebook应用程序,一切正常。最近,我把我的文件上传到我的共享托管在线服务器(hostgator),突然出现了一个奇怪的bug 我的require_once()函数似乎忽略了hostgator服务器上的相对路径。例如,在index.php中,我有require_once('fb/login.php')。这会引发一个错误,说明找不到example.com/login.php上的文件。为什么require()忽略路径的fb

背景资料: 我一直在自己的服务器(localhost)上开发一个自托管的Facebook应用程序,一切正常。最近,我把我的文件上传到我的共享托管在线服务器(hostgator),突然出现了一个奇怪的bug

我的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'),无法找到该文件。我知道嵌套的requires会让它变得混乱,但这在我的localhost服务器上确实有效。 这两个服务器都是PHP5,我已经确保php.ini文件是相似的。默认情况下,localhost php.ini已注释include_path。我甚至用localhost文件替换了在线php.ini文件。还是没什么。 我尝试过使用绝对路径,它们确实有效,但我的代码中有许多包含和要求,不想手工编写每一条路径。有什么见解吗?这是一个非常令人恼火的问题,我希望有一个简单的解决办法

谢谢大家!



我做了大量的研究,最终使用$_SERVER['DOCUMENT_ROOT'.'fb/login.php'作为我所有需求和包含的路径。修复了我所有的问题,谢天谢地,为什么不试试
require_一次('../fb/login.php')而不是更改php.ini文件


或者只需
require_一次('/fb/login.php')

我不能说我知道如何解决它,但以下是我在目录问题上做过的几次:

第一件事是在您使用的文件中调用
require\u一次
getcwd()


第二,尝试
/fb/
而不是
fb/

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

可以通过将以下内容添加到root index.php文件中来实现:

define('DOCROOT', realpath(dirname(__FILE__)).'/');
然后,只需检查所有
require
语句并首先添加DOCROOT:

require_once('fb/login.php');
变成:

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

您甚至可以通过将
require\u替换一次(“
替换为
require\u一次(DOCROOT)。

发生了一些非常奇怪的事情。当我添加echo getcwd()时在我的index.php顶部,它加载了所有内容,但仍然抛出了一个错误,即www.example.com/login.php丢失。非常奇怪。当我添加getcwd()时,它不起作用。好吧,这太奇怪了。如果我需要ROOT。“fb/login.php”;它不起作用,但是如果我首先回显ROOT。“fb/login.php”;然后需要它,它工作正常。发生了什么事?好吧,这太奇怪了。如果我将ROOT设置为dirname(FILE)并要求ROOT。“fb/login.php”;它不工作,但如果我首先回显ROOT。“fb/login.php”;然后需要它,它工作正常。发生了什么事?这确实很奇怪。当你说它不工作时,你的意思是它什么也不做,还是它显示了一些错误消息?如果它没有显示错误消息,请尝试使用
error_reporting(E|ALL | E|u STRICT)更改报告级别
。我做了大量的研究,最终使用了$\u SERVER['DOCUMENT\u ROOT']。'fb/login.php'作为我所有需求和包含的路径。修复了我所有的问题,感谢上帝。