2009年12月22日

phpでdocomo携帯のguidを自動取得

スマートフォン以外のモバイル環境では、まだCookieを使えないことが多く、
webページのセッションを維持するにはCookieに頼らない手法が必要です。
その代わり、契約会社がユーザーに割り振っている固有IDを使うことで、
「簡単ログイン」のようにパスワード入力を省略した認証を作ることができます。
こちらに各キャリアのUID情報をまとめた詳しい表があります。

IDには数種類あり、送信に確認が必要なIDもありますが、
ページを移る度に確認が必要なのはさすがにメンドウです。
幸いdocomo, au, softbank各社とも送信確認不要のIDが用意されています。
これらはphpでは

・docomo
$_SERVER['HTTP_X_DCMGUID']
・au
$_SERVER['HTTP_X_UP_SUBNO']
・softbank
$_SERVER['HTTP_X_JPHONE_UID']

で取得することができます。
※ただしユーザーがIDの送信をOFFに設定していると取得できません。


ところでdocomoの場合、urlの中に必ず"guid=ON"というパラメーターが
入っていないとUIDが送信されないようになっています。
そこで、認証機能が必要なページは全て"guid=ON"を付けることになります。
しかし"guid=ON"でないようなアクセスがある場合もありうるので、
その場合に自動的にリロードするようなphpプログラムを書きました。
ただしリロードするので基本的にPOST変数を受けるページでは使えません。

require_once 'HTTP.php'; //urlのリダイレクトに必要

function reloadWithGuid()
{
if ($_GET['guid'] != 'ON')
{
$uri = setQuery('guid', 'ON');
HTTP::redirect($uri);
}
}

この中で、setQuery()という関数は、urlパラメーターのGET変数に
値をセットする自前の関数です(使用、再配布自由です)。
  1. 書き換えたい変数が?var=, &var=のどちらの形でも使える
  2. すでに同じ名前の変数があれば上書きする
  3. 他の変数に影響を与えないようにする
という条件が満たされるようにしています。

/*
 * @create 09.12.16
 * @author mimori @ RAXUS.Co.Ltd.
 * @param $name 変数名
 * @param $value
 * @param $uri 指定なしなら現在のURIを使う
 * @return 新しいuri
 * @brief uriのget値の$nameを$valueにする。元のuriのvalidationは考慮せず。
 */

function setQuery($name, $value, $uri = "")
{
//$uri指定がなかった場合現在のuriを使う
if ($uri == "") $uri = $_SERVER['REQUEST_URI'];

//ベース部とクエリー部に分け、各name=valueを取り出す
list ($uri_base, $uri_query) = explode('?', $uri);
$params = explode('&', $uri_query);

//空白でなくかつ$nameと一致していない変数だけ残す
$new_params = array();
foreach ($params as $param)
{
list($n, $v) = explode('=', $param);
if ($n && $n != $name) $new_params[] = $param;

//新しい$name=$valueのセット
$new_params[] = $name. '='. $value;

//uriに戻す
return $uri_base. '?'. implode('&', $new_params);
}

セッションが使えない場合、GET値で値を維持したいことが多いので
意外と使い出があると思います。

*urlエンコードはされません。
*正規表現をフル活用すればより短く速くなる気もします。




タグ:leopard
posted by ラクサス at 08:32| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする

2009年07月07日

phpで画像ページを生成する方法

先日弊社がデモ・オープンしたwebサービス『リポマップ』では、
データベースに登録した写真や動画の出力をphpで生成しています。
今回はそのようなページの作り方について簡単に解説しようと思います。


html文書の中に画像を表示したいときは<img>タグのsrc=の後に
画像のアドレスを入れてもってくるわけですが、
その点はphpで出力する時も変わりません。例えば

<img src = "/gazou/seisei.php?num=53" />

のように書けば、/gazou/seisei.phpというphpファイルに
53という数字を渡して画像データを生成することになります。


seisei.phpの中身は

1 <?php

2 $num = $_GET['num'];
3 $image = getImageFromDb($num);

4 header("Content-Type: image/jpeg");
5 print $image;

6 ?>


のような構造になっています。2行目でnumに入っている数字を取り、
3行目でそれをgetImageFromDbという関数に渡してデータベースから
画像データを取ってくるという具合です。


この関数は元から用意されているものではなく、自前で作ることになりますが、
中身の実装は使っているデータベースやライブラリーによって色々なので、
ここでは説明を省略します。


取ってきたデータを画像として出力するポイントは、4行目のheader関数です。
これによって5行目で出力したデータが、
ブラウザにjpeg形式の画像ファイルとして解釈してもらえることになります。
このような、ヘッダーで指定するContent-TypeのことをMIMEタイプと言います。



ここで注意ですが、上のseisei.phpのデバッグ等をしていて、

print $num;
 

のような行があったとすると、
もうそれだけで何も出力されなくなってしまうことがあります。
これは、ヘッダーで jpeg と指定しているために、
文字列まで画像と解釈して壊れた画像を出力してしまうことが原因です。
テキストの出力なら問題がないので、単純な割に見つけにくいバグだと
思いますので注意してください(私は二度ハマりました)。



リポマップではムービーの投稿もできるのですが、
動画の出力では<img>タグは使えません。
代わりに以下のようなタグを使って張り付けます。

<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"
codebase="http://www.apple.com/qtactivex/qtplugin.cab">
	<param name="src" value='/douga/seisei.php?num=78'>
	<EMBED src='/douga/seisei.php?num=78' autoplay="true"
controller="false" pluginspage="http://www.apple.com/quicktime/download/">
	</EMBED>
</object>


何かとおまじない的な部分が多いのですが、
読み込み先のアドレスは3、4行目の2カ所で、
あとは必要な宣言とオプションです。
オプションの種類はgoogle等で検索すると色々出てきます。
<EMBED>というタグはHTMLの規約には取り入れられていませんが、
IEなどで表示するときに必要になります。


seisei.phpの中身は基本的に画像の時と同様ですが、ヘッダーは


header('Content-Type: video/3gpp');


のように出力する形式に合わせて変わります(3gppはdocomo携帯対応の動画ファイル形式です)。

タグ:leopard
posted by ラクサス at 18:40| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする

2009年01月19日

PHPの文法〜その3〜

■(1)論理型 (boolean)
・論理型(boolean)とは真偽の値を表す型で、値はTRUE(真)かFALSE(偽)のどちらか。
・大文字・小文字を区別なし
・論理型への変換
 PHP内部では下記の場合、次の値がFALSEとして扱われる。
 それ以外はすべてTRUEとして扱われる。
 1.論理型のFALSE
 2.整数型の0
 3.浮動小数点型の0.0
 4.文字列型の""(空文字)
 5.文字列型の"0"(文字列としての0 ASCIIの48)
 6.空の要素を持つ配列
 7.空の要素を持つオブジェクト
 8.NULL
 9.値が代入されていない変数

■(2)整数型 (integer)
・-2,147,483,645 〜 2,147,483,645の範囲で、小数点や指標を含まない。
・整数は、10進数、16進数、8進数表記で指定可能。
・8進数表記を使用する場合、数の前に 0 を付ける
・16進数表記を使用するには、数の前に 0x を付ける

例:
<?php
$a = 3333; // 10進整数
$a = -333; // 負の数
$a = 0333; // 8進数
$a = 0x3A; // 16進数
?>

■(3)浮動小数点型 (float)
・10進数で14桁の精度の範囲で、小数点以下の数値を持った型。

例:
<?php
$a = 3.333;
$a = 1.3e3;
$a = 3E-13;
?>

■(4)文字列 (string)
・引用符をリテラルとして指定するには、バックスラッシュ (\) でエスケープする。
・文字列リテラルの指定方法
 1.シングルクォーテーション('文字列')
  ※括った文字列内に変数があっても、変数名自体を文字列として反映する。変数が認識されない
 2.ダブルクォーテーション("文字列")
  ※括った文字列内に変数があると、変数の内容を反映する。変数が認識される
 3.ヒアドキュメント構文
  ヒアドキュメントがダブルクォートで囲んだ文字列として扱われる。
 <?php
  $name = 'hoge hoge';
  $str = <<<EOD
  hello $name //変数が認識される。「hello hoge hoge」と表示される。
  EOD;
  print $str;
 ?>

 4.nowdoc 構文 (PHP 5.3.0 以降)
  Nowdoc はシングルクォートで囲んだ文字列として扱われる。
 <?php
  $name = 'fuga fuga';
  $str = <<<'EOD'
  hello $name //変数が認識されない。「hello $name」と表示される。
  EOD;
  print $str;
 ?>

※参考文献・URL一覧
PHP マニュアル<http://php.benscom.com/manual/ja/>
タグ:明鏡止水
posted by ラクサス at 17:36| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする

2009年01月07日

PHPの文法〜その2〜

■定数
(1)書式
 define("定数名", "値");
 const "定数名" = "値";//PHP 5.3.0 以降で動作

(2)ルール
・定数は、前にドル記号($)を要らない。

・「__変数名__」のような変数名を定義しない。

・定数を定義するのは、define()関数。PHP 5.3.0 以降では、「const "定数名" = "値"」という書式も可能。
・定数のスコープはグローバルで、あらゆる場所からアクセス可能。
・定数は一度設定されると再定義または未定義は不可。
・定数は、スカラー値(論理値 (boolean) 整数 (integer) 浮動小数点数(double) 文字列 (string) )のみ。

例1:define("CONSTANT", "Hello world.");
例2:const CONSTANT = 'Hello World';//

■定義済み定数
・define()関数で宣言しなくても使用可能。
 PHP_VERSION (PHPのバージョン string)
 PHP_OS (phpが稼働しているOS string)
 DEFAULT_INCLUDE_PATH (インクルードパス string)
 TRUE (真 大文字・小文字を区別しない boolean)
 FALSE (偽 大文字・小文字を区別しない boolean)
 NULL (ヌル値 大文字・小文字を区別しない null)

■マジカル定数
・使われ方によって値が変化する。※厳密には定数ではない。
 __LINE__ (ファイル上の現在の行番号)
 __FILE__ (ファイルのフルパスとファイル名)
 __FUNCTION__ (関数名※PHP4.3.0で追加)
 __CLASS__ (クラス名※PHP4.3.0で追加)
 __METHOD__ (クラスのメソッド名※PHP5.0.0で追加)

タグ:明鏡止水
posted by ラクサス at 18:51| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする

2008年09月16日

PHPの文法〜その1〜

■基本構文
 
(1)PHPコード開始終了タグ
 <?php>〜<?> (もしくは <script language="php">〜</script>)
(2)行コメント
 //〜 (もしくは #〜)
(3)複数行コメント
 /* 〜 */
 
■データ型
(1)論理値 (boolean)
(2)整数 (integer)
(3)浮動小数点 (float,double)
(4)文字列 (string)
(5)配列 (array)
(6)オブジェクト (object)
(7)リソース (resource)
(8)ヌル (NULL)
 
■変数
(1)ルール
・先頭一文字目はドル記号「$」。 変数名は大文字小文字を区別。例 $abc $_abc
・$の後は数字からはエラー 例:× $1abc
・変数に利用できる文字
  英文字(a〜z,A〜Z)
  アンダーバー(_)
  数字(0〜9)※先頭には利用できない
  0x7F 〜 0xFFのコード文字

■変数のスコープ
(1)基本
※関数外宣言はグローバル変数、関数内宣言はローカル変数
--------------------------------------------------------------
<?php
 $global = "グローバル";//グローバル変数
 function func(){
  $local = "ローカル";//ローカル変数
 }
?>
--------------------------------------------------------------
 
(2)グローバル変数へのアクセス方法
--------------------------------------------------------------
<?php
 print "変数のスコープ ";
 $global = "グローバル";
 function func2(){
  
  $local = "ローカル";
  
  //関数内でグローバル変数を呼び出すにはglobal宣言する必要がある。$globalだけでは駄目。
  global $global;
  echo $global;
 }
 func2();
?>
--------------------------------------------------------------
 
(注意)Java言語,C言語のようなアクセス方法はできない。
--------------------------------------------------------------
<?php
 $global = "グローバル";
 function func1(){
  echo $global;//エラー
 }
 func1();
?>
--------------------------------------------------------------
 
※参考文献・URL一覧
PHP マニュアル<http://php.benscom.com/manual/ja/>

タグ:明鏡止水
posted by ラクサス at 12:55| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする

2008年09月10日

実行・開発環境構築

■実行環境
 Windows XP Professional(32bit)
 
■XAMPPとは
XAMPPとは、Apache、MySQL、PHP、Perlをひとつにまとめ、簡単にインストールできるようにしたアプリケーションで下記のソフトが含まれております。
Apache HTTPD 2.2.9 + Openssl 0.9.8h
MySQL 5.0.51b
PHP 5.2.6
PHP 4.4.8
phpMyAdmin 2.11.7
FileZilla FTP Server 0.9.25
Mercury Mail Transport System 4.52
 
■Eclipse PDTとは
Eclipse上のPHP開発環境ツール
 
■XAMPPのインストール
 [手順1]下記のソフトウェアをダウンロードし、XAMPPのインストーラをダブルクリックで起動。後はウィザードに沿ってインストールします。
  
  xampp-win32-1.6.7-installer.exe
  →ダウンロード元 http://www.apachefriends.org/en/xampp-windows.html
  →参考 http://phpspot.net/php/pgXAMPP.html
  
 [手順2]ブラウザにて、http://localhostにアクセスし、http://localhost/xampp/splash.phpがページすればイントール完了です。
 
■Eclipse PDTのインストール(本体)
 [手順1]Javaのruntimeがインストールされていない場合、JRE(or JDK)バージョンは、1.4以上インストール。
  →ダウンロード元 http://www.java.com/ja/
  
 [手順2]下記のソフトウェアをダウンロードし、解凍します。
  pdt-1.0.3.R20080603_debugger-5.2.14.v20080602-all-in-one-win32.zip
  →ダウンロード元 http://downloads.zend.com/pdt/all-in-one/
  
 [手順3]下記のソフトウェアをダウンロードし、解凍後、plugins、features ディレクトリーを<ECLIPSE_HOME> ディレクトリーにコピーします。
  pleiades_1.2.0.zip(日本語化パッチ)
  →ダウンロード元 http://sourceforge.jp/projects/mergedoc/files/
  →Readme.txt参照
  
 [手順4]eclipse.ini の最終行に以下の記述を追加
  -javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
タグ:明鏡止水
posted by ラクサス at 12:31| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする

2008年09月09日

ご挨拶

はじめに

このページでは、XAMPPを使ったプログラミング入門・実践講座として環境構築からECの設計開発までを記載していきたいと考えております。
多忙な合間による作業ゆえ、滞ることが多くなるかもしれませんが、よろしくお願いします。



※本記載の内容は、筆者の備忘録的なものです。各ツールや情報は個人の責任でお願いします。
タグ:明鏡止水
posted by ラクサス at 12:44| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。