どういうエラーなのか
PHPでunlink、fopenのような関数を使っていたときにちょくちょく発生したので記載。
例えば、以下のような表示がされる時
こんな警告
Warning: file_get_contents(/ディレクトリパス/ファイル名): failed to open stream: Permission denied in [エラーが起きているPHPファイル]
まず何を調べるのか
エラーの内容がaccess to
ではじまるものとは違って、該当するファイルに至るまでのパスの所有者/所有グループで阻まれることがあるので、ディレクトリの一覧表示で所有者/所有グループを確認する
一覧で確認
$ ls -la
drwxr-xr-x 3 kamo kamo 4096 Sep 11 22:39 .
drwxr-xr-x 3 kamo kamo 4096 Sep 11 14:01 ..
-rw-r--r-- 1 kamo kamo 33 Sep 11 14:01 .bash_logout
-rw-r--r-- 1 kamo kamo 176 Sep 11 14:01 .bash_profile
-rw-r--r-- 1 kamo kamo 124 Sep 11 14:01 .bashrc
drwxr-xr-x 3 kamo kamo 4096 Sep 11 14:01 temp
この場合、apacheでアクセスしようとしても所有者/所有グループがapache
ではなく、kamo
になっているため、apacheではアクセスができなかった。
どのように変更すればいいのか
筆者の場合、アクセスしようとしているtemp
ディレクトリが誰でもアクセスしていいような中身であったため、以下のように変更した
所有者/所有グループ変更&&アクセス権限変更
chown apache:apache 「アクセスするパス」/temp/
chmod 777 「アクセスするパス」/temp/
このように所有者/所有グループの権限を変えることでapacheでの操作が可能になる
もう一度一覧で確認
$ ls -la
drwxr-xr-x 3 kamo kamo 4096 Sep 11 22:39 .
drwxr-xr-x 3 kamo kamo 4096 Sep 11 14:01 ..
-rw-r--r-- 1 kamo kamo 33 Sep 11 14:01 .bash_logout
-rw-r--r-- 1 kamo kamo 176 Sep 11 14:01 .bash_profile
-rw-r--r-- 1 kamo kamo 124 Sep 11 14:01 .bashrc
drwxrwxrwx 3 apache apache 4096 Sep 11 14:01 temp
注意点
ただし、アクセスする人を制限したい、誰もが見れるようにしてはいけないという場合では有効ではないので注意する必要がある