当PHP找不到特定文件(include函数)时,还原到不同的文件


Reverting to a different file when PHP fails to find a specific file (include function)

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

我使用的是测试服务器,然后上传到远程服务器。index.php文件位于我本地电脑上的"C:''XAMPP''htdocs''php_site"和远程服务器上的"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_site文件夹中查找的。相反,在htdocs目录中找到一个菜单文件夹是很困难的,但它不在那里。菜单文件夹位于站点文件夹php_site中。如果我有机会绕过代码在本地机器上工作,它将不再在远程服务器上工作。对于如何解决这个问题,我有点困惑。

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

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

将其放在与index.php.

相同文件夹的常量文件中

远程机器和本地机器上的文档根目录不同。在本地机器上,文档根htdocs目录,而php_site文件夹只是一个子文件夹,因此路径是错误的。

我建议将ROOT目录作为索引页的相对目录,或者在PHP站点的根目录中有一个常量文件,该文件将根目录定义为它所在的目录(它将位于本地计算机上的php_site目录中,与索引页相同)。define ('ROOT', dirname(__FILE));将在这种情况下工作。

另一个想法是使用try-catch来捕获include语句的失败,并尝试尝试另一个目录,可能先使用define ('ROOT', $_SERVER['DOCUMENT_ROOT']);,如果失败,则尝试使用define ('ROOT', $_SERVER['DOCUMENT_ROOT'] . 'php_site/');