2016-02-16 19 views
5

拡張子が小文字のjpgである限り、イメージをアップロードしてサムネイルを作成するコードブロックがありますが、大文字のJPGの場合はアップロードされません。画像の名前を変更するとexample.JPGから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; 
} 
?> 

設定ファイル:

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を配置することによって、修正することができます:あなたが唯一の小文字のファイル拡張子を許可している、このコードブロックで

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

説明:そのあなたのコードそれはですのであなたは、ファイルの拡張子のチェックを持っているが、なぜ* NIXシステム上 –

+0

、 '.jpg'と' .JPG'は、二つの異なる動物ですされています。 –

答えて

5

正規表現内:

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 **など?ちょうどケースinsensiteve代わりに –

+0

あなたがどこに、私はあなたを信じていることを確かめてください:-) ** /私**最後には:-) –

+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; 
    } 
関連する問題