web-dev-qa-db-ja.com

PHP経由でファイルを削除する方法

ファイルが別のディレクトリにある場合、PHPを使用してサーバーからファイルを削除する方法を教えてください。

これが私のページレイアウトです。

  • projects/backend/removeProjectData.php(このファイルはデータベースの私のすべてのエントリを削除し、関連ファイルも削除するはずです)
  • public_files/22.pdf(ファイルが配置されている場所)

unlink関数を使っています。

unlink('../../public_files/' . $fileName);

しかし、これは常にファイルが存在しないというエラーを私に与えます。何か案は?

164
Ken

以下が役に立つはずです

  • realpath - 正規化された絶対パス名を返す
  • is_writable - ファイル名が書き込み可能かどうかを調べる
  • unlink - ファイルを削除します

ファイルパスをrealpathで実行し、返されたパスが書き込み可能かどうかを確認し、可能であればリンクを解除します。

210
Gordon
$files = [
    './first.jpg',
    './second.jpg',
    './third.jpg'
];

foreach ($files as $file) {
    if (file_exists($file)) {
        unlink($file);
    } else {
        // File not found.
    }
}
92
UbiQue

まずファイルからあなたの許可をチェックして、あなたがスクリプトからそれを見ることができること、そしてb)それを削除することができることを確認してください。

現在スクリプトを実行しているディレクトリから計算されたパスを使用することもできます。

unlink(dirname(__FILE__) . "/../../public_files/" . $filename);

(in PHP 5.3 dirname()の代わりに__DIR__定数を使用できると思いますが、私はまだ自分では使用していません)

16
richsage

AIOソリューションは、すべてを処理します、それは私の仕事ではありませんが、私は自分自身を改善しました。楽しい!

/**
 * Unlink a file, which handles symlinks.
 * @see https://github.com/luyadev/luya/blob/master/core/helpers/FileHelper.php
 * @param string $filename The file path to the file to delete.
 * @return boolean Whether the file has been removed or not.
 */
function unlinkFile ( $filename ) {
    // try to force symlinks
    if ( is_link ($filename) ) {
        $sym = @readlink ($filename);
        if ( $sym ) {
            return is_writable ($filename) && @unlink ($filename);
        }
    }

    // try to use real path
    if ( realpath ($filename) && realpath ($filename) !== $filename ) {
        return is_writable ($filename) && @unlink (realpath ($filename));
    }

    // default unlink
    return is_writable ($filename) && @unlink ($filename);
}
4
Junaid Atari

あなたが使用してファイルを削除することができます

unlink($Your_file_path);

しかし、あなたがそのhttpパスからファイルを削除しようとしているなら、このリンク解除は適切には機能しません。ファイルパスを正しく指定する必要があります。

3
ankit suthar

私はこの質問が少し古いことを知っています、しかし、これは私が取り組んでいる私のプロジェクトから画像を削除するために私にとって非常にうまくいく簡単な何かです。

unlink(dirname(__FILE__) . "/img/tasks/" . 'image.jpg');

dirname(__FILE__)セクションはあなたのプロジェクトへのベースパスを出力します。 /img/tasks/は私のベースパスから2つ下のフォルダです。そして最後に、私が削除したい私のイメージがあります。

これで私は私のサーバー上の私のファイルにアクセスしてそれらを削除することに何の問題もありませんでした。

1
Abraham A.