#php #image #codeigniter #upload
#php #изображение #codeigniter #загрузка
Вопрос:
Это моя модель загрузки
function upload_avatar()
{
$id = $this->tank_auth->get_user_id();
//config upload parameters and upload image
$config = array(
'allowed_types' => 'jpeg|jpg|png',
'upload_path' => $this->upload_path,
'max_size' => 2048,
'encrypt_name' => TRUE,
'overwrite' => FALSE,
);
$this->load->library('upload', $config);
$this->upload->do_upload();
//get upload data, config, resize uploaded image, save in avatars subfolder
$image_data = $this->upload->data();
if ($image_data['file_size'] < 2048) {
$config = array(
'source_image' => $image_data['full_path'],
'new_image' => $this->upload_path . '/avatars',
'maintain_ratio' => TRUE,
'width' => 125,
'height' => 125
);
$this->load->library('image_lib', $config);
$this->image_lib->resize();
//only burn avatar path to user_profiles table if no upload errors
if (!$this->upload->display_errors()) {
$data = array('avatar' => base_url() . 'images/avatars/' . $image_data['file_name']);
$this->db->where('id', $id);
$this->db->update('user_profiles', $data);
}
//delete the original file from server
$this->load->helper('file');
unlink($image_data['full_path']);
} else {
echo $this->upload->display_errors();
}
}
Я не могу отправить сообщение об ошибке прямо в браузер, когда пытаюсь загрузить файл размером более 2 МБ.
Честно говоря, CI игнорирует этот большой файл и загружает правильно, когда размер файла < 2 МБ.
Единственное, я не могу вывести сообщение об ошибке на внешний интерфейс, чтобы дать пользователю некоторую обратную связь.
Есть идеи, что здесь не так?
Ответ №1:
$config['upload_path'] = 'uploads/category/'.$id.'/';
//echo $file_name;die;
//echo $config['upload_path'];
$config['allowed_types'] = 'gif|jpg|jpeg|png';
$config['max_size'] = '2048';
$config['max_width'] = '1920';
$config['max_height'] = '1280';
$this->load->library('upload');
foreach ($_FILES as $key => $value) {
//print_r($key);
if (!empty($key['name'])) {
$this->upload->initialize($config);
if (!$this->upload->do_upload($key)) {
// echo 'test';die;
// rmdir('uploads/category/'.$id);
$errors = $this->upload->display_errors();
flashMsg($errors);
}
}
}
попробуйте это!!
Ответ №2:
Ваш post_max_size
лимит меньше 2 МБ? (http://ca3.php.net/manual/en/ini.core.php#ini.post-max-size ) Если это так, файл, возможно, был удален до вызова вашего кода.
Обновить:
Если вы удалите вызов своей функции в блоке else и просто добавите exit (‘слишком большой’); сможете ли вы тогда увидеть ошибки? Если это так, может возникнуть проблема с тем, как вы отключаете вызов.
Комментарии:
1. да
'max_size' => 2048,
ограничивает файлы размером менее 2 МБ — но когда я комментирую эту строку, я все еще не получаю сообщение об ошибке2.
post_max_size
определено в php.ini, а не в вашем скрипте.3. о, в любом случае, если я увеличу,
'max_size'
я смогу загружать изображения > 2 МБ, поэтому я не думаю, что php.ini настроен каким-либо образом, который предотвращает это