ラベル ip-adress の投稿を表示しています。 すべての投稿を表示
ラベル ip-adress の投稿を表示しています。 すべての投稿を表示

2011年3月24日木曜日

PHPで URLのホスト名(ドメイン)が存在するかチェックする方法

PHPでURLのホスト名(ドメイン)が有効なものかどうかをチェックする例。
file_get_contents()でignore_errorsをtrueにしてstream_context_create()してもホスト名が名前解決できなくてWarningが出てしまう問題に悩んでいる場合などにどうぞ。

$url = 'http://www.example.com/path';

$array = parse_url($url);

if ($array && $array['host']) {
    $ip = getHostByName($array['host']);
    $long = ip2long($ip);
  
    if ($long === false || $ip !== long2ip($long)) {
        echo '名前解決できなかった';
    } else {
        echo 'OK';
    }
} else {
    echo 'URLが正しくない';
}

DNSで名前解決できたらOKにしている。
また、ホスト名がIPアドレス(IPv4)の場合はどんなIPでも(たとえ255.255.255.255でも)OKにしている。

ip2long()で得た値をlong2ip()でIPアドレスに戻してチェックしているのは、ip2long()が「0.0.256」のような値を「0.0.1.0」などと解釈してしまうため。
参考:(IPv4) インターネットプロトコルドット表記のアドレスを、適当なアドレスを有する文字列に変換する - PHP 5.3 日本語マニュアル
ip2long() を、それ単体で IP の検証に利用するべきではありません。long2ip() と組み合わせて利用します。

<?php
// IP が有効であることを確認します。また、不完全な形式の IP を
// 以下で示すような正しい形式(ドットで 4 つに区切られている)に変換します。
$ip = long2ip(ip2long("127.0.0.1")); // "127.0.0.1"
$ip = long2ip(ip2long("10.0.0")); // "10.0.0.0"
$ip = long2ip(ip2long("10.0.256")); // "10.0.1.0"
?>


これはIPv4を使ってるけど、今後IPv6が普及したら...その時までにPHPも進化しているでしょう。


参考

2010年1月30日土曜日

CentOSを Webサーバとしてセットアップ

VMwareでCentOSをインストールした場合の参考サイトのメモ。
構成はApache + PHP + PostgreSQL。


IPアドレスを固定にする



yumの使い方を知る


ファイアウォールの設定


PHP 5.3をyumでインストール


PostgreSQL 8.4をyumでインストール


PostgreSQLの初期設定



サーバ起動時にデーモンを自動で起動する


システム時刻



2009年2月25日水曜日

携帯サイトでのアクセス解析のBESTプラクティス

PHPを使う自分の場合、今のところこのやり方が良いと思う。


1.携帯からのアクセスかそれ以外(Bot/クローラーも含む)かを判別する

PHPで高速に携帯ゲートウェイのIPから携帯キャリアを判別する - グニャラくんのグニャグニャ備忘録@はてなで配布しているPythonプログラムを使ってIPアドレス判定PHPを作成する。(参考:floatingdays: PHPで携帯からアクセスを IPアドレスで判定


携帯キャリアのIPアドレス公表ページはこちら。変更されたらPHPを作り直す必要がある。


LinuxでApacheモジュールを入れられる環境なら、mod cidr lookupという手もある。


2.判定結果が"pc"の場合はGoogle Analyticsとかで解析する


3.判定結果が"pc"以外の場合は、myRTモバイルで解析する

PHPならリファラまで解析できるので、au・SoftBankは参照元サイトや検索キーワードの統計も見られる。
広告やリンクバック無しで無料なのはすごい。素晴らしい。

リアルタイムで見られるのは一部の情報のみで、多くの統計は見られるようになるまで時間がかかる。
その点、設置後すぐ見られるなかのひとの方が即効性・シンプルな使いやすさは上。
でも、検索キーワードの統計や着地ページを見られるなど総合力はmyRTモバイルの方が上。

なお、mod_rewriteを使っている場合はPHP埋め込みコードのgetenv('SCRIPT_NAME')をgetenv('REQUEST_URI')に変更しないといけないと思う。


4.それ以上の情報が欲しかったらWebサーバのアクセスログを解析する

AWStatsとかanalogとかで。
画像の読み込みをしないBot/クローラーの情報が欲しかったらアクセスログを解析するしかない。



参考:DSAS開発者の部屋:携帯ゲートウェイのIPアドレス帯更新を効率的に確認する方法 (今ではちょっと情報が古い)

PHPで携帯からアクセスを IPアドレスで判定

PHPで高速に携帯ゲートウェイのIPから携帯キャリアを判別する - グニャラくんのグニャグニャ備忘録@はてなを使うと簡単に判定できる。

Python3.0では動かなかったが、Python2.6にしたら動いた。

PHPファイルとして保存する内容は標準出力に出るので、ファイルへ出力して保存する 。

携帯キャリアのIPが変わったらPHPも作り直す。


(2009/02/25 追記)
WILLCOMはIP公表ページのURLが変わっていた。しかし新しいURLに変更しても、判別ロジックに現れない。IPアドレスの書き方が違うから拾えない?
どちらにしろWILLCOMはフルブラウザ?なら携帯扱いしなくてもいいかも。

2008年10月25日土曜日

携帯電話関連の日本製Apacheモジュール

mod_ktai

携帯サイトの場合、キャリア・機種によって絵文字の出力、表示可能データ量、画面の大きさなどが異なる為、キャリア・機種判別、絵文字の出し分け等、携帯サイト向けの知識が不可欠です。
mod_ktaiを使用すると、それらの処理を簡単に行なうことが可能です。
参考:

 ke-tai.org > Blog Archive > ゆめみのmod_ktaiがとうとうリリース、しかも無償利用が可能

 オープンソース研究室: mod_ktaiを試してみました




mod_chxj

国内の主要携帯(3キャリア)向けコンテンツ変換ミドルウェアをApache2.x用のモジュールとして作成します。
CHTMLや通常のHTMLで作成したコンテンツを出力時にUserAgentを見てそれぞれの端末用に変換します(画像はJPG、GIF、PNGからJPG、GIF、PNG、BMPへ)。
QRコード生成機能付。
参考:ke-tai.org > Blog Archive > 携帯向け自動変換用Apacheモジュール「mod_chxj」が0.10系にバージョンアップ



mod_cidr_lookup

mod_cidr_lookupは、アクセスしてきたクライアントのIPアドレスが、起動時に読み込んでおいたCIDRブロック群のいずれかにマッチするかどうかを判別するためのモジュールです。
参考:DSAS開発者の部屋:ケータイやクローラの判別などに使えるmod_cidr_lookupを公開しました

ブログ アーカイブ

tags