2008年8月22日金曜日

携帯でのCGIによるページ書き出し、Content-Length[携帯]

CGIでのページ作成時はi-modeでは以下のページに書いてある通り、Content-lengthは必須らしい。

ただし、最近の機種ではLength情報を正確にはきだす必要がある。
Content-Lengthが実際のサイズより大きい値を送信している場合、特定の端末では既にページを表示しきれているにも関わらず、Content-Length情報を優先して全データの受信待ちとなり、サーバーに設定されているKeep-Aliveまで接続をし続け、Maxに達した段階で、強制的にエラーメッセージを表示する仕様になってるかららしい。

2008年8月20日水曜日

本日の.htaccess[APACHE]

今日使用してるのを見掛けた .htaccessの書き方。

【Action action-type cgi-script】
action-typeがリクエストされたときにcgi-scriptが実行されるというものらしい。
action-typeとはMIMEタイプとか。
スクリプトには環境変数「PATH_INFO」と「PATH_TRANSLATED」が送られるらしい。
[参考]

【RewriteEngine】
リダイレクトやアクセス拒否などを制御出来る。
特定のIPは拒否したり、特定のプログラムからのアクセスは許可したり。
[参考]

どちらも特定のユーザにのみアクセスしてほしいhtdocs/より上位のコンテンツを表示するため使用していた内容。
まだ全然把握しきれてない。。

2008年8月19日火曜日

携帯の機種ID取得スクリプト[PHP][携帯]

勝手サイトで携帯でのログイン認証をさっと済ませるために作りました。
全機種対応ではないけど、大体の最近の機種はカバーしてると思います。
大丈夫なはず。。。
※ただしi-modeに関しては、2008年4月から導入されたiモードIDを取得しているのだけど、これはSSL時は利用出来ないらしい。

## 機種IDを取得する
function getMobileId() {
    $ua = getCareer();
    ## SoftBank
    if($ua == 'SoftBank') {
        $id = $_SERVER['HTTP_X_JPHONE_UID'];
    ## Ez
    } elseif($ua == 'Ez') {
        $id = $_SERVER['HTTP_X_UP_SUBNO'];
    ## DoCoMo
    } elseif($ua == 'DoCoMo') {
        $id = $_SERVER['HTTP_X_DCMGUID'];
    } else {
        $id = 'PC';
    }
    return (!empty($id) ? $id : false);
}

## キャリア判別をする
function getCareer() {
    $ua = $_SERVER['HTTP_USER_AGENT'];
    ## SoftBank
    if (preg_match('/(J-PHONE|Vodafone|SoftBank|MOT-)/', $_SERVER['HTTP_USER_AGENT']) || isset($_SERVER['HTTP_X_JPHONE_MSNAME'])) {
        $career = 'SoftBank';
    ## Ezweb
    } else if (preg_match('/(KDDI|UP\.Browser)/', $_SERVER['HTTP_USER_AGENT'])) {
        $career = 'Ez';
    } else if (preg_match('/DoCoMo/', $_SERVER['HTTP_USER_AGENT'])) {
        $career = 'DoCoMo';
    } else {
        $career = 'PC';
    }
    return $career;
}

2008年8月18日月曜日

Sender Policy Framework [セキュリティ]

もしかして常識なのかもしれないけど、最近SPF(センダー・ポリシー・フレームワーク)というのを知った。
「SPFとは、SMTPによるインターネットのメール配送を拡張する、送信ドメイン認証技術のひとつである。SPF、SPF認証とも呼ばれる。」
(出典:フリー百科事典『ウィキペディア(Wikipedia)』)
導入について、送信側の作業としてはDNS上にIPアドレスとかが書いてあるSPFレコードを公開する。
受信側は、受信するメールのドメインのDNSからSPFレコードを取り出し、接続しているサーバとのマッチングを行い、それ次第で認証を判断する。

もともとの目的がなんのためかは分からないけど、これを用いることで、所有ドメインを送信ドメインとしてスパムメールに使われたり、受信側がスパムメールを受信する確率が大幅に減るようだ。

全然知らなかった。

[参考]

2008年8月8日金曜日

日付の差を出すSQL [SQL]

入会日から退会日までの差などを出すときに必要で調べたら、意外とシンプルな結果が出てきました。

【postgres】
select age( (入会日を出すselect文),(退会日を出すselect文) );

【mysql】
datediff関数で日数の差分は出るが年月日の形式ではあるのかな。
未確認。
select datediff('1997-12-31 23:59:59','1997-12-30');
-> 1