Fatal error: session_start(): Failed to initialize storage module: files (path: ) in /data/www/phpmyadmin/libraries/session.inc.php on line 83
或警告版本:
Warning: session_start(): SAFE MODE Restriction in effect. The script whose uid is 501 is not allowed to access /tmp owned by uid 0
在 **`session_start()` 之前** 呼叫 `session_save_path()`,指向專案專屬、可寫的目錄。
<?php
// 定義專屬 session 目錄 (建議放在專案目錄下,非公開目錄)
$sessSavePath = __DIR__ . '/../storage/sessions/';
// 確保目錄存在且可寫
if (!is_dir($sessSavePath)) {
mkdir($sessSavePath, 0777, true);
}
if (is_writable($sessSavePath)) {
session_save_path($sessSavePath);
} else {
die('Session 目錄不可寫: ' . $sessSavePath);
}
// 現在才啟動 session
session_start();
; php.ini session.save_handler = files session.save_path = "/var/lib/php/sessions" ; 建議專用目錄,非 /tmp ; 確保目錄權限 ; chown www:www /var/lib/php/sessions ; chmod 770 /var/lib/php/sessions
如原文遇到的 phpMyAdmin,修改 `libraries/session.inc.php` (或較新版 `libraries/common.inc.php`):
// 在 session_start() 之前插入
session_save_path("/data/www/session"); // 自定義可寫路徑
if (!isset($_COOKIE[$session_name])) {
session_save_path("/data/www/session");
$r = session_start();
// ... 錯誤處理
} else {
session_save_path("/data/www/session");
session_start();
}
# 1. 查看 PHP-FPM 執行用戶 ps aux | grep php-fpm # 假設為 www-data # 2. 檢查 session 目錄權限 ls -ld /var/lib/php/sessions # drwx-wx-wt 2 root root 4096 ... /tmp (權限 1777, sticky bit) # 應改為專屬目錄: mkdir -p /var/lib/php/sessions chown www-data:www-data /var/lib/php/sessions chmod 770 /var/lib/php/sessions # 3. 檢查 open_basedir (若啟用) # php.ini 或 php-fpm pool conf ; open_basedir = /var/www/:/tmp/:/var/lib/php/sessions/ # 必須包含 session 目錄