2014-01-10 59 views
0

我試圖刪除圖像,通過一個AJAX函數將它們斷開連接,然後將它傳遞給encodeURIComponent。但是,我已經做了一些嘗試找出錯誤的嘮叨。Php unlink()返回包含空格的編碼文件路徑的錯誤

當我路過一個空間中有一個文件路徑(如... /檢驗/試驗item.jpg)

我得到的錯誤

PHP Warning: unlink(): Invalid argument in ...//file location 

然而,當我通過文件路徑中沒有空格(例如../test/testitem.jpg),我沒有得到任何錯誤。爲什麼當我傳遞一個帶有空格的編碼文件路徑時,我得到一個無效的參數?我認爲通過編碼encodeURIComponent,文件路徑中的空格應該已被編碼和照顧?

我試着調用沒有編碼的函數,當文件路徑中包含空格時,我仍然只能得到無效的參數錯誤。如何處理文件路徑中的空格?

我的功能:

function DeleteImageDP(){ 

    var itemid=$('#DisplayDeleteItemID').val(); 
    var file=$('#DisplayDeleteFilePath').val(); 
    var filepath=encodeURIComponent(file); 
    var itempicid=$('#DisplayDeleteItemPicID').val(); 
    var cfm=confirm("Confirm deletion of picture? (Note: Picture wil be deleted permanently."); 
    if(cfm == true) 
    { 
     $.ajax({ 

     url:"delete/deletedp.php", 
     type:"POST", 
     data:"ItemID="+itemid+"&FilePath="+filepath+"&ItemPicID="+itempicid, 
     success:function(){ 

      alert("Image successfully deleted."); 
      $('#ImagePreviewDP').prop('src','').hide(); 
      $('#ImagePreviewDPValidate').val(''); 
      $('#DisplayDelete').hide(); 

      $('#ItemDetailsContainer').trigger('change'); 

     }, 
     error:function(){ 

      alert("Image could not be deleted due to an error."); 

     } 

     }); 
     return true; 
    } 
    else 
    { 
     return false; 
    } 

}; 

編輯:PHP代碼

$bizid=$_SESSION['BizID']; 
$itemid=$_POST['ItemID']; 
$file=$_POST['FilePath']; 
$filepath=realpath('..\\'.$file); 
$itempicid=$_POST['ItemPicID']; 
//empties dp field in items table 
$delete=$cxn->prepare("UPDATE `Items` SET `ItemDP`=:deleted WHERE `BusinessID`=:bizid AND `ItemID`=:itemid"); 
$delete->bindValue(":bizid",$bizid); 
$delete->bindValue(":itemid",$itemid); 
$delete->bindValue(":deleted","NULL"); 
$delete->execute(); 
//removes from itempics 
$deletepic=$cxn->prepare("DELETE FROM `ItemPics` WHERE `BusinessID`=:bizid AND `ItemID`=:itemid AND `ItemPicID`=:itempicid AND `FilePath` LIKE :search"); 
$deletepic->bindValue(":search","%DP"); 
$deletepic->bindValue(":bizid",$bizid); 
$deletepic->bindValue(":itemid",$itemid); 
$deletepic->bindValue(":itempicid",$itempicid); 
$deletepic->execute(); 

if($deletepic) 
{ 
    unlink($filepath);<--- This is the line returning the error 
    return (true); 
} 
else 
{ 
    return (false); 
} 
+2

哪裏是你的PHP代碼? – Goikiu

+0

@Goikiu添加了php代碼,對不起。 –

+0

Unix不喜歡帶空格的filname。我想你將不得不用引號將文件名包裝起來。 – RiggsFolly

回答

1

的間隔是一樣的東西在文件名的特殊字符。 您需要轉義它才能使用該文件進行操作。 試試這個

$filepath = str_replace(" ", "\ ", $filepath); 
unlink($filepath);