« 2004年12月 | メイン | 2005年06月 »
2005年02月27日
変数からタグを削除
たとえば、不特定多数の人が書き込む掲示板などで、タグの使用を禁止したい時がある。
これを簡単に行えるのが
string strip_tags ( string str [, string allowable_tags])
第二引数には、許可するタグを指定できる。
たとえば、 b と i 以外の全てのタグを削除したい場合。
$data = strip_tags($data,'<b><i>');
としたいが、実はこれだけだととても危険である。
タグ属性までは審査しないので、悪意のある人がタグにスクリプトを埋め込み、攻撃を可能とする。
なので、この関数で許可するタグがある場合、正規表現を使った置換等で危険な属性を排除しなければならない。
意外とこの関数の世話になることが多いはず。
ユーザーが入力した文字をページに出力する場合、必ず、タグを使われた場合のことを考えよう。
投稿者 Nori : 23:06 | コメント (0) | トラックバック
2005年02月18日
エラーメッセージ制御
PHPは便利なもので、エラーの個所が表示される。
しかし、場合によってはエラーの出る場合のある処理を意図的にし、エラー出力の文字を変えたい時もある。
そのやり方を簡単に説明する。
関数の一文字目に @ を追加することで、エラー出力を消す事ができる。
すなわち、エラーが出ても画面にはその事がでてこない。
次に、関数の最後に or die("出力する文字列"); をつける。
例
$page = @file_get_contents($url) or die ("このサイトにはアクセスできません");
投稿者 Nori : 23:41 | コメント (0) | トラックバック
2005年02月10日
データをPOSTで送信
値を他のページに渡す場合 GET と POST の2つの通信方式がある。
GETは、アドレスに追記して渡すほうほうで、たとえば abc.php?a=b などとなる。
POSTは、この値を隠蔽して渡す方式で、掲示板などで良く使われている。書き込みの投稿がそれにある。
POSTのもう一つのメリットとしては、文字列の長さの制限をあまり考えないでよいことだ。
非常に長いデータを渡す場合、GETでは文字数オーバーとなるので、POSTで渡さなければならない。
他のページを読み込む場合、標準関数ではGETとなる。
しかし、セキュリティーやその他の関係上でPOSTでデータを渡して読みこまなければならないこともある。
その場合は、拡張ライブラリ pear に含まれる HTTP_Request 関数を使うことになる。
pearについては、http://php.webmeister-jp.com/archives/2005/02/_pear.php であつかっている。
HTTP_RequestでPOST送信する方法は以下となる。
$req =&new HTTP_Request("http://www.***.com/abc.php");
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addPostData("name1", $data1);
$req->addPostData("name2", $data2);
if (!PEAR::isError($req->sendRequest())) {
$res = $req->getResponseBody();
} else {
$res = "送信失敗";
}
上記の場合、 name1=$data1、name2=$data2 としてhttp://www.***.com/abc.php へPOST送信される。
$resには結果(ページ内容)が格納される。
投稿者 Nori : 00:35 | コメント (0) | トラックバック
2005年02月09日
拡張ライブラリ PEAR
PHPの標準拡張ライブラリ『PEAR』というものがある。
これは、よく使われる処理をあつめたライブラリである。
この拡張ライブラリを使えば、面倒な処理を簡単に行えてしまうというわけだ。
しかしながら、デフォルト設定でPHPをインストールした場合、このPEARは最少インストール(もっともよく使われる物のみインストール)となり、インストールされないライブラリが多いようだ。(PHPのバージョンによって違う)
共有レンタルサーバーを使っていて、使いたいライブラリがインストールされていない場合、諦めるのは早い。
手動でインストールをすれば、大抵は問題無く使える。
この場合、サーバー設定を直接書き換えることはできないので、使うファイル毎にini設定をし、ライブラリを呼びだすことになる。
全ては公式サイトに書かれているので、興味のある人は覗いて見よう。
http://pear.php.net/manual/ja/
手動インストール
公式サイトの説明 > http://pear.php.net/manual/ja/installation.manually.php
手動インストールには一つ問題点がある。
それは、一つの命令を使うためには複数のライブラリをインストールしなければならない点だ。
これを調べる簡単な方法は、使いたい命令のライブラリをまずインストールし、その命令を実行。
そして、エラーの中にどのライブラリが足りないかでてくるので、それをインストール。
これを繰り返せば良い。
ライブラリのダウンロードは http://pear.php.net/packages.php で行える。
たとえば、 HTTP_Request を使いたければ、HTTPにまず入り、そこで HTTP_Request を探そう。
Mail_IMAP を使いたければ Mail に入って探そう。 _ の前の文字に注目すればよい。
このように各命令ごとに分かれているので簡単に探せる。
投稿者 Nori : 23:46 | コメント (0) | トラックバック
ユーザーエージェント偽装
ブラウザの種類により表示するページを分けているサイトが多々ある。
たとえば、携帯とPCとで別表示するなどだ。
ということで、ユーザーエージェント(ブラウザ)の認識コードをいじってアクセスする方法です。
仕組みとしては、PHPで目的のページを読み込み、それを表示。
そのページ読み込みの際のユーザーエージェントをブラウザのコードにすればよいわけである。
ini_set('user_agent', 'DoCoMo/1.0/N503is/c10');
たとえばこのようにすると、DocomoのN503isになりすましてアクセスできる。
ユーザーエージェントをセットしたら、後は普通にサイトをPHPで開けばよい。
$page = file_get_contents($url); print $page;
変数$pageには、受信したサイトの内容が入っている。
これで文字だけは表示できるようになる。
画像やリンクを正常にしたい場合、それらのアドレスをフルアドレスに変換させれば良い。
投稿者 Nori : 23:02 | コメント (0) | トラックバック
2005年02月08日
携帯とPCとで表示ページを分ける
もっとも簡単なのは、PCでのアクセスはそのまま表示、携帯でアクセスされたら表示を止めて別ページへジャンプ。
if( preg_match( "/DoCoMo/", $_SERVER['HTTP_USER_AGENT'] ) )
{
header("Location: http://www.****.com/i/");
exit();
}
これは、DoCoMoの携帯でアクセスがあったら、http://www.****.com/i/ へジャンプさせるPHPコードの例です。
DoCoMoの部分をJ-PHONEにしたり、UP\.Browser にして、他携帯に対応させてください。
飛ぶ先のアドレスは、相対アドレスは使わないよう注意。
かならずhttp:から書くように。 /i/ や i/ にした場合、エラーが出る可能性があります。
一括して指定する例
$agents = array('DoCoMo','J-PHONE','KDDI','ASTEL','UP\.Browser');
foreach ($agents as $value) {
if( preg_match( "/$value/", $_SERVER['HTTP_USER_AGENT'] ) ){
header("Location: http://www.****.com/i/");
exit();
}
}