如何解决取消链接和上传图像的错误

时间:2019-02-06 07:10:30

标签: php codeigniter

我正在尝试同时更新和上传目录中的图像。在目录中,如果有可用的图像,则首先取消链接并完美上传另一个。但是,如果该图片不存在(即,如果它是第一张图片),它也会取消链接并上传良好,但会引发错误。我不明白为什么? 这是错误-

消息:取消链接(D:\ XAMPP \ htdocs \ pbulo \ assets / uploads / ads_offers /):权限被拒绝

文件名:controllers / management.php

行号:227

回溯:

文件:D:\ XAMPP \ htdocs \ pbulo \ application \ controllers \ management.php 线:227 功能:取消链接

文件:D:\ XAMPP \ htdocs \ pbulo \ index.php 线:315 功能:require_once

这里是控制器:

public function frontOfferImage(){
if($this->session->userdata('login_answer') != null){
        $this->load->model('employee/employeemodel');


            $this->form_validation->set_rules('front_imgOffer', '', 'callback_front_img_offer_check');
            if ($this->form_validation->run() == TRUE){

                $oldimg=$this->input->post('old_front_offer_img');

        $image_with_path = FCPATH.'assets/uploads/ads_offers/'.$oldimg;

                if(file_exists($image_with_path)){
                        unlink($image_with_path);            
                    }

            $config['upload_path'] = FCPATH.'assets/uploads/ads_offers/';
            $config['allowed_types']        = 'jpeg|jpg|png';
            $config['max_size']             = 100;
            $config['max_width']            = 1024;
            $config['max_height']           = 768;

           $this->upload->initialize($config);// $this->load->library('upload', $config); 

           if($this->upload->do_upload('front_imgOffer'))   // pd_img_3 is the name of input box.

            {


                $image_data = $this->upload->data();
                $offer_img_name = $image_data['file_name'];                     

                $data = array(
                        'front_img_offer'=>$offer_img_name,                     
                        );

            if(!$this->employeemodel->update_store_account($data)){

                $this->offerManagement();
                }else{
                    echo "Not Done";
                }

            }else{
                echo "not uploaded";
            }


            }else{
            $this->offerManagement();
        }


    }else{
            redirect('search');
        }

}

这是视图:

<?php echo form_open_multipart('management/frontOfferImage');?>
            <div class="row">

              <div class="col-lg-8 m-1">
                  <input type="file" name="front_imgOffer" class="btn-default btn-block border btn-sm">
                  <input type="hidden" name="old_front_offer_img" value="<?php echo $store['front_img_offer']; ?>" />
                  <?php echo form_error('front_imgOffer', '<div class="text text-danger">', '</div>'); ?>
              </div>
              <div class="col-lg-2 m-1">

            <?php echo form_submit(['type'=>'submit','class'=>'btn btn-primary btn-sm','value'=>'Set New Offer']); ?>
            </div>

            </div>

      <?php echo form_close(); ?>

    </div>

2 个答案:

答案 0 :(得分:0)

在尝试使用file_exists()删除任何文件之前,先使用unlink(),例如:

if( file_exists('file name with path') )
{
    unlink('file name with path')
}

我认为这不是删除旧图像的好方法,相反,您可以使用每个图像唯一的一些随机字符来为文件生成自己的名称(您可以将时间戳记与一些随机数以使其具有唯一性),也可以使用md5(),例如:

$filename = md5(date('Y-m-d H:i:s:u'));
// will return daff7fff27025b113b4d2708285f0269

答案 1 :(得分:0)

您可以尝试用以下代码替换您的代码。

$oldimg=$this->input->post('old_front_offer_img');
if($oldimg != '') {
    $image_with_path = './assets/uploads/ads_offers/'.$oldimg;

   if(file_exists($image_with_path)){
       unlink($image_with_path);            
   }
}