【问题标题】:Not able to delete images from 'uploads' folders in Codeigniter无法从 Codeigniter 中的“上传”文件夹中删除图像
【发布时间】:2016-01-09 09:03:46
【问题描述】:

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

消息:unlink(uploads/property-images/): Permission denied

当我从模型中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;
}

【问题讨论】:

  • 请告诉我你会在 $images_urls 中得到什么?可以发在这里吗?
  • @jilesh,你的意思是当我从模型中 print_r(rowId) 时?
  • 我的意思是 print_r($images_urls) 进入控制器
  • 很抱歉它说... Array ( [0] => property_image_19.jpg [1] => property_image_110.jpg [2] => property_image_111.jpg [3] => property_image_112.jpg [4] => property_image_113.jpg [5] => property_image_114.jpg)
  • 请在您的代码中尝试我的答案,它会起作用

标签: php codeigniter codeigniter-3


【解决方案1】:

像这样改变你的控制器:

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

【讨论】:

  • 谢谢@jilesh .. 错误似乎消失了,但是当我尝试删除时,它从表中删除了行但没有删除图像...我通过在浏览器中打开一个可以正常工作的图像确认unlink('uploads/property-images/'.$image_url); ,所以路径没有问题
  • 您的上传文件夹在根文件夹中?或任何子文件夹?或者试试这个 unlink('/uploads/property-images/'.$image_url);我在上传之前添加了 /
  • 它在根目录下.. 好吧,让我试试这个
  • 不..没用...我 print_r($images_urls) 的 [0]、[1] 是否在其中起任何作用?
  • 试试这种方式 unlink('/your_full_path/uploads/property-images/'.$image_url);即 unlink('/var/www/your_proj_name/uploads/property-images/image_name.jpeg 这将工作 100%
【解决方案2】:

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

【讨论】:

  • 嗨,我在本地服务器 XAMPP 上运行这个应用程序(不知道如何检查它)......但同时在我的其他脚本中我已经成功删除并替换了用户的配置文件图片使用取消链接..我想如果这也比这更有效..唯一的区别是这次我有一个在脚本中爆炸的图像数组..
  • $images_urls 是一个数组吗??
  • 如果你的 $images_urls 是一个数组而不是你想要的用户 foreach 并将 unlink() 设置为你的 foreach()
  • 是的 $images_urls 是“上传”文件夹中所有图像的数组路径(名称)。“我提到有问题的是我是新手,不知道如何为此应用数组”,
  • 现在这是我面临的问题。它说“为 foreach() 提供的参数无效”和“模型中的未定义变量:image_urls”...我想可能是因为我没有在控制器中有$images_urls['images_urls'] = $this->my_listings_model->get_property_all_images_url($id);,所以我将其更改为那个,但模型中仍然存在相同的错误。
【解决方案3】:

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

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

}

【讨论】:

  • 当我 print_r(images_urls).. 我得到 Array ( [0] => property_image_19.jpg [1] => property_image_110.jpg) 时,我该如何传递这些密钥?
【解决方案4】:

终于搞定了。感谢大家的支持。

必须在控制器中替换:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多