PHP では、unlink 関数でファイルの削除を行うことができますが、ファイルに対する削除権限がない場合は、当然削除に失敗します。対応としては削除権限を与えるしかないと思います。しかし、下記に示すサンプルの通りファイルをオープンしたままの状態の場合でも、Permission denied の Warning でファイル削除に失敗します。
スポンサーリンク
ファイル削除失敗時のメッセージ
Warning: unlink(D:\sample.txt) [function.unlink]: Permission denied in ・・・
失敗理由:ファイルがオープンされたままである
ファイルがオープンされたままの状態である場合には、unlink 関数によるファイル削除はエラーとなります。出力されるエラーメッセージが Permission denied であるため原因がわかりにくいです。
エラーサンプル1
$file_path = 'D:\\sample.txt'; // ファイルオープン $fp = fopen($file_path, "rb"); // クローズ // fclose($fp); // ファイルの削除 // しかし、ファイルをオープンしたままなので削除に失敗する unlink($file_path); // unlink 関数では以下のエラーが発生する // ------------------------------------------ // Warning: unlink(D:\sample.txt) [function.unlink]: Permission denied in ・・・
エラーサンプル2
// 存在する zip ファイルのパスを指定する $zip_path = 'D:\\sample.zip'; $zip = new ZipArchive(); // zip ファイルをオープンする $zip->open($zip_path); // zip ファイルのクローズ // $zip->close(); // オープンしたファイルを削除する // しかし、zip ファイルをオープンしたままの状態なので削除できない // 上記をコメントアウトしてクローズさせることでファイルの削除は可能となる unlink($zip_path); // unlink 関数では以下のエラーが発生する // ------------------------------------------ // Warning: unlink(D:\sample.zip) [function.unlink]: Permission denied in ・・・