系列文章:
1.Ubuntu 24.04 安裝 chcweb 專案的過程記錄
2.Ubuntu 24.04 安裝 laravel 5.7 的過程記錄
3.laravel 5.7 初始相關設定與注意事項
4.想修改 chcweb 出現的問題解決集
問題一: UnexpectedValueException : The stream or file "/home/webadmin/html/chcweb/storage/logs/laravel-2026-04-11.log" could not be opened in append mode: failed to open stream: Permission denied
解決方法:
錯誤意思是 Laravel 沒辦法寫入 log 檔,通常跟 目錄權限 有關。
1.檢查檔案與目錄權限
Laravel 日誌檔案路徑:
/home/webadmin/html/chcweb/storage/logs/laravel-2026-04-16.log
需要 Web 伺服器用戶能夠寫入。通常 Linux 系統 Web 伺服器用戶是:
-
Debian/Ubuntu:
www-data -
CentOS/Fedora:
apache或nginx
檢查目錄權限:
ls -l /home/webadmin/html/chcweb/storage/logs/2.設定正確的擁有者
假設你的 Web 伺服器用戶是
www-data:小技巧:sudo chown -R www-data:www-data /home/webadmin/html/chcweb/storage這樣 Web 伺服器就能寫入。3.設定正確的權限
Laravel 需要storage和bootstrap/cache可寫:sudo chmod -R 775 /home/webadmin/html/chcweb/storage
sudo chmod -R 775 /home/webadmin/html/chcweb/bootstrap/cache
775:擁有者與群組可讀寫執行,其他人可讀與執行- 如果 775 仍然不行,可以暫時用 777 測試,但不建議長期使用(安全性較低)
4.清除快取(可選)
Laravel 有時會快取檔案路徑,建議清除:
php artisan config:clear
php artisan cache:clear然後再重新載入網站看看是否正常。
Laravel 的storage和bootstrap/cache目錄必須可寫,這是最常見的「Permission denied」原因。
一行命令,直接安全地修復 Laravel 所有目錄的權限和擁有者,幾乎可以立即解決這種錯誤:
sudo chown -R www-data:www-data /home/webadmin/html/chcweb && sudo find /home/webadmin/html/chcweb/storage -type d -exec chmod 775 {} \; && sudo find /home/webadmin/html/chcweb/storage -type f -exec chmod 664 {} \; && sudo find /home/webadmin/html/chcweb/bootstrap/cache -type d -exec chmod 775 {} \; && sudo find /home/webadmin/html/chcweb/bootstrap/cache -type f -exec chmod 664 {} \;
問題二:要在資料表setups 新增遺個欄位 bg_image
1.建立 Migration
2. 修改 Migration 檔案
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddBgImageToSetupsTable extends Migration {
public function up() {
Schema::table('setups', function (Blueprint $table) {
$table->string('bg_image', 255)->nullable()->after('bg_color')->comment('背景圖片');
});
public function down() {
Schema::table('setups', function (Blueprint $table) {
$table->dropColumn('bg_image');
});
}
}
3.執行 Migration
問題三: UnexpectedValueException : The stream or file "/home/webadmin/html/chcweb/storage/logs/laravel-2026-04-17.log" could not be opened in append mode: failed to open stream: Permission denied
問題解析:這個錯誤是 Laravel 在寫 log 檔案時發生的權限問題,完全跟你新增欄位無關,但它會阻止 migration 或任何程式寫入日誌。解決方式是調整 storage 與 bootstrap/cache 的權限。
1.確認目錄
Laravel 需要以下目錄可讀寫:
-
storage -
storage/logs -
storage/framework -
bootstrap/cache
2.修改權限(Linux)
假設你的專案目錄是 /home/webadmin/html/chcweb:
cd /home/webadmin/html/chcweb
# 設定 owner 為 web server 使用者,通常是 www-data (Ubuntu/Debian) 或 apache/nginx
sudo chown -R webadmin:www-data storage bootstrap/cache
# 設定目錄可寫權限
sudo chmod -R 775 storage bootstrap/cache
#注意:如果你的 web server 使用者不是www-data,請改成實際使用者。3.Laravel 快速清理快取(建議做)
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear4. 測試
重新執行 migration:
php artisan migrate如果權限設定正確,就不會再出現
Permission denied。💡小技巧:
在開發環境中,設定storage和bootstrap/cache777(所有人可寫)雖然方便,但生產環境建議限制為 775 或更安全的方式,以免安全風險。
6.一行指令
既改權限,又保證 Laravel 的 storage 與 bootstrap/cache 可以被 web server 寫入,同時保持相對安全(775)
問題四: ErrorException : file_put_contents(/home/webadmin/html/chcweb/database/migrations/2026_04_18_132842_add_bg_image_to_setups_table.php): failed to open stream: No such file or directory
問題解析:
這個錯誤訊息告訴我們 Laravel 無法寫入 migration 檔案,因為目標目錄不存在或沒有權限。重點在這兩件事:
-
目錄
database/migrations是否存在 - 你的使用者是否有寫入權限
問題解答:
1.確認目錄存在
執行:
ls -ld /home/webadmin/html/chcweb/database/migrations
-
如果出現
No such file or directory,表示這個目錄真的不存在,需要建立:
2.確認權限
Laravel 需要該目錄可寫入:
sudo chown -R webadmin:www-data /home/webadmin/html/chcweb/database/migrations
sudo chmod -R 775 /home/webadmin/html/chcweb/database/migrations
替換
webadmin和www-data為你的實際使用者與 web server 群組。
3. 再次建立 migration
php artisan make:migration add_bg_image_to_setups_table --table=setups
這次 Laravel 就能成功在 database/migrations 產生檔案了。
💡 小提醒:
-
storage、bootstrap/cache、database/migrations都需要對 Laravel 可寫。 -
開發環境可以用 775,生產環境更安全的做法是限制非必要使用者寫入。
4. 一次性指令:
把 Laravel 專案的 storage、bootstrap/cache、database/migrations 全部權限一次調整好。
sudo mkdir -p /home/webadmin/html/chcweb/database/migrations && sudo chown -R webadmin:www-data /home/webadmin/html/chcweb/storage /home/webadmin/html/chcweb/bootstrap/cache /home/webadmin/html/chcweb/database/migrations && sudo chmod -R 775 /home/webadmin/html/chcweb/storage /home/webadmin/html/chcweb/bootstrap/cache /home/webadmin/html/chcweb/database/migrations


















