0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

先日、Laravel13 + PHP8.4環境でBlade表示時に500エラーが発生し、最終的にLaravel12 + PHP8.3環境へ作り直した。

しかし後から振り返ると、
「本当にLaravel13とPHP8.4の組み合わせが原因だったのか?」
という疑問が出てきた。

結論から言うと、犯人は私が幾度となく遭遇してきた権限問題だった可能性が高い。

発生していたエラー

エラー内容は以下。

ErrorException

tempnam(): file created in the system's temporary directory

スタックトレースには、

Filesystem.php
BladeCompiler.php
CompilerEngine.php
View.php

が含まれていた。

Blade描画時のみ発生し、

return 'Laravel OK';

なら正常表示された。

当時の判断

当時は以下を確認した。

php artisan about
php artisan migrate
php artisan route:list

すべて正常。

さらに、

php -r "echo sys_get_temp_dir();"

結果

/tmp
php -r "var_dump(is_writable('/tmp'));"

結果

bool(true)

「Laravel13の不具合かもしれない」と考えた理由

さらに途中で、

Your Composer dependencies require a PHP version ">= 8.4.1".
You are running 8.3.31.

というPHPバージョン関連のエラーにも遭遇した。

そのため、

  • Laravel13
  • PHP8.4
  • Docker

の組み合わせ周辺を疑った。

でも待てよ?

ここで思い出した。

実は私は過去にも、Laravelで何度も似たようなエラーを経験している。

原因は、「所有権(owner)」のズレだった。

過去に発生したエラー

フリマアプリ開発中、以下のエラーが発生した。

Please provide a valid cache path.
The stream or file could not be opened
Failed to open stream: Permission denied

原因は、

storage
bootstrap/cache

の所有者が、

******(私のuser名)

になっており、Laravelを実行している

www-data

が書き込めなくなっていたことだった。

解決した方法

当時は以下で解決した。

docker compose exec php chown -R www-data:www-data /var/www/storage

docker compose exec php chown -R www-data:www-data /var/www/bootstrap/cache

さらに、

docker compose exec php chmod -R 775 /var/www/storage

docker compose exec php chmod -R 775 /var/www/bootstrap/cache

を実行。

その後、

docker compose exec php php artisan optimize:clear

で正常動作した。

今回も同じだった可能性

今回の500エラーは、

BladeCompiler
Filesystem

周辺で発生していた。

つまり、Bladeコンパイル結果を書き込む

storage/framework/views

付近の問題だった可能性がある。

さらに現在のテンプレート環境では、DockerのUID/GIDを合わせる設定を導入している。
その結果、過去に頻発していた権限エラーは発生していない。

結論

Laravel13 + PHP8.4が原因だった証拠は見つかっていない。

むしろ、これまで何度も遭遇してきた「所有権ズレによる権限問題」だった可能性の方が高そうだ。

とはいえ、当時はまだ開発開始前。
コードもデータも存在しなかったため、作り直しを選択した判断自体は間違っていなかったと思う。

学んだこと

エラーが発生したとき、新しい技術やバージョンを疑いたくなる。

でも実際は、「前にも踏んだことがある地雷」だったりする。

次に同じ症状が出たら、LaravelやPHPのバージョンを疑う前に、まず所有者と権限を確認しようと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?