ホーム > タグ > pear

pear

PEARのアップグレード

  • 投稿者: admin
  • 2009年4月18日 6:21 PM
  • PHP

PEARライブラリのひとつ「Net_UserAgent_Mobile」をインストールしたときに表示されたエラーメッセージがちょっと気になったので、PEAR本体をアップグレード。(エラーメッセージ:WARNING: channel “pear.php.net” has updated its protocols, use “channel-update pear.php.net” to update)

$ pear list

で現状のversionを確認。
PEAR 1.7.2 stable

$ sudo pear upgrade PEAR
Password:
WARNING: channel “pear.php.net” has updated its protocols, use “channel-update pear.php.net” to update
downloading PEAR-1.8.1.tgz …
Starting to download PEAR-1.8.1.tgz (290,382 bytes)
……………………………………………………done: 290,382 bytes
downloading Archive_Tar-1.3.3.tgz …
Starting to download Archive_Tar-1.3.3.tgz (18,119 bytes)
…done: 18,119 bytes
upgrade ok: channel://pear.php.net/Archive_Tar-1.3.3
upgrade ok: channel://pear.php.net/PEAR-1.8.1
PEAR: Optional feature webinstaller available (PEAR’s web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR’s PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR’s PHP-GTK2-based installer)
PEAR: To install optional features use “pear install pear/PEAR#featurename”

再度 $ pear list で確認。
PEAR 1.8.1 stable

このアップグレードの場合にも同じエラーメッセージを確認。ちょっと調べてみたところでは、通常のPEARコマンド実行時に出力されていれば問題ないっぽい。

PEAR::Net_UserAgent_Mobileを利用する

モバイル端末のキャリア、機種名、タイプをチェックする「Net_UserAgent_Mobile」を使ってみる。

インストールしたPEARライブラリ「Net_UserAgent_Mobile」をrequireでインクルードして、以下のようなスクリプトを外部ライブラリとして作成する。

mobile_useragent_carrier.php

isDocomo()) {
		// Docomo
		$carrier = 'docomo';

		//ブラウザタイプ
		$type = $agent->getHTMLVersion();

	} else if ($agent->isEZweb()) {
		// au
		$carrier = 'au';

		//ブラウザタイプ
		if ($agent->isWAP2()) {
			// WAP2.0
			$type = 'wap2.0';
		} else {
			// HDMLタイプ
			$type = 'hdml';
		}
	} else if ($agent->isSoftBank()) {
		// SoftBank / Vodafone / J-PHONE
		$carrier = 'softbank';

		// ブラウザタイプ
		if ($agent->isTypeC()) {
			// C型
			$type = 'c';
		} else if ($agent->isTypeP()) {
			// P型
			$type = 'p';
		} else if ($agent->isTypeW()) {
			// W型
			$type = 'w';
		} else if ($agent->isType3GC()) {
			// 3GC型
			$type = '3gc';
		}
	} else {
		// 携帯端末以外の場合

	}

	// 機種名のチェック
	$model = $agent->getModel();

	// 返却する値を準備
	$output = array($carrier, $model, $type);

	return $output;
}

?>

つづいて、端末でアクセスした際にその判別の結果を画面に表示するためのページを作成する。

■chap3_carrier.php
さきに作成した「mobile_useragent_carrier.php」をrequireで読み込み、この外部ライブラリの中で作成したメソッド「mobile_useragent_carrier」を使用する。












キャリア/機種判別

アクセスしている携帯端末は ・キャリア ・機種名 ・ブラウザタイプ です。

どちらのファイルも文字コードはcp932で作成。レンタルサーバの作業ディレクトリではとくにphpの設定を変更するようなこともしなかった。(.htaccessを使用したphp.ini項目の変更はしなかった)

自分の実機でアクセス&表示確認。文字化けもとくになく、一応無事に確認はできた。pearを使った作業をローカル以外でやるのは初めてだったけれど、なんてことはない。使用するライブラリのincludeパスの指定を誤らなければ、とくに問題はないんだな。

以下、判別における記述について簡単に。

◎キャリアを判別

if ($agent->isDocomo()) {
    // Docomoの場合
} else if ($agent->isEZweb()) {
    // auの場合
} else if ($agent->isSoftBank()) {
    // SoftBankの場合
}

◎機種名を取得する

$model = $agent->getModel();

◎ドコモのブラウザタイプを取得する
(iモードHTMLバージョンを取得することが出来る)

$type = $agent->getHTMLVersion();

◎auのブラウザタイプを取得する
(WAP2.0ブラウザかHDMLブラウザかを判別出来る)

if ($agent->isWAP2()) {
    $type = 'wap2.0';
} else {
    $type = 'hdml';
}

◎auのWIN端末かどうかを判別する

if ($agent->isWIN()) {
    $type = 'WIN機種';
} else {
    $type = 'WIN機種ではない';
}

◎SoftBankの端末タイプを取得する

if ($agent->isTypeC()) {
    $type = 'c';
} else if ($agent->isTypeP()) {
    $type = 'p';
} else if ($agent->isTypeW()) {
    $type = 'w';
} else if ($agent->isType3GC()) {
    $type = '3gc';
}

PEAR::Net_IPv4を利用したIPアドレスによるキャリア判別

PEARライブラリ「Net_IPv4」を利用して、IPアドレスによるキャリアの判別を行う。

まず、キャリアを判別するスクリプトを用意する。
(PCではいいけれど、モバイルの実機ではこのスクリプトをそのまま実行できないため外部スクリプトとしてincludeして利用する)

主要3キャリアの IP アドレス情報は以下より
キャリアごとのIPアドレス情報

mobile_ip_carrier.php

<?php

// Net_IPv4を読み込む
require_once 'Net/IPv4.php';

// IPアドレスからキャリアを判別する
function mobile_ip_carrier()
{
	// IPを設定する配列を準備する
	$ip_table = array();

	// DoCoMoのIP帯域を配列に格納
	$ip_table['docomo'] = array();
	$ip_table['docomo'][] = '210.153.84.0/24';
	$ip_table['docomo'][] = '210.136.161.0/24';
	$ip_table['docomo'][] = '210.153.86.0/24';
	$ip_table['docomo'][] = '210.153.84.0/24';
	// 以下略

	// auのIP帯域を配列に格納
	$ip_table['au'] = array();
	$ip_table['au'][] = '210.230.128.224/28';
	$ip_table['au'][] = '121.111.227.160/27';
	$ip_table['au'][] = '61.117.1.0/28';
	$ip_table['au'][] = '219.108.158.0/27';
	$ip_table['au'][] = '219.125.146.0/28';
	$ip_table['au'][] = '61.117.2.32/29';
	$ip_table['au'][] = '61.117.2.40/29';
	$ip_table['au'][] = '219.108.158.40/29';
	$ip_table['au'][] = '219.125.148.0/25';
	$ip_table['au'][] = '222.5.63.0/25';
	$ip_table['au'][] = '222.5.63.128/25';
	$ip_table['au'][] = '222.5.62.128/25';
	$ip_table['au'][] = '59.135.38.128/25';
	$ip_table['au'][] = '219.108.157.0/25';
	$ip_table['au'][] = '219.125.145.0/25';
	$ip_table['au'][] = '121.111.231.0/25';
	$ip_table['au'][] = '121.111.227.0/25';
	$ip_table['au'][] = '118.152.214.192/25';
	$ip_table['au'][] = '118.159.131.0/25';
	$ip_table['au'][] = '118.159.133.0/25';

	// SoftBankのIP帯域を配列に格納
	$ip_table['softbank'] = array();
	$ip_table['softbank'][] = '123.108.236.0/24';
	$ip_table['softbank'][] = '123.108.237.0/27';
	$ip_table['softbank'][] = '202.179.204.0/24';
	$ip_table['softbank'][] = '202.253.96.224/27';
	// 以下略

	// IPのキャリアを決定する
	$ip_carrier = '';

	// IPアドレスからキャリアを判断する
	if (empty($ip_carrier)) {
		foreach ($ip_table as $ip_table_carrier => $ip_table_value) {
			foreach ($ip_table_value as $value) {
				$value = trim($value);
				if (strcmp($_SERVER["REMOTE_ADDR"], $value) == 0 || Net_IPv4::ipInNetwork($_SERVER["REMOTE_ADDR"], $value)) {
					$ip_carrier = $ip_table_carrier;
					break 2;
				}
			}
		}
	}

	// 携帯のキャリアIPアドレスでない場合はPCからのアクセスとみなす
	if (empty($ip_carrier)) {
		$ip_carrier = 'pc';
	}

	return $ip_carrier;
}

echo mobile_ip_carrier();
?>

つづいて、携帯の実機でアクセスする(キャリア判別の結果を表示する)ページを作成する。

test.php
先に作成した判別用のスクリプトをrequireでincludeして利用。
判別結果を変数$ip_carrier(外部スクリプト内で設定した)を使用して出力。

<?php

// IPアドレスからキャリアを判別する外部スクリプトを読み込む
require_once 'mobile_ip_carrier.php';

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset='Shift_JIS'" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<title>キャリア判別</title>
</head>
<body>

<?php echo $ip_carrier ?>

</body>
</html>

Net_UserAgent_mobileを利用したキャリア・機種・タイプ判別について

◎キャリアを判別
if ($agent->isDocomo()) {
// Docomoの場合
} else if ($agent->isEZweb()) {
// auの場合
} else if ($agent->isSoftBank()) {
// SoftBankの場合
}

◎機種名を取得する
$model = $agent->getModel();

◎ドコモのブラウザタイプを取得する
$type = $agent->getHTMLVersion();
(iモードHTMLバージョンを取得することが出来る)

◎auのブラウザタイプを取得する
if ($agent->isWAP2()) {
$type = ‘wap2.0′;
} else {
$type = ‘hdml’;
}
(WAP2.0ブラウザかHDMLブラウザかを判別出来る)

◎auのWIN端末かどうかを判別する
if ($agent->isWIN()) {
$type = ‘WIN機種’;
} else {
$type = ‘WIN機種ではない’;
}

◎SoftBankの端末タイプを取得する
if ($agent->isTypeC()) {
$type = ‘c’;
} else if ($agent->isTypeP()) {
$type = ‘p’;
} else if ($agent->isTypeW()) {
$type = ‘w’;
} else if ($agent->isType3GC()) {
$type = ’3gc’;
}

PEAR::Net_IPv4のインストール

PEARライブラリのひとつである「Net_IPv4」をインストール。

これは、マスク値を使って表記されたIPアドレスを比較できるPEARライブラリらしい。

各キャリアで公開されているIPアドレス帯域の範囲はマスク値を使って記述されているので、そのままの値で比較出来ない。
(例:123.108.236.0/24)

なので、このライブラリを利用して実装を助けてもらう。

$ sudo pear install Net_IPv4
Password:
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
downloading Net_IPv4-1.3.0.tgz ...
Starting to download Net_IPv4-1.3.0.tgz (4,705 bytes)
.....done: 4,705 bytes
install ok: channel://pear.php.net/Net_IPv4-1.3.0

インストールされた場所は/opt/local/lib/php/Net。
このディレクトリ内に IPv4.php というファイルがインストールされた模様。

Net_UserAgent_Mobileのインストール

PEARライブラリの Net_UserAgent_Mobile をインストール。
*beta版なので最後に -beta をつける。

$ sudo pear install Net_UserAgent_Mobile-beta
Password:
WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
downloading Net_UserAgent_Mobile-1.0.0RC1.tgz ...
Starting to download Net_UserAgent_Mobile-1.0.0RC1.tgz (37,639 bytes)
..........done: 37,639 bytes
install ok: channel://pear.php.net/Net_UserAgent_Mobile-1.0.0RC1

/opt/local/lib/phpというディレクトリ内に Net というディレクトリができて、その中にインストールされた模様。

MagpieRSSを使ってRSSを読み込む

この記事はMagpieRSSを使って外部サイトのfeedを読み込むに引っ越しました。

PEAR::DBを使ってMySQLを操作する

この記事は
PEAR::DBを使ってMySQLを操作する
に引っ越しました。

PEAR::Calendar

PEAR::Calendarパッケージをインストールしてカレンダーを表示してみる。
続きを読む

PEAR::PEAR_Info

  • 投稿者: admin
  • 1:07 PM
  • PHP

PEAR本体及び、インストール済みの各種パッケージの詳細情報が参照出来る。(phpinfoみたいに)

そんなに使うときなさそうだけど、せっかくやってみたんで一応メモっておく。
続きを読む

ホーム > タグ > pear

検索
フィード

ページの上部に戻る