[ PHP ] unlink 関数でファイルの削除失敗 ( Permission denied in ・・・ )

Pocket

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 ・・・
参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *