В моем проекте у меня есть папка, защищенная в корне. Пакет проекта выглядит так:
application secure system ...........
Внутри защищенной папки я загружаю некоторые изображения в форме submit using
$config1['upload_path'] = './secure/'; $ext = end(explode(".", $_FILES['thumb_image']['name'])); $config1['file_name'] = time().$_FILES['thumb_image']['name']; $config1['allowed_types'] = 'jpg|png|jpeg|gif|bmp|jpe|tiff|tif'; $this->load->library('upload', $config1); $this->upload->initialize($config1); $this->upload->do_upload('thumb_image');
и он работает правильно. Теперь, когда вы редактируете детали, используя другую форму, если я загружаю новое изображение вместо текущего файла изображения, я хочу отключить текущий, а затем загрузить новый файл.
Для этого я использую код:
unlink(base_url("secure/".$data['row']->videothumbnail));
Я также пробовал
unlink('/secure/'.$data['row']->videothumbnail);
где $data['row']->videothumbnail)
– текущий файл изображения из базы данных. Новый файл успешно загружен. Но старый файл не получает отсоединения. Я установил разрешение безопасной папки на 777
. Но изображения загружаются с разрешения только для чтения. Из-за этого он не получает отцепки?
Может ли кто-нибудь помочь мне решить эту проблему?
Заранее спасибо.
Попробуй это:
Задайте разрешение динамически, используя:
@chmod('./secure/'.$data['row']->videothumbnail, 0777);
затем попробуйте unlink:
@unlink('./secure/'.$data['row']->videothumbnail);
Попробуйте повторить путь, который вы предоставляете, чтобы отключить функцию.
Это должно быть примерно так:
base_url()."secure/".$data['row']->videothumbnail;
У меня также была эта проблема даже после установки правильного разрешения на папку. Но для меня работал следующий код.
unlink(realpath(APPPATH . '../uploads').'/'.$ImageName);
Попробуйте использовать $_SERVER['DOCUMENT_ROOT']
вместо base_url
$this->load->helper("file") unlink(base_url('folder/file.ext'));
место нахождения:
\ Приложение \ контроллер
\ Система \ библиотеки
** папка \ file.ext **
$unlinkUrl = "secure/".$data['row']->videothumbnail; if(file_exists($unlinkUrl)){ unlink($unlinkUrl); } else{ echo $unlinkUrl." is not available"; }
Я думаю, вы просто делаете глупую ошибку.
Во-первых, первый параметр unlink
должен быть относительным путем или абсолютным путем, но функция base_url
вернет вам путь, содержащий имя домена, КАК ВЫ УДАЛИТЬ ФАЙЛ НА ДИСТАНЦИОННОМ СЕРВЕРЕ?
Во-вторых, '/secure/'.$data['row']->videothumbnail
здесь не относительный путь, а абсолютный путь
ВЫ ДОЛЖНЫ изменить его в /the/absolute/path/to/secure/
or ./the/relative/path/to/secure/
( НЕ ./the/relative/path/to/secure/
)
используйте это для отсоединения
$oldthumb = "secure/".$data['row']->videothumbnail; @unlink($oldthumb);
Сначала загрузите $this->load->helper("file")
а затем отсоедините его
unlink("secure/".$data['row']->videothumbnail);
if ($rowAffected > 0) { if ($isMediaUpload) if (file_exists('./uploads/' . $this->input->post('img_url'))) unlink('./uploads/' . $this->input->post('img_url')); redirect('/admin/configration', 'location'); }