LaravelでlocalStorageにファイル保存したのに、デフォルト権限にいじめられた話

要約

この記事では、Laravelでローカルストレージにファイルを保存する際に直面した権限設定の問題とその解決方法について説明します。特にumask設定を使用して、ファイルとディレクトリのデフォルトパーミッションを適切に設定する方法を紹介します。

背景

Laravelでメッセージ機能を開発しているときに、画像ファイルを保存して画面に表示させようとしたところ、画像が正常に表示されずファイルが壊れているように見えました。この問題の原因は、ファイルのパーミッション設定にありました。

やりたいこと

画像ファイルを正しく表示するために、適切なパーミッション設定を行うことです。

解決策

以下の3つの方法が考えられますが、今回はumask設定を使用した方法を紹介します。

  1. fileSystem.php に設定を書き加える。

  2. Umaskで設定してあげる。

  3. ファイル保存処理後にchmodメソッドを記載してあげる。

今回は、2.Umaskで権限を設定しました。

Sample Code

フォームの設定
まず、ファイルアップロード用のフォームを用意します。

sampleForm.blade.php

<form action="{{ route('file.upload') }}" method="post" enctype="multipart/form-data">
    @csrf
    <input type="file" name="file">
    <button type="submit">Upload</button>
</form>

ルート設定
次に、ファイルアップロードのルートを設定します。

web.php

Route::post('/file-upload', [App\Http\Controllers\FileController::class, 'upload'])->name('file.upload');

コントローラーの設定
ファイルをアップロードするコントローラーを作成します。

SampleFileController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SampleFileController extends Controller
{
    public function upload(Request $request)
    {
        // umaskを設定
        umask(0002);

        $path = $request->file('file')->store('public/requirements');

        return back()->with('success', 'File uploaded successfully. Path: ' . $path);
    }
}

結果

上記の設定で新しく作成されるファイルとディレクトリのデフォルトパーミッションは以下の通りです。

・新しく作成されるファイルのデフォルトパーミッション: 664 (rw-rw-r--)
・新しく作成されるディレクトリのデフォルトパーミッション: 775 (rwxrwxr-x)

umask計算方法
umask(0002) を設定することで、ファイルのデフォルトパーミッションが 0666 - 0002 = 0664 になり、ディレクトリは 0777 - 0002 = 0775 になります。

まとめ

Laravelでローカルストレージにファイルを保存する際の権限設定に苦しんだ経験を元に、umaskを使用してパーミッションを適切に設定する方法を紹介しました。これで新しく作成されるファイルとディレクトリのパーミッションを自由自在に操ることができます。最後まで読んでくれてありがとうございます。

これであなたもumaskマスターです!


この記事が気に入ったらサポートをしてみませんか?