无法从 Codeigniter 中的 'uploads' 个文件夹中删除图像

Not able to delete images from 'uploads' folders in Codeigniter

我在删除 XAMPP 中的一条记录时试图从 'uploads' 文件夹中删除所有用户数据,包括所有图像。到目前为止,它正在删除 table 中的行,但是对于上传文件夹中的图像,我收到此错误,

Message: unlink(uploads/property-images/): Permission denied

当我从模型中 print_r($rowId); 时,它很好地回显图像数组。我确信我在模型中可能做错了什么,因为删除函数必须是一个数组,但我不确定该怎么做。

但与此同时,在我的其他脚本中,我已经使用取消链接成功删除并替换了用户的个人资料图片。我想如果这样做比 'Permission' 这次应该不是问题。唯一不同的是,这次我有一组在脚本中爆炸的图像。

在我的控制器中:

function delete_listing_id() {
    if($this->session->userdata('is_logged_in')){
    $id = $this->uri->segment(3);
    $images_urls = $this->my_listings_model->get_property_all_images_url($id);
    $this->my_listings_model->delete_listing_images($images_urls);

    $this->my_listings_model->delete_listing_id($id);

    $this->my_listings();
}

型号:

function get_property_all_images_url($id) {
    $this->db->select('property_images');
    $this->db->from('vbc_property_images');
    $this->db->where('property_ref_id', $id);
    $query = $this->db->get();

$query_result = $query->result_array();
if (empty($query_result)) {
    return FALSE;
}
elseif (count($query_result) > 1) {
    return 0;
}
else{
    $rowId = explode(',',$query_result[0]['property_images']);
    return $rowId;    
    }
}

function delete_listing_id($id){
    $this->db->delete('vbc_vacation_item_attri', array('vbc_item_id' => $id));
    $this->db->delete('vbc_property_amenities', array('v_ref_id' => $id));
    $this->db->delete('vbc_property_images', array('property_ref_id' => $id));
}

function delete_listing_images($images_urls) {
    unlink('uploads/property-images/'.$images_urls);
    return TRUE;
}

请检查文件夹的权限。文件夹权限应为 0777 。 您也可以查看 this

更新:

如果您的 $image_urls 是一个数组,那么您应该在图像删除函数中执行

function delete_listing_images($images_urls) {
  foreach($image_urls as $image_url) //deletes all urls found
    {

   unlink('uploads/property-images/'.$image_url);




 }
return TRUE;
}

像这样更改您的控制器:

function delete_listing_id() {
    if($this->session->userdata('is_logged_in')){
    $id = $this->uri->segment(3);
    $this->my_listings_model->delete_listing_id($id);

    $images_urls = $this->my_listings_model->get_property_all_images_url($id);
    if(!empty($images_urls))
    {
    foreach($images_urls as $image_url);
      {
      $this->my_listings_model->delete_listing_images($image_url);  
      }
    }
    $this->my_listings();
}

并设置你的模型,因为它没有在其中使用 foreach

检查您的数组键并以这种方式传递它:

foreach($images_urls as $image_url){

   unlink('uploads/property-images/'.$image_url['your_key']);

}

如果您在数组中没有任何特定键:您的数组就像这样:array('0'=>'a','1'=>'b' ).这样做:

foreach($images_urls as $image_url){

   unlink('uploads/property-images/'.$image_url);

}

终于成功了。感谢大家的支持。

必须更换控制器:

$images_urls = $this->my_listings_model->get_property_all_images_url($id);

来自

$images_urls['images_urls'] = $this->my_listings_model->get_property_all_images_url($id);

并且在模型中所有 delete_listing_images(函数):

function delete_listing_images($images_urls) {
$rows = $images_urls;
if (count($rows) > 0) {
    foreach($rows as $row) {
            $number_of_images = count($row);
        }
    }
if(!empty($images_urls)) {
    for($i=0; $i<$number_of_images;$i++){
foreach($images_urls as $image_url); {
unlink('uploads/property-images/'.$image_url[$i]);
        }
    }
}
return TRUE;
}