2016-02-16 27 views
5

Mam blok kodu, który przesyła obraz i tworzy miniaturę, o ile rozszerzenie ma małe litery jpg, ale nie przesyła obrazu, jeśli jest to JPG z dużymi literami. Gdy zmieniam nazwę obrazu, np. przykład.JPG do pliku example.jpg, zostanie przesłany. Ale plik example.JPG nie zostanie przesłany i nie otrzymam błędu. To nie ma dla mnie żadnego sensu. Czy ktoś ma wyjaśnienie tego? Tu jest mój kodu:Przesyłanie JPG, ale nie 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; 
} 
?> 

plik konfiguracyjny:

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

wyjaśnienie: jego kod masz czek na rozszerzenie pliku, więc to dlatego –

+0

na systemie Unix * '' .JPG' .jpg' i są dwa różne zwierzęta. –

Odpowiedz

5

W tym bloku kodu jesteś tylko dzięki czemu małe rozszerzenia plików:

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); 
} 

można rozwiązać poprzez umieszczenie OR condition w 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); 
} 

Albo można dodać case niewrażliwość z modyfikatorem 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 ** itp? po prostu niech to będzie niewrażliwe na przypadek –

+0

na pewno wiesz, gdzie jesteś :-) to jego **/i ** na końcu :-) –

+1

rozszerzenie pliku nigdy nie jest najlepszym pomysłem, a mimo to 'mime_content_type' jest lepszym pomysłem –

0

lepszy sposób to zrobić jest sprawdzenie samego pliku zamiast jego rozszerzenie, które zawsze mogą się mylić.

$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; 
    }