2017-02-15 54 views
0

我有一個非常奇怪的問題。我使用CodeIgniter上傳類來管理簡單jpg圖像的上傳。如果我上傳擴展名爲.JPG的文件,即使將屬性file_ext_tolower設置爲TRUE,我的文件也會以.JPG擴展名上傳。這是我不想要的東西!這裏有一些代碼..CodeIgniter上傳類file_ext_tolower不工作,即使在本地主機

$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。有什麼想法嗎?在服務器上,我還啓用了php.ini中的fileinfo擴展。

這帶來的另一件事是,如果我有一個名爲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

試試這個代碼:) –

相關問題