Blog

XAMPP

ローカル環境でPHPやMySQLをお手軽に利用出来るのが、
この「XAMPP」と呼ばれるものです。

PHPのマニュアルなんかだと、最初の方のページには大抵、
ApacheとかPHPとかMySQLを個別にインストールしなければならなかったりで
「さぁ!PHP勉強するぞー!」と思ってもなかなかはじめられない・・・

このXAMPPというソフトはそういったものをひとまとめにして、
簡単にインストール出来ちゃう優れものです。便利ですよね♪

XAMPPの配布サイト「Apache Friends」日本語ページ
http://www.apachefriends.org/jp/

飛んだ先のサイトのメニューにある「XAMPP」から「XAMPP for Windows」を選択。
・・・windowsじゃない人はもちろんそれぞれにあったものを選んでね;
Linax用やMac用も用意されているみたいですので。
わたしはwindows用以外は未確認ですが・・・

わたしがこれを書いている時点でのXAMPPのバージョンは1.7.0です。
ページを少しスクロールするとインストールという項目がありますので、
そこをよく読んでその通りにすれば簡単にインストール出来ます。
詳しくかいてくれてるのでここで説明は省きますが、
インストールには2種類あって、インストーラを使ってインストールするか、
インストーラ無しでZIPを解凍して利用するかを選べます。
個人的にはインストーラ無しバージョンがオススメ。
理由としてはレジストリなんかをいじっていないため、
アンインストールもフォルダを削除するだけで済みますし、
USBのフラッシュメモリとかに入れて持ち運びも出来るということが大きいです。

・・・とまぁ、とても便利なXAMPPですが、欠点もあります。
これはあくまでテスト環境用のソフトであるということ。
つまり実際に本番のサーバーとして利用するには向いていないということです。
セキュリティ等の面の問題が大きいようですね。
やっぱりサーバー運営とかを考えるなら、
これでラクしようという考えは通用しないんでしょう。

ただ、サーバーとして利用するわけでなくても、
ある程度の知識があって損するものではないですから
余裕があるなら、PHPのマニュアルを片手にひとつひとつ個々のソフトを
インストールすることに挑戦しておくのもいいかも知れませんよ。

携帯振り分け

わたしの会社で管理しているとある学校のサイトで、
携帯用サイトを作ったので携帯で見たらそこに転送されるようにして欲しい
という依頼が入った。

そんなわけでPHPで簡単に振り分ける方法を自分用にメモ。

function get_mobileType(){
 $agent = $_SERVER['HTTP_USER_AGENT'];
 if(preg_match(’{^DoCoMo/[12]\.0}’, $agent)){
  return ‘d’;// docomo
 }elseif(preg_match(’{^(J\-PHONE|Vodafone|MOT\-[CV]980|SoftBank)/}’, $agent)){
  return ’s’;// softbank
 }elseif(preg_match(’/^KDDI\-|UP\.Browser/’, $agent)){
  return ‘a’;// au
 }elseif(preg_match(’{^PDXGW/|DDIPOCKET;|WILLCOM;}’, $agent)){
  return ‘w’;// willcom
 }else{
  return ‘p’;// pc
 }
}

if (get_mobileType() = ‘d’){
 header(”Location: docomo用URL”);
}elseif(get_mobileType() = ’s’){
 header(”Location: softbank用URL”);
}elseif(get_mobileType() = ‘a’){
 header(”Location: au用URL”);
}elseif(get_mobileType() = ‘w’){
 header(”Location: willcom用URL”);
}else{
 header(”Location: PC用URL”);
}

これでそれぞれに振り分けできると思います。

セキュリティ

今日は仕事で、とあるサイトを新しいサーバーにお引越しさせました。

ページ数の多いサイトでもないので余裕とか思ってたら、
PHPを使ってるページが真っ白。
一応パーミッションとかも見てみるけど特に問題もなく・・・

仕方がないのでエラーログを見てみると、
Notice:  Undefined variable:~
Notice:  Use of undefined constant~
・・・ってな感じのエラーが出てる。

まず最初の Notice:  Undefined variable:~
これは「変数が未定義です」という意味らしく。
エラーの出ていた場所を探ってみると
define(TEISUU,“定数”);
という定数を定義している部分があったのだけど、
define(“TEISUU”,“定数”);
こんな感じにダブルクォーテーションを入れたら直ったよ。
(ここでは全角になってますが実際は半角です)

というわけで次のエラーをチェック!

Notice:  Use of undefined constant~
これは「未定義の変数が使われてますよ」というような意味っぽい。
色々原因を探っていった結果、URLからGETで受け取るデータが受け取れてなかった。
本来ならGETの値を使うには $_GET["data"] みたいに使うべきなんだけど、
今回のPHPファイルでは $data で使われていた。
これを直したらエラーはなくなって正常に表示されました~!よかったぁ!

実はPHPの設定によっては上のようにそのまま変数として使うことも可能なようで、
まぁだからこそ引っ越す前のサーバーでは動いていたみたいなのですが。

PHP設定ファイル「php.ini」「register_globals」っていう項目で設定できるのですが、
これがOnになっていないと使えないようです。

だったら使えた方が便利じゃないかと思うかもだけど、セキュリティ的にはよろしくないらしい。
普通は「register_globals = Off」にしておくべきなのだろうと思います。
php.ini の代わりに .htaccess でも設定できます。
その場合は「php_flag register_globals off」と記述すればOKなようです。

で、なんでセキュリティ的にやばいのかというと、設定が On だと、
様々な変数汚染攻撃を招く危険性があるため、だそうです。
例えば仮に $tree っていう変数をPHP内で使っていたとして、
サイトの閲覧者がURLに「http://test.net?tree=0123」とか入力したら、好き勝手に変数の値を変えてしまうことが出来ちゃうってことなんだよね。

うーむ、今日はこのエラーの解決に時間がかかってしまったけど、
原因が特定出来てスッキリしたし、
セキュリティ対策についても考えさせられる貴重な時間だったな~。

Calendar
2012 年 2 月
« 1 月    
 1234
567891011
12131415161718
19202122232425
26272829  
Archive
Category
Other