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');
我正在将 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');