ファイルが別のディレクトリにある場合、PHPを使用してサーバーからファイルを削除する方法を教えてください。
これが私のページレイアウトです。
projects/backend/removeProjectData.php
(このファイルはデータベースの私のすべてのエントリを削除し、関連ファイルも削除するはずです)public_files/22.pdf
(ファイルが配置されている場所)unlink
関数を使っています。
unlink('../../public_files/' . $fileName);
しかし、これは常にファイルが存在しないというエラーを私に与えます。何か案は?
以下が役に立つはずです
realpath
- 正規化された絶対パス名を返すis_writable
- ファイル名が書き込み可能かどうかを調べるunlink
- ファイルを削除しますファイルパスをrealpathで実行し、返されたパスが書き込み可能かどうかを確認し、可能であればリンクを解除します。
$files = [
'./first.jpg',
'./second.jpg',
'./third.jpg'
];
foreach ($files as $file) {
if (file_exists($file)) {
unlink($file);
} else {
// File not found.
}
}
まずファイルからあなたの許可をチェックして、あなたがスクリプトからそれを見ることができること、そしてb)それを削除することができることを確認してください。
現在スクリプトを実行しているディレクトリから計算されたパスを使用することもできます。
unlink(dirname(__FILE__) . "/../../public_files/" . $filename);
(in PHP 5.3 dirname()
の代わりに__DIR__
定数を使用できると思いますが、私はまだ自分では使用していません)
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);
}
あなたが使用してファイルを削除することができます
unlink($Your_file_path);
しかし、あなたがそのhttpパスからファイルを削除しようとしているなら、このリンク解除は適切には機能しません。ファイルパスを正しく指定する必要があります。
私はこの質問が少し古いことを知っています、しかし、これは私が取り組んでいる私のプロジェクトから画像を削除するために私にとって非常にうまくいく簡単な何かです。
unlink(dirname(__FILE__) . "/img/tasks/" . 'image.jpg');
dirname(__FILE__)
セクションはあなたのプロジェクトへのベースパスを出力します。 /img/tasks/
は私のベースパスから2つ下のフォルダです。そして最後に、私が削除したい私のイメージがあります。
これで私は私のサーバー上の私のファイルにアクセスしてそれらを削除することに何の問題もありませんでした。