注意:この記事ではセキュリティに関する変更を加える記事になっております。この記事を元に発生した問題や損害に対しては、当方一切の責任を負いませんので、コマンドなどを実行する場合は必ず自己の責任が及ぶ範囲内でお願いいたします。
この記事で出てくる用語
file_put_contents() → PHPを実行した際に、指定されたパスのファイルに内容を加える。
file_get_contents() → PHPを実行した際に、指定されたパスのファイルの内容を呼び出す。
Permission → ディレクトリやファイルを操作する時の権限。(日本語で再帰的)
先日、PHPの学習をしている時に、file_put_contents()とfile_get_contents()を使用する場面があったのですが、そこでハマってしまったので解決方法を残しておきます。
結論から言うとPermissionの問題でした。
Permissionの確認方法
筆者が使っているのはMacOSなので、まずターミナルを開きます。その次にPermissionを確認したいディレクトリの1階層上まで移動し、下記のコマンドを入力します。
$ ls -la
するとディレクトリとファイルごとに、下記のような表記がずらっと出てきます。
drwxrwxrwx 1 username admin 1918 4 21 14:22 example.html
左端の列が、右端に表示されているディレクトリかファイルのPermissionを示しています。(それ以外はあまり気にしなくて大丈夫です。)
一番左側のdは複雑らしいので無視して、大切なのはrwxが3つ続いている部分になります。
- 1つ目の`rwx`は、読み込みのアクセス権限
- 2つ目の`rwx`は、書き込みのアクセス権限
- 3つ目の`rwx`は、実行のアクセス権限
そして、`r`、`w`、`x`のそれぞれが示す権限は以下の通りです。
- `r`は作成者
- `w`は作成者グループ下の編集者
- `x`は作成者でも編集者でも無い者(不特定多数)。
## Permissionの変更方法(カレントディレクトリ下の全て) 無事に`Permisson`の確認を終えたら、いよいよ問題のディレクトリ、もしくはファイルのPermissionの変更をしていきます。 先ほど移動したカレントディレクトリのまま、以下のようなコマンドを実行します。
$ chmod 765
まずchmod(チェンジモード)を打ち込むことによって、Permissionの変更が可能な状態にします。そして次に任意の数字を入れて実行すれば、カレントディレクトリ下にある、全てのディレクトリとファイルのPermissionを変更することができます。
因みに任意の数字は以下のように決めることができます。
| rwx rwx rwx | r-- -w- --x | rwx rw- r-x |
|---|---|---|
| ↓ ↓ ↓ | ↓ ↓ ↓ | ↓ ↓ ↓ |
| 7 7 7 | 4 2 1 | 7 6 5 |
| ↓ | ↓ | ↓ |
| 777 | 421 | 765 |
表の真ん中の列を見てもらえればわかりやすいですが、`rwx`はそれぞれナンバリングがされています。
- `r`は 4
- `w`は 2
- `x`は 1
※ただし、上記で紹介している 777 は、誰でも読み込み、書き込み、実行ができてしまうと言う、セキュリティ上では非常に危険な状態となってしまう為、非推奨となります。
また、`Permission`は作成者によって、何かしら必要な意味のある状態で保存されていることが多いので、試しに変更した場合は再度`chmod`を使用して、元の`Permission`に戻しておくと良いでしょう。
Permissionの変更方法(指定したファイルのみ)
カレントディレクトリ下の全てのPermissionを変更するのではなく、こちらで指定して任意のディレクトリ、もしくはファイルのみのPermissionを変更したい場合は、以下のようなコマンドを実行します。
$ chmod 765 example.html
この場合、カレントディレクトリ下のexample.htmlのPermissionを 765 に変更することになります。
僕の場合は、このように1つだけファイルのPermissionを変更して、今回の問題だったfile_put_contents()とfile_get_contents()の実行をできるようにして、解決することができました。
まとめ
今回ご紹介したコマンドの一覧です。
$ ls -la
$ chmod 765
$ chmod 765 example.html
また繰り返しになりますが、Permissionの設定は、セキュリティと関わりのある大事な設定になりますので、変更する際は慎重に行ってください。
最後まで読んでいただき、ありがとうございました!
筆者:yuki|学習10日目で初案件獲得→現在はフルスタックエンジニア転職に向けて学習中
Qiita:https://qiita.com/yuki4839
Twitter:https://twitter.com/yuki35522891