对不起你们这些高级家伙,我实际上正在自学一些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:XAMPPhtdocsphp_siteindex.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/');
。