0

ディレクトリ内のすべてのファイルを表示するphpループがあります。

<?php

    // Define the full path to your folder from root
    $filepath =  'castlewp/cv/'; // The place the files will be uploaded to.
    $path = $_SERVER['DOCUMENT_ROOT'] . $filepath;

    // Open the folder
    $dir_handle = @opendir($path) or die("Unable to open $path");

    // Loop through the files
    while ($file = readdir($dir_handle)) {

    if($file == "." || $file == ".." || $file == "index.php" || $file == ".htaccess" || $file == ".htpasswd" )

        continue;
        echo "<li><a href=\"$file\">$file</a></li>";

    }
    // Close
    closedir($dir_handle);
?>

ファイルを削除する各ファイルの横にボタンを追加する方法を見つけようとしています。私はphp unlinkで遊んでいますが、これまでのところ、人がスクリプトにアクセスするたびにすべてのファイルを削除することしかできませんでした.これは私が望むものではありません.

私が知る限り、これを追加するのはかなり簡単なことですが、私の PHP の知識は浅いので、何か提案をいただければ幸いです。

4

3 に答える 3

1

まず、コードを適切にフォーマットします。コードを読みやすくするために、間隔や追加の角かっこを使用することをお勧めします。条件が満たされたときに実行されるのcontinueはステートメントだけですifが、ソースのフォーマットではそうは思われません。

あなたはまたあなたのリストのためにタグを付ける<ul>か忘れました。<ol>リストについては、W3C標準を確認してください。

単純な実装は、送信ボタンのある要素に基づいています。これはプレーンなhtmlです。を挿入します

  • フォーム内の要素。それぞれに「削除」ボタンがあります。フォームのターゲットを指定します。

    この(または同様の)htmlを生成します:

    <form action="myfilemanager.php" method="post" name"=formfilemanager">
        <ul>
          <li>filename1.dat <input type="submit" name="filename1.dat" value="delete"/></li>
          <li>filename2.dat <input type="submit" name="filename2.dat" value="delete"/></li>
          ....
        </ul>
    </form>
    

    filename2.datの「削除」ボタンを押すと、$_POSTグローバルにいくつかのパラメーターがあります。

    filename2.dat=delete
    

    このように$_POST配列を循環させる場合

    foreach($_POST as $k=>$v) {
        if($v=='delete') { 
          // $k contains the file name to delete
          // SANITIZE you input, remove '..','%', whatever
          $k=str_replace(array('%','|','/','..'),'',$k);
          unlink($filepath.$k);
        }
    }
    
  • 于 2013-03-06T14:31:42.760 に答える
    1

    別のスクリプトを作成し、GET パラメータでファイル名を渡し、現在のファイルに次のようなものを追加します。

    if($file == "." || $file == ".." || $file == "index.php" || $file == ".htaccess" || $file == ".htpasswd" )
    
        continue;
        echo "<li><a href=\"$file\">$file</a></li>";
        echo "<a href=\"delete.php?f={$file}\">Delete</a>";
    

    次に、delete.php ファイルで既存のコードの一部をコピーし、ファイルを削除するように変更します。

    $filepath =  'castlewp/cv/'; // The place the files will be uploaded to.
    $path = $_SERVER['DOCUMENT_ROOT'] . $filepath;
    if(empty($_GET['f']))
      exit();
    $file = str_replace(array('/', '..'), '', $_GET['f']);
    $filePath = realpath($path.$file);
    if($filePath !== FALSE)
      unlink($filePath);
    

    これはすべて例として考えてください。まだセキュリティを追加する必要がありますが、それが出発点だと思います。

    于 2013-03-06T14:28:20.180 に答える
    1

    試してみてください、注: あなたの URL に一致するように li タグの URL を修正する必要があります

    <?php
    // Define the full path to your folder from root
    $filepath =  'castlewp/cv/'; // The place the files will be uploaded to.
    $path = $_SERVER['DOCUMENT_ROOT'] . $filepath;
    
    // check if a file is send via GET variable
    if (isset($_GET['file'])) {
    $fullpath = $path.$file;
    // check if file exists
    if(file_exists($fullpath)) {
        unlink($fullpath);  
    } else {
        // add some error handling here
    } 
    }
    
    // Open the folder
    $dir_handle = @opendir($path) or die("Unable to open $path");
    
    // Loop through the files
    while ($file = readdir($dir_handle)) {
    
    if($file == "." || $file == ".." || $file == "index.php" || $file == ".htaccess" || $file == ".htpasswd" )
    
        continue;
        echo "<li><a href=\"yoururl?file=$file\">$file</a></li>";
    
    }
    // Close
    closedir($dir_handle);
    

    ?>

    于 2013-03-06T14:27:00.743 に答える