1

グリッドビューで選択したファイルを削除する PHP スクリプトを作成しました。私がこれをやったのはこれが初めてです。スクリプトはローカルの開発マシンで正常に動作しますが、これが適切な方法であるかどうかはわかりません。ファイルを削除するときにどのような問題が発生する可能性があるか、および問題を回避するためにこれを変更するにはどうすればよいかを知りたいです。

基本的なアイデアを得るためにこのページを見ていました:http://www.php.net/manual/en/function.unlink.php

<?php
// get required includes
require_once(ROOT_PATH.'user/controls/snippets/error_messages.php');
require_once(ROOT_PATH.'user/controls/accordion/get_user_name.php');

// ------------------------------------------------------------
// DELETE SELECTED FILES
// ------------------------------------------------------------
if(isset($_POST['delete_file']) && isset($_POST['checked2']))
{
    $checked = array_map('intval',$_POST['checked2']);
    $delete_list = implode(", ", $checked);

    // DB: get file names to delete
    $get_file_names = mysqli_query($conn, "SELECT FileName FROM downloads WHERE DownloadId IN ($delete_list) AND UserName = '$user_name'")
    or die($dataaccess_error);

    // delete files from server
    while($row = mysqli_fetch_array($get_file_names))
    {
        $dir = DOWNLOAD_DIRECTORY;
        $file_name = $row['FileName'];
        $file_to_delete = $dir.$file_name;
        unlink($file_to_delete);
    }

    // DB: delete selected file references from db
    $delete_selected = mysqli_query($conn, "DELETE FROM downloads WHERE DownloadId IN ($delete_list) AND UserName = '$user_name'")
    or die($dataaccess_error);

    if(mysqli_affected_rows($conn) > 0)
    {
        $effected_rows = mysqli_affected_rows($conn);
        echo "<div class='msgBox2b noBorder'>SUCCESS: ($effected_rows) FILE(S) have been DELETED..</div>";
    }
}
elseif(isset($_POST['delete_file']) && !isset($_POST['checked2']))
{
    echo $msg_error;
}
?>

ありがとうございました!

編集:この方法の方が良いでしょうか?

$fh = fopen($file_to_delete, 'w') or die($failed_to_open_file);
fclose($fh);
unlink($file_to_delete);
4

1 に答える 1

1

アクセス許可のためにすべてのファイルのリンクを解除できるわけではないため、その呼び出しの戻り値を確認してください。

于 2011-06-18T22:41:53.903 に答える