ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
まず最初に: 真のエラーをログで確認
500 Internal Server Error はブラウザ側には詳細が出ません。必ずサーバ側ログを見ます:
# Laravel 本体のログ
tail -f /var/www/myapp/storage/logs/laravel.log
# PHP-FPM の致命的エラー
sudo tail -f /var/log/php8.2-fpm.log
# Nginx エラーログ(リクエスト弾かれるとここ)
sudo tail -f /var/log/nginx/error.log
# Apache の場合
sudo tail -f /var/log/apache2/error.log
# システム全体
sudo journalctl -xe -u nginx -u php8.2-fpm
laravel.log に何も出ていない場合はLaravel に到達する前で死んでいる可能性が高く、PHP-FPM / Nginx 側のエラーを見ます。
原因 1: アップロードサイズ上限
最も多いのがファイルサイズ上限超過。複数の場所で制限がかかっています:
| 場所 | 設定 | 既定 | 推奨 |
|---|---|---|---|
| php.ini | upload_max_filesize | 2M | 20M〜 |
| php.ini | post_max_size | 8M | upload_max_filesize 以上 |
| php.ini | memory_limit | 128M | 256M〜 |
| php.ini | max_execution_time | 30 | 120 |
| Nginx | client_max_body_size | 1M | 20M〜 |
| Apache | LimitRequestBody | 無制限 | 必要に応じ |
# 現在値を確認
php -i | grep -E "upload_max_filesize|post_max_size|memory_limit"
# または PHP コードで
php.ini の修正
; /etc/php/8.2/fpm/php.ini
upload_max_filesize = 20M
post_max_size = 25M
memory_limit = 256M
max_execution_time = 120
max_input_time = 120
file_uploads = On# PHP-FPM 再起動
sudo systemctl restart php8.2-fpm
Nginx の修正
# /etc/nginx/sites-available/myapp
server {
listen 80;
server_name example.com;
client_max_body_size 25M; # ★ 追加
location / {
...
}
}sudo nginx -t
sudo systemctl reload nginx
原因 2: storage / public のパーミッション
Laravel は storage/ 配下にファイルを書き込みます。Web サーバユーザー(www-data / nginx)に書き込み権限が必要:
cd /var/www/myapp
# 所有者を Web サーバユーザーに
sudo chown -R www-data:www-data storage bootstrap/cache
# 書き込み権限
sudo chmod -R 775 storage bootstrap/cache
# シンボリックリンク作成
php artisan storage:link
# → public/storage → ../storage/app/public が作られる
# 確認
ls -l public/storage
# public/storage -> /var/www/myapp/storage/app/public
権限不足の場合 laravel.log に次のように出ます:
[2026-05-17 10:23:14] production.ERROR: file_put_contents(/var/www/myapp/storage/app/public/uploads/xxx.jpg): Failed to open stream: Permission denied
原因 3: storage:link 忘れ
ファイルは保存できているのにURL で開けない場合、storage:link 未実行が原因:
php artisan storage:link
# 既に存在エラーが出る場合
ls -l public/storage
# 壊れたリンクなら一度削除
rm public/storage
php artisan storage:link
原因 4: GD / Imagick 未インストール
Intervention Image などでresize / crop / 変換を行うと、GD か Imagick が必要です:
# 確認
php -m | grep -E "gd|imagick"
# Ubuntu/Debian
sudo apt install php8.2-gd php8.2-imagick
# RHEL/CentOS
sudo dnf install php-gd php-imagick
# 再起動
sudo systemctl restart php8.2-fpm
# 確認
php -r "var_dump(extension_loaded('gd'), extension_loaded('imagick'));"
未インストールだとログに:
Intervention\Image\Exception\NotSupportedException: Encoder format (jpeg) is not supported.
# または
Class "Imagick" not found
原因 5: validation で 422 ではなく 500 になっている
本来バリデーション失敗は 422 だが、コードの作りで 500 になっていることも:
file('image')->getClientOriginalExtension();
// → Call to a member function getClientOriginalExtension() on null
}
// ✅ OK: 必ず validate してから
public function store(Request $request)
{
$validated = $request->validate([
'image' => 'required|image|max:5120', // 5MB
]);
$path = $request->file('image')->store('uploads', 'public');
return response()->json(['path' => $path]);
}
原因 6: SELinux(CentOS / RHEL)
# storage/ への書き込みが SELinux にブロックされる
sudo setsebool -P httpd_unified 1
sudo chcon -R -t httpd_sys_rw_content_t /var/www/myapp/storage
sudo chcon -R -t httpd_sys_rw_content_t /var/www/myapp/bootstrap/cache
# 一時的に確認
sudo setenforce 0 # Permissive
# ↑ で直るなら SELinux 起因
切り分けチェックリスト
storage/logs/laravel.log確認- PHP-FPM / Nginx エラーログ確認
- ファイルサイズが上限内か(5MB なら 5242880 byte)
php -i | grep uploadls -l storage/ public/storageで権限と symlinkphp -m | grep gdphp artisan storage:link実行- SELinux / AppArmor 確認
- ディスク容量
df -h - inode 残量
df -i
典型的な正しい実装
validate([
'image' => 'required|image|mimes:jpeg,png,jpg,webp|max:5120',
]);
$file = $request->file('image');
$filename = Str::uuid() . '.' . $file->getClientOriginalExtension();
// リサイズして保存
$img = Image::make($file)->resize(1200, null, function ($c) {
$c->aspectRatio();
$c->upsize();
});
Storage::disk('public')->put("uploads/{$filename}", (string) $img->encode());
return response()->json([
'url' => Storage::url("uploads/{$filename}"),
]);
}
}
FAQ
Q: laravel.log に何も出ない
A: ① 権限不足で laravel.log 自体が書けない、② エラーが Laravel に到達する前(Nginx で弾かれ)、③ APP_DEBUG=false + コード内 catch で握り潰し。
Q: ローカルでは動くが本番で 500
A: 本番の php.ini / Nginx 設定値、GD/Imagick 有無、storage 権限を本番側で再確認。php artisan config:clear も忘れずに。
Q: 大きい画像で OOM Killer に殺される
A: memory_limit を 512M に。または resize 前に画像サイズチェック・サーバ側で imagick の policy.xml を緩める。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost'
- Add [~] to fillable property to allow mass assignment on [App\~].
- PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in ~
- Changing columns for table "~" requires Doctrine DBAL; install "doctrine/dbal"
- MethodNotAllowedHttpException No message
- Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found
- production.ERROR: No application encryption key has been specified.
- Dotenv values containing spaces must be surrounded by quotes.
- Laravel \ Socialite \ Two \ InvalidStateException
- The page has expired due to inactivity. Please refresh and try again.
- Failed to clone https://github.com/symfony/thanks.git via https, ssh protocol
- Illegal offset type
- Cannot access protected property Illuminate\Http\Request::$...
- Emitted value instead of an instance of Error
- 画像保存時にInternal Server Error
- Failed to authenticate on SMTP server with username ...
- PostTooLargeException
- Database hosts array is empty.
- Invalid request (Unsupported SSL request)
- does not comply with psr-4 autoloading standard. Skipping.
- MySQLのSTR_TO_DATE関数を使用するとnullが返却される問題
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?