2012-03-21 85 views
0

我想弄清楚如何在PHP中将图像类型设置为变量。我需要从数据库中提取图像,找到它的图像类型并显示它。目前它只显示JPG格式。获取图像类型,PHP

,用来上传的代码是:

if(isset($_FILES['image']) && $_FILES['image']['tmp_name'] != '') { 
    $tempext = explode('.', $_FILES['image']['name']); 
    $tempext = strtolower($tempext[count($tempext) - 1]); 
    switch($tempext) { 
     case 'jpg': 
     case 'jpeg': 
      $ext = '.jpg'; 
      break; 
     case 'gif': 
      $ext = '.gif'; 
      break; 
     case 'png': 
      $ext = '.png'; 
      break; 
     default: 
      $ext = false; 
    } 
    if($ext != false && move_uploaded_file($_FILES['image']['tmp_name'], $_SERVER['DOCUMENT_ROOT'] . '/img/profiles/' . $id . $ext)) { 
     $imagesuccess = chmod($_SERVER['DOCUMENT_ROOT'] . '/img/profiles/' . $id . $ext, 0644) ? 'yes' : 'no'; 
    } else { 
     $imagesuccess = 'no'; 
    } 
} 

编辑:

我做了一点点的进步,主要是清理一些愚蠢的错误,但我仍然没有得到任何图像出现。

下面是更新开关情况:

switch ($ext) { 
      case 'jpg': 
      case 'jpeg': 
       $ext = '.jpg'; 
       break; 
      case 'gif': 
       $ext = '.gif'; 
       break; 
      case 'png': 
       $ext = '.png'; 
     } 

和图像位置:

if(!file_exists($_SERVER['DOCUMENT_ROOT'] . $imgurl . 'profiles/' . $r['id'] . $ext)) { 
        echo '<img src="' . $imgurl . 'profiles/unavailable.gif" id="profile-big-img" />' . PHP_EOL; 
       } else { 
        echo '<p><img class="profileimg" src="' . $imgurl . 'profiles/' . $r['id'] . $ext . 'id="profile-big-img" alt="' . $r['forename'] . ' ' . $r['surname'] . (($r['course'] == 'graphics') ? ' Graphic Design' : ' Illustration') . '" /></p>' . PHP_EOL; 
       } 
+0

你有机会看看最终的HTML吗? – 2012-03-21 15:32:14

+0

$ tempext来自show time? – 2012-03-21 15:32:44

+0

我建议立即关闭这类问题,以避免产生HTML。任何理智的社区都会接受它。当然不是这个。 – 2012-03-21 15:34:08

回答

4

最可靠的方法是使用FileInfo

+0

他不需要任何文件类型检测,我害怕,但他的代码只是一点常识(就像在这个神神圣的网站上的任何其他问题)。 – 2012-03-21 15:38:00

0

您可以使用pathinfo函数进行检查。我很确定它应该工作。

1

它很难跟踪问题,当代码位CREAMY;)

让检查什么是你的形象问题首先从命令行:

一)打开终端 B)的CD一起dirctory图像(可能是网页的目录) C)运行此上(复印件+过去+回车)

php -r ' $dh= opendir(".");while(($file=readdir($dh))!==false){ if(!is_dir($file)){ $tp=exif_imagetype($file);echo "$file: =====> $tp\n"; } } ' 

输出将是某事像这样:

... 
error.JPG: =====> 2 
features.JPG: =====> 2 
kunfu_panda.jpg: =====> 2 
..... 

将代码与php提供的Imagetype常量进行比较。

这将是迈向解决方案的第一步。

+0

好的,目前有2个图片类型:'IMG_JPG'和'IMG_GIF'。目前还没有人上传“IMG_PNG”或“IMG_JPEG”,但我认为它将在未来某个时候发生。 – Ryan 2012-03-21 16:38:39

+0

对不起,Imagetype常量是'IMAGETYPE_GIF'和'IMAGETYPE_JPG',而不是'IMG_' – Ryan 2012-03-21 16:45:02