require once - require_once在PHP给错误的新服务器,但不是原来的


require once - 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
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

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

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

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

如果有必要,我可以链接到正在讨论的活动站点(但不希望这样做)。/var/www/html/2/login.php/var/www/html/calendar.php脚本是完全相同的,虽然我知道这肯定会导致以后的问题,因为到web应用程序的根的绝对路径是不同的,我不知道是什么会导致这个特定的问题。

我也看了这个问题,这是非常相似的:PHP require_once重置到当前工作目录。然而,这段代码在其他服务器上工作,而不是在这里,所以我认为有一些东西不仅仅是缺乏相对文件路径,我更愿意找到解决方案,解释为什么脚本不工作,而不是修补脚本,因为我很确定我必须改变每一个使用require_once('../db_connect.php')的其他脚本。

谢谢你的帮助!

您试过使用__DIR__吗?

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