如何在CodeIgniter中取消链接(删除)图像

时间:2014-02-08 05:53:55

标签: php codeigniter unlink

我尝试unlink CodeIgniter中的图像,但unlink函数显示:

  

注意未定义的索引:userfile

这是我的代码

<?php
    function get_from_post(){
        $data['logo_name']  = $this->input->post('logo_name',TRUE);
        $data['logo_thumb'] = $_FILES['userfile']['name'];
        return $data;
    }

    function deleteconf($data){
        $data= $this->get_from_post();
        $update_id=$this->uri->segment(3);

        @unlink(base_url.'image/logo_thumb'.$logo_thumb);

        $query= $this->_delete($update_id);     
    }
?>

10 个答案:

答案 0 :(得分:3)

  

unlink函数显示通知Undefined index:userfile

上传表单,使用multipart / form-data

确保您已为上传表单使用enctype="multipart/form-data"属性/值。

<form action="" method="post" accept-charset="utf-8" enctype="multipart/form-data">

来自MDN

  

<强>是enctype
  multipart/form-data:如果您使用<input>,请使用此值   type属性设置为“file”的元素。

如果您要使用CodeIgniter form helper,可以使用form_open_multipart()函数:

  

此功能与上面的form_open()标记完全相同   除了它添加了一个multipart属性,如果你需要它   我想用表格上传文件。

删除文件,文件路径与URL地址

PHP unlink()函数接受文件的 Path 作为第一个参数。不是网址

网站的base_url()帮助函数returns the URL addressconfig.php文件中的which you've set

您必须使用服务器上文件的路径,如下所示:

unlink('/path/to/image/image_name.jpg'); // This is an absolute path to the file

您可以使用绝对相对路径,但请注意相对路径 相对于 index.php个文件。即如果image/文件夹放在index.php文件旁边,则应使用image/image_name.jpg作为文件路径:

unlink('image/image_name.jpg'); // This is a relative path to the file

答案 1 :(得分:0)

试试这段代码

unlink(base_url().'/image/logo_thumb'.$logo_thumb);

注意:您未在$logo_thumb中分配/声明deleteconf()

请检查您的代码。

答案 2 :(得分:0)

function get_from_post(){
      $filename = $_POST['logo_name'];
      $path = $_SERVER['DOCUMENT_ROOT'].'/projectname/uploads/'.$filename ;
      if(is_file($path)){
        unlink($path);
        echo 'File '.$filename.' has been deleted';
      } else {
        echo 'Could not delete '.$filename.', file does not exist';
      }
  }

答案 3 :(得分:0)

首先检查文件输入名称。是“用户文件”还是没有? 如果没有,那么添加它然后再次运行它。

答案 4 :(得分:0)

如果您要为用户个人资料上传照片,也可以  在删除旧用户照片时 在codeignitor中使用unlink方法

$query = $this->db->where('profile_id',$profile_id)->get('users')->row();
$result = $query->photo;
$result = http://localhost/abc/user_photo/FE12563.jpg

if ($result) {
        $dd = substr($result, strlen(base_url()));
        unlink($dd);
        return  $this->db->set('photo',$photo)->where('profile_id',$profile_id)->update('users');
}

答案 5 :(得分:0)

base_url()函数返回您项目的url,但是在这里您必须使用要删除的文件的目录路径。

$path = BASEPATH.'/assets/upload/employees/contracts/'; 
$get_file = $path.$con_id.'.jpg'; 
 if(file_exists($get_file)){ 
 unlink($get_file); 
 }

代替unlink(base_url("/assets/upload/employees/contracts/'.$con_id."));

答案 6 :(得分:0)

第一个取消链接功能仅适用于路径(不带url),因此请删除base_url()函数。

然后在您的第一个函数 $ _ FILES 数组中不包含 userfile 索引,这就是为什么会出错的原因。

注意:-在使用unlink之前,我还要使用file_exists()函数,首先它将检查文件是否在同一路径上,然后使用unlink函数(用于错误处理)。

喜欢-

<?php 
if(file_exists(filePath))
{
 unlink(filePath);
}

?>

请同时解决两个问题。

谢谢

答案 7 :(得分:0)

假设您在数据库中具有文件名,并且您的文件是abc.jpg。然后要在Code Igniter中取消链接,只需-

$file = "abc.jpg";
$prev_file_path = "./assets/uploads/files/".$file;
if(file_exists($prev_file_path ))
    unlink($prev_file_path );

我的文件上传路径为“ public_html / assets / uploads / files /”。我在我的控制器“ public_html / application / controllers / MyController.php”中编写了以上代码。因此,路径将与我在CI文件上传部分中使用的路径相同。即

...
$config['upload_path']   = './assets/uploads/files';
...

因此,我们在上载和取消链接部分都使用了相对路径。因此,如果上传正常运行,那么这也将正常运行。

答案 8 :(得分:-1)

$this->load->helper("file");

在取消链接之前添加上面的行

unlink($path);

答案 9 :(得分:-1)

是否可以使用此代码删除文件夹中的图像。

unlink(realpath('uploads /'。$ _image));

“uploads”:图片存在于uploads文件夹中。 “$ _image”:图像文件名

PHP函数: 1:unlink() 2:realpath()

以上代码在我的网站上成功运行,以删除文件夹中的图像。