copy()関数使用時にPermission deniedとなってしまう原因と解決方法
PHPでディレクトリ内のファイルをコピーする場合、
copy(コピー元ファイル,コピー後のファイル)
というようにcopy()関数を使用する。
《例》
copy("nekochan.jpg","koneko.jpg");
※nekochan.jpgというファイルをコピーし、koneko.jpgというファイル名で保存する。
しかし、このcopy関数、PHPを動作させているサーバがWindowsなら気にしなくてよいがLinuxの場合、ディレクトリのパーミッションを気にしておかないと、以下のようなPermission deniedというエラーが出てしまう。
Warning: copy(koneko.jpg) [function.copy]: failed to open stream: Permission denied in /var/www/html/nobuneko/test.php on line 6
※適当に訳すと、koneko.jpgというファイルをnobunekoディレクトリに書き込もうとしたが、nobunekoディレクトリへの書き込み権限がないため、書き込みが拒否された(Permission denied)というエラー。
この場合、コピー先のディレクトリ「nobuneko」のパーミッションに問題があるので、パーミッションを適宜変更することでエラーは解消する。
■パーミッション変更前
drwxrwxr-x 2 nobu nobu 4.0K 6月 16 13:31 test
※drwxrwxr-x→パーミッション:775のこと。
このままではPHPのcopy()関数でディレクトリ内にファイルをコピーできない。
■パーミッション変更後
drwxrwxrwx 2 nobu nobu 4.0K 6月 16 13:31 test
※drwxrwxrwx→パーミッション777のこと。
これで書き込み可能となる。
《備考》パーミッションの変更方法
Linuxコマンド
→ chmod 777 nobuneko
※nobunekoディレクトリのパーミッションを777にするコマンド。
※FFFTP等のFTPツールでも変更可能な場合がある。