#php #codeigniter #file-upload
#php #codeigniter #загрузка файла
Вопрос:
У меня возникли проблемы с загрузкой изображения с использованием библиотеки загрузки codeigniter, я продолжаю получать сообщение об ошибке,
Путь загрузки не представляется допустимым.
Путь к файлу, который я тоже пытаюсь загрузить, выглядит следующим образом,
$config['upload_path'] = './media/images/site';
и когда я расставляю точки над следующим,
die(var_dump(is_dir($config['upload_path'])));
Я получаю следующее возвращенное,
bool(true)
Папка также доступна для записи (777), поэтому я не уверен, где я ошибаюсь, ниже приведен мой код загрузки,
$config['upload_path'] = './media/images/site';
//die(realpath($config['upload_path']));
//die(var_dump(is_dir($config['upload_path'])));
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '1500';
$config['max_width'] = '390';
$config['max_height'] = '269';
$this->load->library('upload',$config);
if ( ! $this->upload->do_upload() amp;amp; $_FILES['userfile']['error'] != 4)
{
$data['error'] = $this->upload->display_errors();
$this->template->build('/admin/pages/about_us', $data);
}
else
{
$image = $this->upload->data();
if(empty($image['file_name'])) {
$image['file_name'] = $this->formbuilder->defaults['page_image'];
}
$page = array(
//'page_title' => $this->input->post('page_title'),
//'page_slug' => $this->input->post('page_slug'),
'page_content' => $this->input->post('page_content'),
'page_image' => $image['file_name'],
'date_created' => date("Y-m-d h:i:s"),
'created_by' => 1
);
if($this->pages_model->insert($this->security->xss_clean($page)))
{
redirect('/admin/dashboard');
}
}
Я не вижу ничего явно очевидного, что могло бы остановить загрузку файла, ниже приведена структура папок моего проекта
/application
/system
index.php
.htaccess
/media
/images
/site
/admin
/css
/js
Если кто-нибудь может пролить свет на мою проблему, это было бы здорово.
ОТРЕДАКТИРУЙТЕ ДЛЯ РАЗДРАЖИТЕЛЬНОГО DOWNVOTER
Что может быть причиной этой проблемы?
(Возникает вопрос, как будто это все равно было недостаточно очевидно)
Ответ №1:
Попробуйте добавить эту строку перед строкой загрузки библиотеки:
// Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:
$this->upload->initialize($config);
Не забудьте добавить эту строку в шаблон:
<?php echo form_open_multipart('upload/do_upload');?>
Комментарии:
1. если бы он не выполнял составную форму, он бы получил сообщение «Вы не выбрали файл для загрузки». прежде чем получать какие-либо ошибки, касающиеся путей загрузки
Ответ №2:
Похоже, что ваша проблема возникает в validate_upload_path
методе system/libraries/Upload.php
Этот метод выполняет всевозможные трюки, чтобы преобразовать ваш путь загрузки в полный путь, поэтому я бы предложил вставлять дамп var перед каждой строкой следующим образом: $this->set_error('upload_no_filepath');
чтобы определить, где что-то идет не так, а затем выполнить возврат оттуда.
Ответ №3:
Попробуйте этот код в вашем контроллере
$config['upload_path'] = 'images'; //name of the uploading folder
$config['allowed_types'] = 'jpeg|png|jpg';
$this->load->library('upload', $config);
$this->upload->initialize($config);
if (!$this->upload->do_upload())
{
echo $this->upload->display_errors();
exit;
}
else
{
$upload_data = $this->upload->data();
}