【问题标题】:Codeigniter - unlink delete file not workingCodeigniter - 取消链接删除文件不起作用
【发布时间】:2015-02-26 15:02:17
【问题描述】:

我在使用 codeigniter 取消链​​接或删除文件时遇到问题

这是我的控制器

function delete($id_post=''){
    $this->home_model->delete($id_post);
    $this->session->set_flashdata('danger', "Your photo has been deleted...");
    redirect("home");
}

这是我的模型

function delete($id_post=''){
    $file_name = $this->db->query("SELECT doc FROM post WHERE post.id_post='$id_post'");
    unlink(base_url("uploads/" . $file_name));
    $sql  = "DELETE FROM post WHERE id_post=?";
    $outp = $this->db->query($sql,array($id_post));
}

Doc是包含图片的列名。

如果我单击按钮删除,它会删除数据库中的数据并成功运行,但不会删除文件夹中的图像。我想,当我删除数据时,它也会删除文件夹上传中的图像。上传文件夹在根应用系统中。

有答案吗?

非常感谢...

【问题讨论】:

  • query() 函数返回一个数据库结果对象。所以检查你的代码。尝试在取消链接之前打印 $file_name 并查看结果
  • 喜欢这个return $filename;?
  • 喜欢:print_r($filename);死;取消链接之前
  • 替换这个 $file_name = $this->db->query("SELECT doc FROM post WHERE post.id_post='$id_post'")->row()->doc;

标签: php codeigniter


【解决方案1】:

query() 函数返回一个数据库结果对象。因此,将您的模型代码替换为:

function delete($id_post=''){
    $file_name = $this->db->query("SELECT doc FROM post WHERE post.id_post='$id_post'");
    $row = $file_name->row();
    $file_name = $row['doc'];
    unlink(base_url("uploads/" . $file_name));
    $sql  = "DELETE FROM post WHERE id_post=?";
    $outp = $this->db->query($sql,array($id_post));
}

【讨论】:

    【解决方案2】:

    试试这个:

    $this->load->helper("url");
    unlink(base_url("uploads/" . $file_name));
    

    【讨论】:

      【解决方案3】:
      function delete($id_post=''){
          $file_name = $this->db->query("SELECT doc FROM post WHERE post.id_post='$id_post'");
      
          $res = $this->db->result();  // this returns an object of all results
          $row = $res[0];            
          $filename = $row['doc']; // get the file name from array
          // do the delete after getting the filename
      }
      

      【讨论】:

        【解决方案4】:

        而不是这个

        $file_name = $this->db->query("SELECT doc FROM post WHERE post.id_post='$id_post'");
        

        请更换这个

        $file_name = $this->db->query("SELECT doc FROM post WHERE post.id_post='".$id_post."'")->row()->doc;
        

        【讨论】:

          【解决方案5】:

          这是因为您没有获取结果资源。 使用:

          $query = $this->db->query("SELECT doc FROM post WHERE post.id_post='$id_post'");
          $row = $query->result();
          $file_name = str_replace('localhost/latihan/uploads/','',$this->db->query("SELECT doc FROM post WHERE post.id_post='".$id_post."'")->row()->doc);
          unlink("uploads/" . $file_name);
          

          【讨论】:

          • 它返回一个类似这样的错误致命错误:不能使用 stdClass 类型的对象作为数组,因为 $row 可能?
          • var_dump($row); 里面有什么?
          • Fatal error: Cannot use object of type stdClass as array in C:\xampp\htdocs\latihan\application\modules\home\models\home_model.php on line 241... 第241行是$file_name = $row[0]['doc'];
          • Err.. 如果只有$row['doc'],而不是$row[0]['doc']
          • 哦,我明白了,有人编辑了我的代码。请在$file_name = ....var_dump($file_name); 之后告诉我结果。
          【解决方案6】:

          可以使用目录路径

          unlink(FCPATH.'uploads/yourfile');
          

          【讨论】:

            【解决方案7】:

            您正在尝试删除带有 URL 地址的文件,您必须像这样指定本地文档地址:

            unlink($_SERVER['DOCUMENT_ROOT']."uploads/".$filename);
            

            这是一个类似的问题:

            Cannot unlink file in Codeigniter

            【讨论】:

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