/** * 画像を端末の解像度に合わせて変換する * output buffering 用コールバック関数 * * @param string 入力 * @return string 出力 */ function handler($buffer) { // 端末情報を取得する $carrier = SC_MobileUserAgent::getCarrier(); $model = SC_MobileUserAgent::getModel(); // 携帯電話の場合のみ処理を行う if ($carrier !== FALSE) { // HTML中のIMGタグを取得する $pattern = '/<img\\s+[^<>]*src=[\'"]?([^>"\'\\s]+)[\'"]?\\s*\\/?/i'; $result = preg_match_all($pattern, $buffer, $images); // 端末の情報を取得する $fp = fopen(MOBILE_IMAGE_INC_PATH . "/mobile_image_map_{$carrier}.csv", "r"); while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) { if ($data[1] == $model || $data[1] == '*') { $cacheSize = $data[2]; $imageFileSize = $data[7]; $imageType = $data[6]; $imageWidth = $data[5]; $imageHeight = $data[4]; break; } } fclose($fp); // docomoとsoftbankの場合は画像ファイル一つに利用可能なサイズの上限を計算する // auはHTMLのbyte数上限に画像ファイルサイズが含まれないのでimageFileSizeのまま。 if ($carrier == "docomo" or $carrier == "softbank") { if ($result != false && $result > 0) { // 計算式:(利用端末で表示可能なcacheサイズ - HTMLのバイト数 - 変換後の画像名のバイト数(目安値) ) / HTML中の画像数 $temp_imagefilesize = ($cacheSize - strlen($buffer) - 140 * $result) / $result; } else { // 計算式:(利用端末で表示可能なcacheサイズ - HTMLのバイト数 ) $temp_imagefilesize = $cacheSize - strlen($buffer); } // 計算結果が端末の表示可能ファイルサイズ上限より小さい場合は計算結果の値を有効にする if ($temp_imagefilesize < $imageFileSize) { $imageFileSize = $temp_imagefilesize; } } // 画像変換の情報をセットする $imageConverter = new ImageConverter(); $imageConverter->setOutputDir(MOBILE_IMAGE_DIR); $imageConverter->setImageType($imageType); $imageConverter->setImageWidth($imageWidth); $imageConverter->setImageHeight($imageHeight); $imageConverter->setFileSize($imageFileSize); // HTML中のIMGタグを変換後のファイルパスに置換する foreach ($images[1] as $key => $value) { $converted = $imageConverter->execute(preg_replace('|^' . URL_DIR . '|', HTML_PATH, $value)); if (isset($converted['outputImageName'])) { $buffer = str_replace($value, MOBILE_IMAGE_URL . '/' . $converted['outputImageName'], $buffer); } else { $buffer = str_replace($images[0][$key], '<!--No image-->', $buffer); } } } return $buffer; }
/** * セッション中の携帯機種名と、アクセスしてきたブラウザの機種名が同じかどうかを判定する * * @return boolean */ function validateModel() { $modelInSession = $this->getModel(); $model = SC_MobileUserAgent::getModel(); if (!empty($model) && $model === $modelInSession) { return true; } return false; }
/** * モバイルサイト用のセッション関連の初期処理を行う。 * * @return void */ function lfMobileInitSession() { // セッションIDの受け渡しにクッキーを使用しない。 ini_set('session.use_cookies', '0'); // パラメーターから有効なセッションIDを取得する。 $sessionId = $this->lfMobileGetSessionId(); session_start(); // セッションIDまたはセッションデータが無効な場合は、セッションIDを再生成 // し、セッションデータを初期化する。 if ($sessionId === false || !$this->lfMobileValidateSession()) { session_regenerate_id(); $_SESSION = array('mobile' => array('model' => SC_MobileUserAgent::getModel(), 'phone_id' => SC_MobileUserAgent::getId(), 'expires' => time() + MOBILE_SESSION_LIFETIME)); // 新しいセッションIDを付加してリダイレクトする。 if ($_SERVER['REQUEST_METHOD'] == 'GET') { // GET の場合は同じページにリダイレクトする。 header('Location: ' . $this->gfAddSessionId()); } else { // GET 以外の場合はトップページへリダイレクトする。 header('Location: ' . URL_SITE_TOP . '?' . SID); } exit; } // 携帯端末IDを取得できた場合はセッションデータに保存する。 $phoneId = SC_MobileUserAgent::getId(); if ($phoneId !== false) { $_SESSION['mobile']['phone_id'] = $phoneId; } // セッションの有効期限を更新する。 $_SESSION['mobile']['expires'] = time() + MOBILE_SESSION_LIFETIME; }