【PHP / Laravel】Storage の基本操作まとめ

## 対象読者

- Laravel の使用を考えている方
- Storageクラスについて基礎を抑えたい方
- Storageクラスの使用方法をざっくりでいいから知りたい方

## 環境

- Laravel 6系

## 目次
- [対象読者](#対象読者)
- [環境](#環境)
- [目次](#目次)
- [Storageクラスとは](#storageクラスとは)
- [storageクラスの設定ファイル](#storageクラスの設定ファイル)
- [ディスクとは](#ディスクとは)
    - [disk](#diskメソッド)
    - [シンボリックリンクの作成](#シンボリックリンクの作成)
- [Storageクラスの使用](#storageクラスの使用)
- [ファイルの読み込み](#ファイルの読み込み)
    - [get](#get)
- [ファイルの保存](#ファイルの保存)
    - [put](#put)
    - [putFile](#putfile)
    - [putFileAs](#putfileas)
- [ファイルへ書き込み](#ファイルへ書き込み)
    - [prepend](#prepend)
    - [append](#append)
- [ファイルのコピー・移動・削除](#ファイルのコピー移動削除)
    - [copy](#copy)
    - [move](#move)
    - [delete](#delete)
- [ファイルの情報](#ファイルの情報)
    - [url](#url)
- [ファイルの存在](#ファイルの存在)
    - [exists](#exists)
- [ディレクトリの管理](#ディレクトリの管理)
    - [files](#files)
    - [allFiles](#allfiles)
    - [directories](#directories)
- [参考文献](#参考文献)


## Storageクラスとは

シンプルにそして簡単にファイルを操作することができる機能で
`Laravel` には `Storage` というものが備わっています。
具体的にはファイルを読み込んだり保存したりすることができます。

## Storageクラスの設定ファイル

Storageクラスで使用されるディスクの内容は　`configs/filesystem.php` に記述されています。
ディスクの追加をしたり設定を確認したりできます。
また、デフォルトのディスクが `local` になっていることが確認できます。

## ディスクとは

保存場所のことです。

以下のような保存場所があります。

| ディスク名 | 役割 |
|:-:|:-|
| local  |  非公開。<br>デフォルトで選択されているディスク。<br> **/Storage/app** 内にアクセス。 |
| public  | 公開。<br>デフォルトでは **/Storage/app/public** 内にアクセス。  |
| s3  |  AWSのストレージ。<br>ただしドライバ用パッケージが必要。 |


### disk

ディスクを選択することができるメソッドです。

```php
# ディスクの指定方法(ディレク名のところに 'local' や 'public' などを記述する)
Storage::disk(ディスク名);
```

以下の例だと `/storage/app/public/sample.txt` にアクセスします。

```php
Storage::disk('public')->get('sample.txt');
```

シンボリックリンクを作成することで外部からもアクセスが可能になります。

### シンボリックリンクの作成

```shell
php artisan storage:link
```


## Storageクラスの使用

以下のコードで Storage の機能を使用することができるようになります。

```php
use Illuminate\Support\Facades\Storage;
```

## ファイルの読み込み

### get

デフォルトの設定だと `/storage/app` 内のファイルを読み込みます。
以下の例だと `/storage/app/sample.txt` を読み込み、変数に格納しています。

```php:/storage/app/sample.txt
$file = Storage::get('sample.txt');
```

## ファイルの保存

### put

`$text` を `sample.txt` に保存する

```php
Storage::put('sample.txt', $text);
```

### putFile

指定したディレクトリにファイルを保存することができます。
ファイル名は自動的につけられます。

**第1引数にディレクトリのパス、第２引数にファイルインスタンス。**

```php
Storage::putFile('path', $file);
```

### putFileAs

指定したディレクトリにファイルを指定した名前で保存することができます。

**第1引数にディレクトリのパス、第２引数にファイルインスタンス、第3引数にファイル名。**

```php
Storage::putFileAs('path', $file, 'sample.txt');
```

## ファイルへ書き込み

### prepend 

ファイルの先頭に `$text` 追加します。


```php
Storage::prepend('sample.txt', $text);
```
### append

ファイルの末尾に `$text` 追加します。

```php
Storage::append('sample.txt', $text);
```

## ファイルのコピー・移動・削除

### copy

`sample.txt` の情報を `copy.txt` にコピーします。

```php
Storage::copy('sample.txt', 'copy.txt');
```

### move

`sample.txt` を `sample/sample.txt` に移動します。

```php
Storage::move('sample.txt', 'sample/sample.txt');
```

### delete

`sample.txt` を削除します。

```php
Storage::delete('sample.txt');
```

## ファイルの情報

### url

ファイルの相対パスを取得します。

```php
Storage::url('sample.txt');
```

## ファイルの存在

### exists

`sample.txt` があるかチェックします。

```php
Storage::exists('sample.txt');
```

## ディレクトリの管理


### files

指定したディレクトリ内にあるファイルのパスを配列で返します。

```php
Storage::files('path');
```

### allFiles

サブディレクトリを含め全ファイルのパスを配列で返します。

```php
Storage::allFiles('path');
```

### directories

指定したディレクトリ内の全ディレクトリのパスを配列で返します。

```php
Storage::directories('path');
```

## 参考文献

- [Laravel 6.x ファイルストレージ](https://readouble.com/laravel/6.x/ja/filesystem.html)
- [LaravelでStorageを使ったファイルおよびディレクトリの操作をまとめてみた](https://qiita.com/t1k2a/items/50081988363cf2fa1bca)
- [PHPフレームワーク Laravel実践開発](https://www.amazon.co.jp/dp/B07WW45Q1X/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)