7 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
9 * @package Magic3 Framework
10 * @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11 * @copyright Copyright 2006-2018 Magic3 Project.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
14 * @link http://www.magic3.org
16 require_once(M3_SYSTEM_INCLUDE_PATH . '/common/core.php');
17 require_once(M3_SYSTEM_INCLUDE_PATH . '/db/analyticsDb.php');
19 class AnalyzeManager extends Core
21 private $db; // DBオブジェクト
23 const NOT_FOUND_BROWSER_IMAGE = 'noimage.png'; // ブラウザアイコンが見つからなかった場合のアイコン
24 const CF_LAST_DATE_CALC_PV = 'last_date_calc_pv'; // ページビュー集計の最終更新日
25 const MAX_CALC_DAYS = 30; // 最大集計日数
26 const CRAWLER_DETECT_SCRIPT_DIR = '/Crawler-Detect-1.2.54/'; // クローラー解析スクリプトディレクトリ
27 const BROWSER_DETECT_SCRIPT = '/PhpUserAgent-0.7.0/UserAgentParser.php'; // ブラウザ判定スクリプト
28 const PLATFORM_DETECT_SCRIPT_DIR = '/php-browser-detector-6.1.2/'; // プラットフォーム判定スクリプト
33 function __construct()
36 parent::__construct();
39 $this->db = $this->gInstance->getSytemDbObject();
40 $this->analyticsDb = new analyticsDb();
45 * @param string $typeId コンテンツタイプ
46 * @param int $serial コンテンツシリアル番号(0のときはコンテンツIDを使用)
47 * @param string $day 日にち
49 * @param string $contentId コンテンツID
50 * @return bool true=成功, false=失敗
52 function updateContentViewCount($typeId, $serial, $day = null, $hour = null, $contentId = '')
54 $ret = $this->db->updateViewCount($typeId, $serial, $contentId, $day, $hour);
60 * @param string $typeId コンテンツタイプ
61 * @param int $serial コンテンツシリアル番号(0のときはコンテンツIDを使用)
62 * @param string $contentId コンテンツID
65 function getTotalContentViewCount($typeId, $serial, $contentId = '')
67 $count = $this->db->getTotalViewCount($typeId, $serial, $contentId);
73 * @param string $typeId コンテンツタイプ
74 * @param int $serial コンテンツシリアル番号
75 * @param string $contentId コンテンツID
76 * @return bool true=記録、false=記録しない
78 function logContentView($typeId, $serial, $contentId = '')
84 $serial = intval($serial);
85 if ($serial <= 0) return false;
88 if (!$this->canRegistContentView()) return false;
90 if (!isset($day)) $day = date("Y/m/d"); // 日
91 if (!isset($hour)) $hour = (int)date("H"); // 時間
93 $ret = $this->db->updateViewCount($typeId, $serial, $contentId, $day, $hour);
99 * @param string $widgetId ウィジェットID
100 * @param string $keyword 検索キーワード
101 * @return bool true=記録、false=記録しない
103 function logSearchWord($widgetId, $keyword)
106 if (empty($keyword)) return false;
111 $cid = $this->gAccess->getClientId();// クッキー値のクライアントID
114 // 全角英数を半角に、半角カナ全角ひらがなを全角カナに変換
115 $basicWord = $keyword;
116 if (function_exists('mb_convert_kana')) $basicWord = mb_convert_kana($basicWord, 'aKCV');
117 $basicWord = strtolower($basicWord); // 大文字を小文字に変換
120 $path = $this->gEnv->getAccessPath();
123 $this->db->writeSearchWordLog(0/*デバイスタイプ*/, $cid, $widgetId, $keyword, $basicWord, $path);
129 * @param string $contentType コンテンツタイプ
130 * @param string $contentId コンテンツID
131 * @return bool true=記録、false=記録しない
133 function logContentDownload($contentType, $contentId)
136 $ret = $this->db->writeDownloadLog($contentType, $contentId);
142 * (注意)クローラーがシュミレートしている場合はクローラーと判定する
144 * @param string $agent 解析元の文字列。HTTP_USER_AGENTの値。
145 * @return array ブラウザ情報
147 public function getBrowserType($agent)
150 //$agent = 'DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)'; // google 携帯シュミレート
151 $agent = 'Mozilla/5.0 (compatible; Steeler/3.5; http://www.tkl.iis.u-tokyo.ac.jp/~crawler/)'; // クローラー
153 //$agent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)';
154 $agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko';
155 $agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393'; // edge
156 $agent = 'Mozilla/5.0 (iPad; CPU OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1'; // ipad
157 $agent = 'Mozilla/5.0 (Linux; U; Android 1.6; ja-jp; Docomo HT-03A Build/DRD08) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1'; // android
158 $agent = 'SoftBank/1.0/831SH/SHJ003/SN123456789012345 Browser/NetFront/3.5 Profile/MIDP-2.0 Configuration/CLDC-1.1'; // SoftBank携帯
160 $agent = 'Mozilla/5.0 (PlayStation Vita 3.01) AppleWebKit/536.26 (KHTML, like Gecko) Silk/3.2';
161 $agent = 'SAMSUNG-GT-C3303/C3303DDJG4 NetFront/3.5 Profile/MIDP-2.0 Configuration/CLDC-1.1';
162 //$agent = 'Mozilla/5.0 (Linux; U; Android 4.0.3; ja-jp; SC-02C Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'; // Android標準
163 //$agent = 'Mozilla/5.0 (Linux; Android 4.0.3; SC-02C Build/IML74K) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31'; // Android Chrome
164 $agent = 'Mozilla/4.0 (PS2; PlayStation BB Navigator 1.0) NetFront/3.0';
165 $agent = 'Opera/9.80 (Android; Opera Mini/6.5.27452/27.1324; U; ja) Presto/2.8.119 Version/11.10';
166 $agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.122 Safari/537.36 Vivaldi/1.4.589.29'; // Vivaldi
167 $agent = 'Mozilla/5.0 (PlayStation 4 1.70) AppleWebKit/536.26 (KHTML, like Gecko)'; // Playstation4
168 $agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36';
169 $agent = 'Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 1320) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537'; // Windows Phone(new) -> NG
170 $agent = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; FujitsuToshibaMobileCommun; IS12T; KDDI)'; // Windows Phone(old)
171 $agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94'; // Opera Next
172 // ***** 検出失敗(2016/10/19) *****
173 $agent = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; Sleipnir6/6.2.1; SleipnirSiteUpdates/6.2.1)'; // Sleipnir RSS取得用
174 $agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 Sleipnir/6.2.1'; // Sleipnir
176 $resultObj = array();
179 require_once(M3_SYSTEM_LIB_PATH . self::CRAWLER_DETECT_SCRIPT_DIR . 'CrawlerDetect.php');
180 require_once(M3_SYSTEM_LIB_PATH . self::CRAWLER_DETECT_SCRIPT_DIR . 'Fixtures/AbstractProvider.php');
181 require_once(M3_SYSTEM_LIB_PATH . self::CRAWLER_DETECT_SCRIPT_DIR . 'Fixtures/Crawlers.php');
182 require_once(M3_SYSTEM_LIB_PATH . self::CRAWLER_DETECT_SCRIPT_DIR . 'Fixtures/Exclusions.php');
183 require_once(M3_SYSTEM_LIB_PATH . self::CRAWLER_DETECT_SCRIPT_DIR . 'Fixtures/Headers.php');
185 $crawlerDetect = new Jaybizzle\CrawlerDetect\CrawlerDetect;
186 if ($crawlerDetect->isCrawler($agent)){ // クローラー検出の場合
187 $crawlerName = $crawlerDetect->getMatches();
188 $resultObj['name'] = strval($crawlerName);
189 $resultObj['browser'] = strtolower($crawlerName);
190 // $resultObj['version'] = strtolower($infoObj['version']);
191 $crawlerIcon = $this->_getBrowserIconFile($resultObj['browser']);
192 if (empty($crawlerIcon)) $crawlerIcon = $this->_getBrowserIconFile('crawler'); // クローラーデフォルトアイコン
193 $resultObj['icon'] = $crawlerIcon;
196 require_once(M3_SYSTEM_LIB_PATH . self::BROWSER_DETECT_SCRIPT);
198 $infoObj = parse_user_agent($agent);
199 $resultObj['name'] = strval($infoObj['browser']);
200 $resultObj['platform'] = strtolower($infoObj['platform']);
201 $resultObj['browser'] = strtolower($infoObj['browser']);
202 $resultObj['version'] = strtolower($infoObj['version']);
203 $resultObj['icon'] = $this->_getBrowserIconFile($resultObj['browser']);
204 if (empty($resultObj['icon'])) $resultObj['icon'] = self::NOT_FOUND_BROWSER_IMAGE; // ブラウザアイコンが見つからなかった場合
209 * プラットフォーム(OSまたは携帯機種)のタイプを取得
211 * @param string $agent 解析元の文字列。HTTP_USER_AGENTの値。
212 * @return array プラットフォーム情報
214 public function getPlatformType($agent)
216 $resultObj = array();
218 require_once(M3_SYSTEM_LIB_PATH . self::PLATFORM_DETECT_SCRIPT_DIR . 'DetectorInterface.php');
219 require_once(M3_SYSTEM_LIB_PATH . self::PLATFORM_DETECT_SCRIPT_DIR . 'BrowserDetector.php');
220 require_once(M3_SYSTEM_LIB_PATH . self::PLATFORM_DETECT_SCRIPT_DIR . 'UserAgent.php');
221 require_once(M3_SYSTEM_LIB_PATH . self::PLATFORM_DETECT_SCRIPT_DIR . 'OsDetector.php');
222 require_once(M3_SYSTEM_LIB_PATH . self::PLATFORM_DETECT_SCRIPT_DIR . 'Os.php');
224 $osInfo = new Sinergi\BrowserDetector\Os($agent);
225 $resultObj['name'] = strval($osInfo->getName());
226 $resultObj['platform'] = strtolower($resultObj['name']);
227 $resultObj['version_name'] = strval($osInfo->getVersion());
228 $resultObj['version'] = strtolower($resultObj['version_name']);
229 $resultObj['icon'] = $this->_getOsIconFile($resultObj['platform']);
235 * @param string $lang 解析元の文字列。HTTP_ACCEPT_LANGUAGEの値
236 * @return string 国コード
238 public function getBrowserCountryCode($lang)
240 $lang = $this->parseBrowserLanguage($lang);
241 $tmpLang = explode(',', $lang);
242 return $this->getCountryCodeFromBrowserLanguage($tmpLang[0]);
247 * @param string $lang 解析元の文字列。HTTP_ACCEPT_LANGUAGEの値 例)ja,en-us;q=0.7,en;q=0.3
248 * @return string 言語(カンマ区切り) 例)ja,en-us,en
250 public function parseBrowserLanguage($lang)
252 $replacementPatterns = array(
253 '/(\\\\.)/', // quoted-pairs (RFC 3282)
254 '/(\s+)/', // CFWS white space
255 '/(\([^)]*\))/', // CFWS comments
256 '/(;q=[0-9.]+)/' // quality
259 $browserLang = strtolower(trim($lang));
261 // language tags are case-insensitive per HTTP/1.1 s3.10 but the region may be capitalized per ISO3166-1;
262 // underscores are not permitted per RFC 4646 or 4647 (which obsolete RFC 1766 and 3066),
263 // but we guard against a bad user agent which naively uses its locale
264 $browserLang = strtolower(str_replace('_', '-', $browserLang));
267 $browserLang = preg_replace($replacementPatterns, '', $browserLang);
269 $browserLang = preg_replace('/((^|,)chrome:.*)/', '', $browserLang, 1); // Firefox bug
270 $browserLang = preg_replace('/(,)(?:en-securid,)|(?:(^|,)en-securid(,|$))/', '\\1', $browserLang, 1); // unregistered language tag
272 $browserLang = str_replace('sr-sp', 'sr-rs', $browserLang); // unofficial (proposed) code in the wild
278 * @param string $lang 解析元の文字列。HTTP_ACCEPT_LANGUAGEの値
279 * @return string 国コード
281 public function getCountryCodeFromBrowserLanguage($browserLanguage)
283 global $COUNTRY_LIST, $LANGUAGE_TO_COUNTRY;
285 require_once(M3_SYSTEM_INCLUDE_PATH . '/data/analyzeMap.php');// アクセス解析用マップ情報
286 $validCountries = array_keys($COUNTRY_LIST);
287 $langToCountry = array_keys($LANGUAGE_TO_COUNTRY);
289 if (preg_match('/^([a-z]{2,3})(?:,|;|$)/', $browserLanguage, $matches)){
290 // match language (without region) to infer the country of origin
291 if(in_array($matches[1], $langToCountry)) return $LANGUAGE_TO_COUNTRY[$matches[1]];
293 if (!empty($validCountries) && preg_match_all("/[-]([a-z]{2})/", $browserLanguage, $matches, PREG_SET_ORDER)){
294 foreach($matches as $parts){
295 // match location; we don't make any inferences from the language
296 if(in_array($parts[1], $validCountries)) return $parts[1];
302 * アクセスログからアクセス解析用のデータを作成
304 * @param array $message エラーメッセージ
305 * @param int $maxDay 最大集計日数
306 * @return bool true=正常終了、false=異常終了
308 function updateAnalyticsData(&$message = null, $maxDay = self::MAX_CALC_DAYS)
310 $ret = $this->analyticsDb->getOldAccessLog($row);
311 if ($ret){ // 集計対象のデータが存在するとき
312 $startDate = date("Y/m/d", strtotime($row['al_dt']));
313 $lastDate = $this->analyticsDb->getStatus(self::CF_LAST_DATE_CALC_PV);
316 if (!empty($lastDate)){
317 $startDate = date("Y/m/d", strtotime("$lastDate 1 day")); // 翌日
320 $endDate = date("Y/m/d", strtotime("-1 day")); // 前日
321 $endTime = strtotime($endDate);
324 $dayCount = 0; // 集計日数
327 if (strtotime($date) > $endTime){
328 if (!is_null($message)) $message[] = '集計完了しました';
332 $this->analyticsDb->startTransaction();
334 $ret = $this->analyticsDb->calcDatePv($date);
337 if ($ret) $ret = $this->analyticsDb->updateStatus(self::CF_LAST_DATE_CALC_PV, $date);
340 $this->analyticsDb->endTransaction();
344 if (!is_null($message)) $message[] = 'エラーが発生しました';
350 if ($dayCount >= $maxDay){
351 if (!is_null($message)) $message[] = $maxDay . '日分の集計完了しました';
355 $date = date("Y/m/d", strtotime("$date 1 day"));
357 } else { // 集計データがないとき
358 if (!is_null($message)) $message[] = '集計対象のアクセスログがありません';
367 * @param int $logSerial アクセスログシリアル番号
368 * @param string $cookieValue アクセス管理用クッキー値
369 * @return bool true=成功、false=失敗
371 function realtimeAnalytics($logSerial, $cookieValue)
373 global $gRequestManager;
374 // global $gEnvManager;
376 $uri = $gRequestManager->trimServerValueOf('REQUEST_URI');
377 $referer = $gRequestManager->trimServerValueOf('HTTP_REFERER');
378 $agent = $gRequestManager->trimServerValueOf('HTTP_USER_AGENT'); // ユーザエージェント
379 $language = $gRequestManager->trimServerValueOf('HTTP_ACCEPT_LANGUAGE'); // クライアント認識可能言語
381 // 最初のアクセスかどうか確認(アクセス管理用クッキー値が存在するかどうか)
382 $isFirstAccess = false; // 最初のアクセスかどうか
383 $ret = $this->analyticsDb->isExistsCookieValueInAccessLog($cookieValue, $logSerial);
384 if (!$ret) $isFirstAccess = true;
387 /* $isCrawler = false;
388 if (empty($agent)){ // ユーザエージェントが設定されていないものはクローラーと見なす
391 $crawlerArray = array('bot', 'crawl');
392 foreach ($crawlerArray as $value){
393 if (preg_match('/' . preg_quote($value, '/') . '/i', $agent)){
399 require_once(M3_SYSTEM_LIB_PATH . self::CRAWLER_DETECT_SCRIPT_DIR . 'CrawlerDetect.php');
400 require_once(M3_SYSTEM_LIB_PATH . self::CRAWLER_DETECT_SCRIPT_DIR . 'Fixtures/AbstractProvider.php');
401 require_once(M3_SYSTEM_LIB_PATH . self::CRAWLER_DETECT_SCRIPT_DIR . 'Fixtures/Crawlers.php');
402 require_once(M3_SYSTEM_LIB_PATH . self::CRAWLER_DETECT_SCRIPT_DIR . 'Fixtures/Exclusions.php');
403 require_once(M3_SYSTEM_LIB_PATH . self::CRAWLER_DETECT_SCRIPT_DIR . 'Fixtures/Headers.php');
405 $crawlerDetect = new Jaybizzle\CrawlerDetect\CrawlerDetect;
407 if ($crawlerDetect->isCrawler()) $isCrawler = true;
410 $ret = $this->analyticsDb->updateAccessLog($logSerial, $isFirstAccess, $isCrawler);
415 * コンテンツのアクセスログを記録するかどうかを取得
417 * @return bool true=記録する、false=記録しない
419 public function canRegistContentView()
421 global $gRequestManager;
425 if (!isset($canRegist)){
426 if (!$this->gEnv->isSystemManageUser() && // システム運用者以上の場合はカウントしない
427 !$gRequestManager->isCmdAccess()){ // cmd付きアクセスでない
438 * @param string $type ブラウザ種別
439 * @return string ファイル名(該当なしの場合は空文字列)
441 public function _getBrowserIconFile($type)
444 static $browserIconFile = array(
445 'opera' => 'opera.png',
446 'opera next' => 'operanext.png',
447 'silk' => 'silk.png',
449 'microsoft internet explorer' => 'ie.png',
450 'internet explorer' => 'ie.png',
451 'edge' => 'edge.png',
452 'android browser' => 'android.png',
453 'netscape6' => 'netscape.png',
454 'netscape' => 'netscape.png',
455 'netfront' => 'netfront.gif',
456 'galeon' => 'galeon.png',
457 'phoenix' => 'phoenix.png',
458 'firefox' => 'firefox.png',
459 'mozilla firebird' => 'firebird.png',
460 'firebird' => 'firebird.png',
461 'seamonkey' => 'seamonkey.png',
462 'camino' => 'camino.png',
463 'safari' => 'safari.png',
464 'chrome' => 'chrome.gif',
465 'k-meleon' => 'k-meleon.png',
466 'mozilla' => 'mozilla.gif',
467 'konqueror' => 'konqueror.png',
469 'icab' => 'icab.png',
474 'omniweb' => 'omniweb.png',
477 'amigavoyager' => '',
481 'epiphany' => 'epiphany.png',
482 'flock' => 'flock.png',
483 'sleipnir' => 'sleipnir.gif',
484 'lunascape' => 'lunascape.gif',
485 'shiira' => 'shiira.gif',
486 'swift' => 'swift.png',
488 'playstation portable' => 'playstation.gif',
489 'scej psp browser' => '', // ワイプアウトピュア
491 'netcaptor' => 'netcaptor.gif',
492 'netcraft' => 'netcraft.png',
493 'webtv' => 'webtv.gif',
494 'vivaldi' => 'vivaldi.png',
498 'pockey' => '', // GetHTMLW
502 'download ninja' => '', // ダウンロードNinja
508 'simplepie' => 'simplepie.png',
511 'applebot' => 'applebot.png',
512 'googlebot' => 'google.gif', // Google
513 'googlebot-mobile' => 'google.gif', // Google-Mobile
514 'mediapartners-google' => 'google.gif', // Google
515 'google favicon' => 'google.gif', // Google
516 'google web preview' => 'google.gif', // Google
517 'msnbot' => 'msn.gif', // MSN
518 'msnbot-media' => 'msn.gif', // MSN
519 'yahooseeker' => 'yahoo.gif', // YahooSeeker
520 'slurp' => 'yahoo.gif', // Yahoo!
521 'yahoo! de slurp' => 'yahoo.gif', // Yahoo!
522 'yahoo! slurp' => 'yahoo.gif', // Yahoo!
523 'zyborg' => '', // InfoSeek
524 'infoseek' => '', // InfoSeek
525 'slurp.so/goo; slurp' => 'goo.gif', // goo
526 'mogimogi' => 'goo.gif', // goo
527 'moget' => 'goo.gif', // goo
528 'ichiro' => 'goo.gif', // goo
529 'baiduspider' => 'baidu.png', // 百度
530 'baiduspider+' => 'baidu.png', // 百度
531 'sogou web spider' => '', // 搜狗
532 'asahina-antenna' => '', // 朝日奈アンテナ
533 'hatena' => 'hatena.gif', // はてなブックマーク
534 'hatena antenna' => 'hatena.gif', // はてなアンテナ
535 'yeti' => 'naver.gif', // Naver(韓国)
536 'icc-crawler' => 'nict.gif', // 独立行政法人情報通信研究機構
537 'dotbot' => 'dotbot.gif', // Dotbot
538 'speedy spider' => 'entireweb.png', // Entireweb
539 'turnitinbot' => 'turnitinbot.png', // TurnitinBot
540 'bingbot' => 'bing.png', // Bing
541 'bingpreview' => 'bing.png', // Bing
542 'yacybot' => 'yacy.png', // YaCy
543 'mj12bot' => 'mj12bot.png',
544 'ahrefsbot' => 'ahrefs.png',
545 'semrushbot' => 'semrush.png',
546 'scrapy' => 'scrapy.png',
547 'deusu' => 'deusu.png',
548 'yandex' => 'ya.png',
549 'u-tokyo' => 'tokyo_univ.png', // 東京大学 喜連川研究室
552 'msproxy' => '', // ProxyServer
553 'spacebison' => '', // Proxomitron
554 'bookmark renewal' => '', // Bookまーく
555 'hatenascreenshot' => '', // はてなスクリーンショット
557 'crawler' => 'crawler.png', // クローラー該当なしの場合
560 'docomo' => 'docomo.gif', // ドコモ
561 'au' => 'au.gif', // au
562 'softbank' => 'softbank.gif', // ソフトバンク
563 'willcom' => 'willcom.gif', // WILLCOM
565 $filename = $browserIconFile[$type];
566 if (!isset($filename)) $filename = '';
572 * @param string $type OS種別
573 * @return string ファイル名(該当なしの場合は空文字列)
575 public function _getOsIconFile($type)
578 static $osIconFile = array(
579 /* 'IPD' => '', // iPod
580 'IPH' => '', // iPhone
581 'WII' => '', // Nintendo Wii
582 'PSP' => '', // PlayStation Portable
583 'PS3' => '', // PlayStation 3
584 'AND' => '', // Android
585 'POS' => '', // PalmOS
586 'BLB' => '', // BlackBerry
587 'WI7' => 'winvista.gif', // Windows NT 6.1, Windows 7
588 'WVI' => 'winvista.gif', // Windows NT 6.0, Windows Vista
589 'WS3' => 'win.gif', // Windows NT 5.2, Windows Server 2003
590 'WXP' => 'win.gif', // Windows NT 5.1, Windows XP
591 'W98' => 'win98.gif', // Windows 98
592 'W2K' => 'win.gif', // Windows NT 5.0, Windows 2000
593 'WNT' => 'win98.gif', // Windows NT 4.0
594 'WME' => 'win98.gif', // Win 9x 4.90, Windows ME
595 'W95' => 'win98.gif', // Windows 95
596 'MAC' => '', // Mac PowerPC
597 'LIN' => '', // Linux
599 'windows' => 'windows.png',
600 'windows phone' => 'windowsphone.gif',
603 'android' => 'android.png',
604 'chrome os' => 'chromeos.gif',
605 'linux' => 'linux.gif',
609 'freebsd' => 'bsd.gif',
610 'openbsd' => 'openbsd.gif',
611 'netbsd' => 'bsd.gif',
613 'sunos' => 'sun.gif',
617 $filename = $osIconFile[$type];
618 if (!isset($filename)) $filename = '';