Exemplo n.º 1
0
 /**
  * ファイルのMIMEタイプを取得
  */
 public function getMime()
 {
     // finfo関数の出力を優先
     if (function_exists('finfo_file')) {
         $finfo = finfo_open(FILEINFO_MIME_TYPE);
         $mimetype = finfo_file($finfo, $this->basename);
         finfo_close($finfo);
         return $mimetype;
     }
     //return preg_replace("/ [^ ]*/", "", trim(shell_exec('file -bi '.escapeshellcmd($path))));
     $f = new File($this->basename);
     try {
         // @をつけると処理が重いのでtry-catch文を使う
         $size = getimagesize($f->getRealPath());
         // 画像の場合
         switch ($size[2]) {
             case IMAGETYPE_BMP:
                 return 'image/bmp';
             case IMAGETYPE_GIF:
                 return 'image/gif';
             case IMAGETYPE_ICO:
                 return 'image/vnd.microsoft.icon';
             case IMAGETYPE_IFF:
                 return 'image/iff';
             case IMAGETYPE_JB2:
                 return 'image/jbig2';
             case IMAGETYPE_JP2:
                 return 'image/jp2';
             case IMAGETYPE_JPC:
                 return 'image/jpc';
             case IMAGETYPE_JPEG:
                 return 'image/jpeg';
             case IMAGETYPE_JPX:
                 return 'image/jpx';
             case IMAGETYPE_PNG:
                 return 'image/png';
             case IMAGETYPE_PSD:
                 return 'image/psd';
             case IMAGETYPE_SWC:
             case IMAGETYPE_SWF:
                 return 'application/x-shockwave-flash';
             case IMAGETYPE_TIFF_II:
             case IMAGETYPE_TIFF_MM:
                 return 'image/tiff';
             case IMAGETYPE_WBMP:
                 return 'image/vnd.wap.wbmp';
             case IMAGETYPE_XBM:
                 return 'image/xbm';
         }
     } catch (Exception $e) {
         // 画像でない場合エラーが発生するので例外処理で投げる
     }
     // mime-type一覧表を取得
     $config = new Config(self::ATTACH_CONFIG_PAGE_MIME);
     $table = $config->read() ? $config->get('mime-type') : array();
     unset($config);
     // メモリ節約
     foreach ($table as $row) {
         $_type = trim($row[0]);
         $exts = preg_split('/\\s+|,/', trim($row[1]), -1, PREG_SPLIT_NO_EMPTY);
         foreach ($exts as $ext) {
             if (preg_match('/\\.' . $ext . '$/i', $this->filename)) {
                 return $_type;
             }
         }
     }
     return self::DEFAULT_MIME_TYPE;
 }