2009-12-29 5 views
0

J'utilise Windows et j'exhibe une extension de fichier.Comment sortir .gif, .jpg ou .png

Lorsque je télécharge un fichier image avec PHP, un nom d'image de image1_big.jpg devient image1_big.jpg.jpg.

Et image2.gif devient image2.gif.gif.

Je ne souhaite pas désactiver l'extension de fichier.

Comment puis-je éviter ce problème?

function addProduct(){ 
    $data = array( 
     'name' => db_clean($_POST['name']), 
     'shortdesc' => db_clean($_POST['shortdesc']), 
     'longdesc' => db_clean($_POST['longdesc'],5000), 
     'status' => db_clean($_POST['status'],8), 
     'class' => db_clean($_POST['class'],30), 
     'grouping' => db_clean($_POST['grouping'],16), 
     'category_id' => id_clean($_POST['category_id']), 
     'featured' => db_clean($_POST['featured'],5), 
     'price' => db_clean($_POST['price'],16) 

    ); 

    if ($_FILES){ 
     $config['upload_path'] = './images/'; 
     $config['allowed_types'] = 'gif|jpg|png'; 
     $config['max_size'] = '200'; 
     $config['remove_spaces'] = true; 
     $config['overwrite'] = false; 
     $config['max_width'] = '0'; 
     $config['max_height'] = '0'; 
     $this->load->library('upload', $config);  
     if (strlen($_FILES['image']['name'])){ 
      if(!$this->upload->do_upload('image')){ 
       $this->upload->display_errors(); 
       exit(); 
      } 
      $image = $this->upload->data(); 
      if ($image['file_name']){ 
       $data['image'] = "images/".$image['file_name']; 
      } 
     } 
     if (strlen($_FILES['thumbnail']['name'])){ 
      if(!$this->upload->do_upload('thumbnail')){ 
       $this->upload->display_errors(); 
       exit(); 
      } 
      $thumb = $this->upload->data(); 
      if ($thumb['file_name']){ 
       $data['thumbnail'] = "images/".$thumb['file_name']; 
      } 
     } 
    } 
    $this->db->insert('omc_products', $data); 

    $new_product_id = $this->db->insert_id(); 
... 
... 
+5

Ce comportement n'est pas celui par défaut. C'est le code de gestion de téléchargement de fichier PHP (défectueux) qui cause cela. Si vous postez un SSCCE (http://sscce.org) alors nous pouvons repérer la faute dans le code PHP. – BalusC

+0

Collez votre script ici ... –

+0

cela ne nous dit vraiment rien. nous avons probablement besoin de voir la fonction do_upload() et/ou la fonction data(). – helloandre

Répondre

1

Si vous en ressentez le besoin, vous pouvez simplement supprimer l'extension du fichier. Cependant, je vais avec le commentaire de BalusC que ce n'est pas le comportement correct pour PHP en général:

$filename = substr($filename_passed_to_upload, 0, (strlen($filename_passed_to_upload) - 4)); 

ou, plus rigoureusement:

$temp = explode(".", $filename_passed_to_upload); 
$new_filename = $temp[0]; 
// be careful, this fails when the name has a '.' in it other than for the extention 
// you'll probably want to do something with a loop with $temp 
0

La fonction basename prendra en charge l'extension inutile (s) si vous le dites comment:

$filename = dirname($old_filename) . '/' . basename($old_file_name, '.gif'); 

Sinon, il y a l'expression rationnelle Perl pour supprimer les extensions doubles (ce manipulera tous les fichiers et triple à double extension), de sorte que o Seule la dernière extension est utilisée.

#        +-+-- handles .c through .jpeg 
#        | | 
$filename = preg_replace('/(\\..{1,4}){2,}$/', '$1', $old_filename); 
Questions connexes