2017-02-15 9 views
0

У меня действительно странная проблема. Я использую класс загрузки CodeIgniter для управления загрузкой простого jpg-изображения. Если я загружу файл с расширением .JPG, даже если я установил свойство file_ext_tolower в TRUE, мой файл будет загружен с расширением .JPG. Которого я не хочу! Вот какой-то код.CodeIgniter Загрузить Класс file_ext_tolower не работает, даже на localhost

$this->load->library('upload'); 

$config['upload_path'] = './resources/img/content'; 
$config['allowed_types'] = 'jpg'; 
$config['overwrite'] = FALSE; 
$config['file_ext_tolower'] = TRUE; 
$config['remove_spaces'] = TRUE; 

$this->upload->initialize($config, true); 

if (! $this->upload->do_upload('cover')) { 
    $this->session->set_flashdata('message','Cover: ' . $this->upload->display_errors()); 
    redirect('admin'); 
    break; 
} else { 
    // Whatever 
} 

Проблема в том, что это не работает даже на локальном хосте. Он всегда идет вперед и загружает файл с помощью .JPG. Я просто не понимаю. Я использую CodeIgniter 3.1.0 как на сервере, так и на localhost. Есть предположения? На сервере я также включил расширение fileinfo в php.ini.

Другое дело, что это приносит, что..если у меня есть файл с именем myfile.JPG и myfile.jpg, CodeIgniter не может видеть, что это тот же самый файл .., который в конечном итоге был бы вероятным он работает, если только file_ext_tolower работает правильно.

На сервере myfile.JPG сохраняется как myfile.JPG. Я думаю, что когда file_ext_tolower установлен в TRUE, он должен сохранить как myfile.jpg ... и в конечном итоге, прежде чем это сделать, на самом деле искать другой файл с этим именем .. если файл с этим именем уже находится на сервере, он должен следовать за : перезаписывать: либо переписать его, либо переименовать с прогрессивным номером.

ответ

0

У меня есть решение для вас :)

Создать файл: приложения/библиотеки/MY_Upload.php

<?php 
class MY_Upload extends CI_Upload 
{ 
    /** 
    * Force filename to lowercase 
    * 
    * @var string 
    */ 
    public $file_name_tolower = FALSE; 


    function _prep_filename($filename) 
    { 
     if ($this->mod_mime_fix === FALSE OR $this->allowed_types === '*' OR ($ext_pos = strrpos($filename, '.')) === FALSE) 
     { 
      return $filename; 
     } 

     $ext = substr($filename, $ext_pos); 
     $filename = substr($filename, 0, $ext_pos); 

     //change ext tolower 
     $filename = ($this->file_name_tolower)?strtolower($filename):$filename; 
     //change ext tolower 
     $ext = ($this->file_ext_tolower)?strtolower($ext):$ext; 

     return str_replace('.', '_', $filename).$ext; 
    } 
} 

Я modyfication file_ext_tolower и добавить file_name_tolower

Пример для файла : coVEr.JPG

... 
$config['file_ext_tolower'] = TRUE; 
$config['file_name_tolower'] = TRUE; 
... 

Результат: cover.jpg

... 
$config['file_ext_tolower'] = TRUE; 
$config['file_name_tolower'] = FALSE; 
... 

Результат: Cover.jpg

... 
$config['file_ext_tolower'] = FALSE; 
$config['file_name_tolower'] = TRUE; 
... 

Результат: Cover.jpg

... 
$config['file_ext_tolower'] = FALSE; 
$config['file_name_tolower'] = FALSE; 
... 

Результат: coVEr.JPG

+0

Учитывается ли это решение, чтобы проверить, существует ли файл с указанным новым именем на сервере? Потому что я вижу код, но я не вижу строки, которая должна проверять это. Важно, чтобы он проверял файл с тем же именем и НЕ перезаписывал его. – user1447316

+0

Также .. я вижу, что вы снова используете file_ext_tolower. Но в вопросе, который я сказал, это НЕ РАБОТАЕТ. Если бы он работал правильно, мне бы не понадобилось все это обходное решение. Вот в чем дело. – user1447316

+0

попробуйте этот код :) –