web-dev-qa-db-ja.com

サーバーファイルの削除

PHPを使用してサーバーからファイルを削除する方法を探しています。基本的に、次の方法でファイルをページにリストします。

<ul>
    <li><a href="delete_file.php?file=uploads/file_01.jpg">Delete File 01</a></li>
    <li><a href="delete_file.php?file=uploads/file_02.jpg">Delete File 02</a></li>
    <li><a href="delete_file.php?file=uploads/file_03.jpg">Delete File 03</a></li>
</ul>

問題は、delete_file.phpファイルを機能させる方法がわからないことです。私はそれがこのようなものである必要があると信じています:

<?php 
    $path="uploads/file_01.jpg";
    if(unlink($path)) echo "File Deleted"; 
?>

...しかし、$ pathを取得して、クリックして削除したファイルに変更する方法がわかりません。

12
user606263

ユーザーにファイルを削除する機能を与えることに非常に注意する必要がありますが、私はあなたに首を吊るすのに十分なロープを与えます

削除されるファイルを含むベースディレクトリを定義します

$base_directory = '/home/myuser/';

次に、ファイルを削除します

if(unlink($base_directory.$_GET['file']))
    echo "File Deleted.";
29
Patrick
<?php
  $file_to_delete = $_GET['file'];
  if (is_file($file_to_delete)){
    echo (unlink($file_to_delete) ? "File Deleted" : "Problem deleting file";

  }
?>

私はうそをつくつもりはありません。ファイルかどうかを確認する以外に、$ _ GET ['file']をサニタイズするためのより良い方法がわかりません。これが有効な方法でない場合は、専門家がチャイムを鳴らしてください。(たぶんガイドラインに従ってください このSOトピック ?)

5
Brad Christie

パスを動的に作成したい場合があります。

たとえば、私はさまざまな場所でCMSを使用しているため、固定定義を使用しないでください。

私のプロジェクト構造:

-私のプロジェクト
| -admin
| --app
| ---コントローラー
|-アップロード

$base_directory = dirname(__FILE__);
echo $base_directory; //'/home/myProject/public_html/admin/app/controlers/'

これは、実行中のphpファイルへのパスを取っています。

'admin/app/controllers/'にある私のphpファイル

ただし、ファイルを'upload/'にアップロードします

正しいパスのために不要なディレクトリを削除する必要があります。アップロードフォルダ内のファイルなので、「admin/app/controllers /」は不要です。そのため、この部分を削除します。

$path = str_replace('admin/app/controllers/', '', $path);
echo $path;  //'/home/myProject/public_html/upload/myFile'

これで正しいパスが得られ、ファイルを削除できます。

if (file_exists($path)){
    if(unlink($path)){
       echo "File deleted";
    }
}else{
     echo "File is not exists";
}
0
Tolga