无法从Codeigniter中的“上传”文件夹中删除图像

时间:2016-01-09 09:03:46

标签: php codeigniter codeigniter-3

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

  

消息:取消链接(uploads / property-images /):权限被拒绝

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

但同时在我的其他脚本中我已成功删除并使用取消链接替换用户的个人资料图片。我想如果这个工作比“权限”不应该是这次的问题..唯一的区别是这个我在剧本中爆炸了一系列图像。

在我的控制器中:

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;
}

4 个答案:

答案 0 :(得分:0)

请检查文件夹的权限。文件夹权限应为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;
}

答案 1 :(得分:0)

你的控制器改变如下:

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

答案 2 :(得分:0)

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

docker run -it --priviledged my/che -r:111.111.111.111

如果您没有数组中的任何特定键:您的数组就像这样:数组(' 0' =>' a',& #39; 1' = GT;' b&#39)。这样做:

elem = document.getElementById("something");
screenshot = elem.takeScreenshot("image/png");
//screenshot: base64 encoded image string

答案 3 :(得分:0)

终于搞定了。感谢您的支持。

必须在控制器中更换:

$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;
}