2016-02-16 12 views
5

Ho un blocco di codice che carica un'immagine e crea una miniatura purché l'estensione sia in jpg minuscolo, ma non caricherà un'immagine se è JPG in maiuscolo. Quando rinominare l'immagine, ad es. example.JPG to example.jpg, verrà caricato. Ma example.JPG non verrà caricato e non ricevo errori. Questo non ha alcun senso per me. Qualcuno ha una spiegazione a questo? Ecco il mio codice:Caricamento JPG ma non jpg

<?php 
function createThumbnail($filename) { 
    require 'config.php'; 

    if(preg_match('/[.](jpg)$/', $filename)) { 
    $im = imagecreatefromjpeg($filename.$path_to_image_directory); 
    } else if (preg_match('/[.](gif)$/', $filename)) { 
    $im = imagecreatefromgif($path_to_image_directory . $filename); 
    } else if (preg_match('/[.](png)$/', $filename)) { 
    $im = imagecreatefrompng($path_to_image_directory . $filename); 
    } 

    $ox = imagesx($im); 
    $oy = imagesy($im); 

    $nx = $final_width_of_image; 
    $ny = $final_height_of_image; 

    $nm = imagecreatetruecolor($nx, $ny); 

    imagecopyresampled($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy); 

    if(!file_exists($path_to_thumbs_directory)) { 
    if(!mkdir($path_to_thumbs_directory)) { 
     die("There was a problem. Please try again!"); 
    } 
    } 

    imagejpeg($nm, $path_to_thumbs_directory . $filename); 
    $tn = '<img src="' . $path_to_thumbs_directory . $filename . '" alt="image" />'; 
    $tn .= '<br />Congratulations. Your file has been successfully uploaded, and a  thumbnail has been created.'; 
    echo $tn; 
} 
?> 

il file di configurazione:

<?php 
$final_width_of_image = 300; 
$final_height_of_image = 300; 
$path_to_image_directory = ''; 
$path_to_thumbs_directory = '-tn'; 
?>  
+0

spiegazione: il suo proprio codice di avere un assegno di estensione del file, in modo che è il motivo per cui è –

+0

su un sistema * nix, '' .jpg' e .JPG' sono due animali diversi. –

risposta

5

In questo blocco di codice si sta consentendo solo le estensioni dei file in minuscolo:

if(preg_match('/[.](jpg)$/', $filename)) { 
//--lowercase-only--^ 
    $im = imagecreatefromjpeg($filename.$path_to_image_directory); 
}else if (preg_match('/[.](gif)$/', $filename)) { 
    $im = imagecreatefromgif($path_to_image_directory . $filename); 
} else if (preg_match('/[.](png)$/', $filename)) { 
    $im = imagecreatefrompng($path_to_image_directory . $filename); 
} 

si può risolvere mettendo un OR condition nella regex:

if(preg_match('/[.](jpg|JPG)$/', $filename)) { 
// -----uppercase-------^ 
    $im = imagecreatefromjpeg($filename.$path_to_image_directory); 
}else if (preg_match('/[.](gif|GIF)$/', $filename)) { 
    $im = imagecreatefromgif($path_to_image_directory . $filename); 
} else if (preg_match('/[.](png|PNG)$/', $filename)) { 
    $im = imagecreatefrompng($path_to_image_directory . $filename); 
} 

Oppure è possibile aggiungere tra maiuscole e minuscole con il modificatore i:

if(preg_match('/[.](jpg)$/i', $filename)) { 
// -------modifier--------^ 
    $im = imagecreatefromjpeg($filename.$path_to_image_directory); 
}else if (preg_match('/[.](gif)$/i', $filename)) { 
    $im = imagecreatefromgif($path_to_image_directory . $filename); 
} else if (preg_match('/[.](png)$/i', $filename)) { 
    $im = imagecreatefrompng($path_to_image_directory . $filename); 
} 
+2

** JpG ** ecc.? basta renderlo case insensiteve invece –

+0

sicuro tu dove, ti credo :-) è un **/i ** alla fine tra l'altro :-) –

+1

estensione del file non è mai la migliore idea comunque 'mime_content_type' è un'idea migliore –

0

un modo migliore per farlo è quello di controllare il file stesso, piuttosto che l'estensione, che potrebbe sempre essere sbagliato.

$data = getimagesize($filename); 
    switch($data['mime]){ 
     case('image/png): 
      $im = imagecreatefrompng($filename); 
      break; 
     case('img/jpg'): 
     case('image/jpeg'): 
     case('image/pjpeg'): 
     case('image/x-jps'): 
      $im = imagecreatefromjpeg($filename); 
      break; 
     case(self::GIF): 
      $im = imagecreatefromgif($filename); 
      break; 
    }