2016-02-16 6 views
5

У меня есть блок кода, который загружает изображение и создает миниатюру, если расширение является строчным jpg, но оно не будет загружать изображение, если оно является прописным JPG. Когда я переименую изображение, например. example.JPG to example.jpg, он будет загружен. Но example.JPG не будет загружаться, и я не получу ошибки. Это не имеет никакого смысла для меня. У кого-нибудь есть объяснение этому? Вот мой код:Загрузка JPG, но не 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; 
} 
?> 

Конфигурационный файл:

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

объяснение: его код у вас есть чек на расширение файла, так что почему –

+0

в системе NIX *, '' .jpg' и .JPG' два разных животных. –

ответ

5

В этом блоке кода вы только позволяет строчных расширения файлов:

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

можно исправить путем размещения OR condition в регулярном выражении:

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

Или вы можете добавить случай нечувствительность с модификатором 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 ** и т.п? просто сделайте это case insensiteve вместо –

+0

уверен, что вы где, я считаю, вы :-) его **/i ** в конце кстати :-) –

+1

расширение файла никогда не является лучшей идеей в любом случае 'mime_content_type' - лучшая идея –

0

лучший способ сделать это, чтобы проверить сам файл, а не расширение, которое всегда может быть неправильным.

$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; 
    } 
Смежные вопросы