0

对不起各位高手,我实际上是在自学一些 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 内。如果我有机会在本地机器上运行代码,它就不再在远程服务器上运行。我对如何解决这个问题有点困惑。

4

2 回答 2

0

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

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

将它放在与 index.php 相同的文件夹中的常量文件中。

于 2013-08-04T20:27:37.663 回答
0

您在远程机器和本地机器上的文档根目录是不同的。在您的本地计算机上,您的文档根目录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/');

于 2013-08-04T20:32:29.940 回答