我试图通过AJAX函数取消链接来删除图像,AJAX函数在传递之前使用encodeURIComponent对文件路径进行编码。但是,我在取消链接时遇到错误,所以我做了一些试图找到错误。
当我传递带有空格的文件路径时(例如... / test / test 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 );
}
答案 0 :(得分:1)
间隔类似于文件名中的特殊字符。 您需要转义它才能使用该文件。 试试这个
$filepath = str_replace(" ", "\ ", $filepath);
unlink($filepath);
答案 1 :(得分:1)