【PHP】ファイルアップロードにおけるpermission設定について
この記事ではCentOS Linux 7にインストールしたPHP 7.1.29を使っています。
Server version: Apache/2.4.6 (CentOS)
はじめに
画像ファイルをアップロードしようとしたところ、permissionエラーが発生。
原因とエラー解決までを纏めました。
自分の置かれた状況
画像アップロード
<form method="POST" action="img_save.php" enctype="multipart/form-data">
<input type="file" name="img" accept="image/*">
<input type="submit">
</form>
画像をimagesディレクトリに保存
$img_name = $_FILES['img']['name'];
//画像を保存
move_uploaded_file($_FILES['img']['tmp_name'], './images/' . $img_name);
エラー発生
Warning: move_uploaded_file(./images/$img_name): failed to open stream: Permission denied
原因
アップロードのディレクトリ(images)に書き込み権限が与えられていなかった為でした。
$ ls -l
-rw-rw-r-- ハードリンク数 所有者とグループ ファイルサイズ タイムスタンプ images
-rw-rw-r--
は下記の状態となっています。
Owner ・・・読み取り・書き込み
Group ・・・読み取り・書き込み
Other ・・・読み取り
解決策
「Apache」はPermissionのユーザー分類としては、「Other」に分類されます。
Apacheの書き込みを許可を与えるために、権限を変更を行いました。
$ chmod 666 images
-rw-rw-rw-
Owner ・・・読み取り・書き込み
Group ・・・読み取り・書き込み
Other ・・・読み取り・書き込み
おわりに
画像アップロード処理エラーで二日ぐらい頭を抱えていました。
分かりにくい箇所あるかと思いますが、誰かの役に立てたら嬉しいです。
これから引き続き投稿していきます。