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