![](/img/trans.png)
[英]PHP Warning: require_once failed to open stream: No such file or directory in
[英]PHP Warning: require_once: failed to open stream: No such file or directory in
我所有的PHP腳本都有一個通用文件default.php
。
該文件位於我的應用程序的根文件夾中。 它定義了一些常量,變量,函數和錯誤處理。 它還會加載配置文件。
在最后一次合並到生產服務器中之后,我看到了一個奇怪的行為。
$sudo -u apache php /var/www/html/PDR/src/php/pages/menu-tiles.php
PHP Warning: require_once(../../../default.php): failed to open stream: No such file or directory in /var/www/html/PDR/src/php/pages/menu-tiles.php on line 18
PHP Fatal error: require_once(): Failed opening required '../../../default.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/PDR/src/php/pages/menu-tiles.php on line 18
但是文件在那里:
ls -la /var/www/html/PDR/src/php/pages/../../../default.php
-rw-r--r-- 1 apache apache 4554 1. Jun 00:44 /var/www/html/PDR/src/php/pages/../../../default.php
apache用戶還具有讀取權限。
PHP為什么會告訴我, No such file
?
TL; DR:如果所需文件中發生異常/錯誤,則可能引發錯誤。
實際上,該錯誤消息是完全誤導的。
PHP找到了該文件。 PHP編譯了文件。 PHP執行了該文件。
但是default.php還會加載另一個文件來查找類:
$List_of_branch_objects = branch::read_branches_from_database();
該類將加載另一個類以查詢數據庫。
$result = database_wrapper::instance()->run($sql_query);
database_wrapper
使用配置(請參見下文)。 但是$config['database_host']
設置不正確。 因此,數據庫連接失敗。 但是PHP給我的唯一錯誤是No such file
。
public static function instance() {
if (self::$instance === null) {
self::$instance = new self;
}
return self::$instance;
}
function __construct() {
global $config;
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
PDO::ATTR_EMULATE_PREPARES => FALSE,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);
$this->database_host = $config['database_host'];
$this->database_name = $config['database_name'];
$this->database_port = $config['database_port'];
$this->database_user_name = $config['database_user'];
$this->database_password = $config['database_password'];
if (!empty($this->database_port) and 3306 != $this->database_port) {
$port_string = 'port=' . $this->database_port . ';';
} else {
$port_string = '';
}
$dsn = 'mysql:host=' . $this->database_host . ';' . $port_string . 'dbname=' . $this->database_name . ';charset=utf8';
$this->pdo = new PDO($dsn, $this->database_user_name, $this->database_password, $options);
}
對於我來說,找到錯誤的來源是一場噩夢,因為它在生產服務器上。 在具有完全相同的PHP和apache的完全相同的計算機上的測試文件夾中,它運行得非常好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.