/** * ファイルの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; }