require_once in PHP 在新服务器上给出错误,但在原始服务器上没有

require_once in PHP giving errors on new server, but not on original

我正在将 PHP 网站从共享托管服务器移动到 DigitalOcean 服务器。我遇到了一个我不确定如何调试的问题。

有一个页面带有 action=2/login.php 的登录表单。此表格位于 /var/www/html/calendar.php(它是 Ubuntu 14.04 DO 液滴)。提交表单时,有一个500 Internal Server Error。我发现了有问题的错误,但我不确定如何调试它(因为它 运行 在另一台服务器上没问题)。

/var/www/html/2/login.php

<?php
require_once('../db_connect.php');
...

db_connect.php 位于 /var/www/html/db_connect.php

当我 $php 2/login.php 时出现以下错误:

login_error.txt

PHP Warning:  require_once(../db_connect.php): failed to open stream: No such file or directory in /var/www/html/2/login.php on line 4
PHP Fatal error:  require_once(): Failed opening required '../db_connect.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/html/2/login.php on line 4

当我 运行 $php login.php 在目录 /var/www/html/2 中时它工作正常(我想这是有道理的,因为 ../db_connect.php 是一个相对路径)。

我想知道为什么它在其他服务器而不是 DO 服务器上运行?

php.ini 是相同的(这可能是个问题),但在服务器 #1 (Verve) 上,它是共享主机,所以我们的根是 /home/[username]/public_html 并且在新服务器上是 /var/www/html.

如有必要,我可以 link 到有问题的实时站点(但我不想这样做)。 /var/www/html/2/login.php/var/www/html/calendar.php 脚本完全相同,虽然我知道这肯定会在以后引起问题,因为 Web 应用程序根目录的绝对路径不同,但我不知道会怎样导致这个特定问题。

我也看过这个非常相似的问题:PHP require_once resetting to current working directory。但是,这段代码可以在另一台服务器上运行,而不是在这里运行,所以我认为不仅仅是缺少相对文件路径,我更愿意找到解释为什么脚本不工作的解决方案而不是修补脚本,因为我很确定我也必须更改使用 require_once('../db_connect.php') 的所有其他脚本。

感谢您的帮助!

您尝试使用 __DIR__ 了吗?

require_once(__DIR__ . '../db_connect.php');