2011-06-18 88 views
1

我寫了一個PHP腳本來刪除在gridview中選擇的文件。這是我第一次做到這一點。該腳本在我的本地開發機器上正常工作,但我不知道這是否是正確的方式。我想知道刪除文件時可能遇到的問題,以及如何修改此問題以防止出現問題。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); 

回答

1

由於權限的原因,並非所有文件都可以取消關聯,因此請檢查該調用的返回值。