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ツールでも変更可能な場合がある。

前へ

PHPエラー「Wrong parameter count for str_replace()」の原因と解決方法

次へ

「r_nobuホームページ - モバイル」を作成した