当PHP无法找到特定文件(包含函数)时,还原到其他文件

当PHP无法找到特定文件(包含函数)时,还原到其他文件,php,warnings,syntax-error,Php,Warnings,Syntax Error,对不起,你们这些高级的家伙,我实际上是在自学一些PHP,所以这似乎是一个初学者的问题 我正在使用测试服务器,然后上传到远程服务器。index.php文件位于本地pc上的“C:\XAMPP\htdocs\php\u站点”和远程服务器上的“home/www/myname.atwebpages.com/”中。现在,我尝试运行的代码只是一个简单的: define ('ROOT', $_SERVER['DOCUMENT_ROOT']); include ROOT."menu/menu.php"; 此代码

对不起,你们这些高级的家伙,我实际上是在自学一些PHP,所以这似乎是一个初学者的问题

我正在使用测试服务器,然后上传到远程服务器。index.php文件位于本地pc上的“C:\XAMPP\htdocs\php\u站点”和远程服务器上的“home/www/myname.atwebpages.com/”中。现在,我尝试运行的代码只是一个简单的:

define ('ROOT', $_SERVER['DOCUMENT_ROOT']);
include ROOT."menu/menu.php";
此代码适用于远程服务器。但是,在我的本地计算机上尝试时,会显示以下错误:

Warning: include(C:/XAMPP/htdocs/menu/menu.php): failed to open stream: No such file or directory in C:\XAMPP\htdocs\php_site\index.php on line 21

显然,它没有在php_站点文件夹中查找。相反,它需要在htdocs目录中找到一个菜单文件夹,但它不在那里。菜单文件夹位于站点文件夹php_site内。如果我有机会在本地机器上运行代码,那么它就不再在远程服务器上运行。我对如何避开这个问题有点困惑

我认为$\u服务器['DOCUMENT\u ROOT']是由apache定义的,因此您需要更改那里的配置。或者,定义相对于文件实际放置位置的根常量,因此如果执行以下操作:

define ('ROOT', dirname(__FILE__));

将其放入index.php所在文件夹中的常量文件中。

远程和本地计算机上的文档根目录不同。在本地计算机上,文档根目录是
htdocs
目录,而
php\u站点
文件夹只是一个子文件夹,因此路径错误

我建议将
ROOT
目录设置为索引页的相对目录,或者在PHP站点的根目录中设置一个常量文件,该文件将根目录定义为它所在的目录(它将位于本地机器上的
PHP\u站点
目录中,与索引页相同的目录)<代码>定义('ROOT',目录名(_文件))在这种情况下可以工作


另一种方法是使用try-catch来捕获include语句的失败,并尝试使用另一个目录,可能是使用
define('ROOT',$\u-SERVER['DOCUMENT\u-ROOT')
首先,如果失败,尝试使用
define('ROOT',$\u SERVER['DOCUMENT\u ROOT'].'php\u site/')相反。

作为旁白,似乎没有必要将超级全局变量重新分配为常数,您可以直接使用全局变量并保存一些内存。如果我在后面,您是说在include函数中直接指向根目录,而不是定义一个“root”变量然后使用它。我定义根的唯一原因是因为我在文档中有两个根的定义,一个用于本地服务器,另一个用于远程服务器。我只是注释掉了一个没有被使用的,每当我想在不上传到远程服务器的情况下进行测试时,这会变得很烦人。我确实尝试进入Apache配置文件来更改它,但如果我在另一个站点上工作,这会产生问题(或者我必须返回并不断更改配置文件中的目录)。不管怎样,我发现这都不是一个很好的解决方法。你能详细说明如何使用dirname()?我的意思是,我应该在“()”中放哪条路径?谢谢,我知道了!作为参考,我把你的代码放在index.php文件中,并简单地用“./index.php”替换“u文件”.现在可以在远程服务器和测试服务器上工作。键入常量时出错,已编辑。如果计划在您的计算机上的多个站点上工作,则可以创建每个具有不同目录根的虚拟主机。