掲示板お問い合わせランダムジャンプ



この広告は30日以上更新がないブログに表示されております。 新しい記事を書くことで広告を消すことができます。

2007年09月11日
Vista(x64) + IIS7.0 + PHP5 + ISAPI

Vista(x64) + IIS7.0 + PHP5 + ISAPI な環境で PHP を動かすのにかなり苦労したのでメモっておく。

ポイントとしては、 64 ビット版 OS で PHP を ISAPI を動かそうとすると、以下のようなエラーが発生するということだ。
HTTP エラー 500.0 - Internal Server Error

説明: ISAPI フィルタ "x:\PHP\php5isapi.dll" での LoadLibraryEx の呼び出しに失敗しました
エラー コード: 0x800700c1
通知: 不明
モジュール: IIS Web Core
要求された URL: http://localhost:80/
物理パス: C:\inetpub\wwwroot
ログオン ユーザー: 未定義です
ログオン方法: 未定義です
ハンドラ: StaticFile

そこで設定のポイントをまとめてみた。


◆ IIS7.0 のインストール

IIS7.0 をインストールしてない場合は、まず IIS7.0 をインストールする。
インストールするには、コントロールパネルから「プログラムと機能」 -> 「Windows の機能の有効化または無効化」を実行し、「Internet Information Services」をインストールする。


◆ PHP5 のインストールと設定

PHP5 のバイナリを http://www.php.net/downloads.php からダウンロードし、ローカルに展開する。
通常は「PHP 5.x.x zip package」というものをダウンロードすればよいと思う。

PHP をローカルに展開したら、 php5ts.dll を Windows フォルダ (ex: C:\Windows) にコピーする。 Windows フォルダにコピーするのが嫌であれば、環境変数 PATH にローカルに展開した PHP のパスを書く。個人的には環境変数に書く方法をおすすめする。PHP をバージョンアップする際などにフォルダの置換のみですむからだ。

次は php.ini-dist をコピーして php.ini を作成する。セキュリティを重視するのであれば、 php.ini-dist ではなく php.ini-recommended をコピーすべきであろう。
作成した php.ini を開き、必要であれば、 「extensions_dir」や「extension=php_mbstring.dll」の部分を適宜変更する。

適宜設定した php.ini は決められた場所に配置する必要がある。例えば、 Windows フォルダ (ex: C:\Windows) に配置する方法があるが、個人的にはレジストリに php.ini のあるフォルダのパスを書く方式の方がよいと思う。
レジストリキーは以下のようになる。
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath
ただし、ここで注意することがあり、後述の「IIS7.0 の設定」で 32 ビットアプリケーションを WOW64 モードとして動くように設定した場合は、レジストリキーが以下のように変わる。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\PHP\IniFilePath
「IniFilePath」キーは文字列値で、ここに php.ini が存在するフォルダのパスを書く。私が試した範囲ではパスの区切り文字は "\" で動作した。


◆ IIS7.0 の設定

IIS7.0での設定方法の一例を示す。
コントロールパネルを開いて、「管理ツール」 -> 「インターネット インフォメーション サービス (IIS) マネージャ」を開く。 (クラシック表示の場合)
IISを管理するためのウィンドウが開くので、左側のツリーのトップのホスト名の部分を選択する。右ペインにある「ISAPI フィルタ」を実行し、追加を選択する。
ここでは、以下のようにしておく。
フィルタ名: php (これはわかれば何でもよい)
実行可能ファイル: ローカルに展開したphpフォルダにある php5isapi.dll のパス

次に、左ツリーのトップのホスト名の部分を選択し、右ペインにある「ハンドラ マッピング」を実行する。「スクリプトマップの追加」を選択し、以下のように設定する。
要求パス: *.php
実行可能ファイル: ローカルに展開したphpフォルダにある php5isapi.dll のパス
名前: php (これはわかれば何でもよい)
この設定で OK を押すと「このISAPIを有効にしますか?・・・(略)・・・」というメッセージが出るが、ここでは「はい」を選択してかまわない。「はい」を選択すると、「ISAPI と CGI の制限」に設定が追加される。

次は左ツリーの「アプリケーション プール」を選択し、右ペインに出てくるものから、 php スクリプトを実行したい Web サイトで設定されているアプリケーションプールを選択して、「詳細設定」を開く。既定の状態だと「DefaultAppPool」になってると思うので、通常はこれを選択して「詳細設定」を開けばよい。
「詳細設定」を開くと、「32 ビット アプリケーションの有効化」」というのがあるので「true」に設定する。この設定は 32 ビットアプリケーションを WOW64 モードで動かすようにするためのもので、この設定を行わないと IIS7.0 を起動するときに php5isapi.dll のロードに失敗し、冒頭に書いたようなエラーが発生する。

以上の設定で、 phpinfo() のみを書いた php ファイルをブラウザから見れば、おそらく PHP が動作していることが確認できるだろう。


◆ おまけ

Windows Server 2008 では、 ISAPI だけでなく FastCGI という選択肢も増える。
興味のある人は以下のサイトもチェックしてみるいいかも。
 [HOW TO] IIS7.0でFastCGI+PHP5環境を作ってみる - http://forums.microsoft.com/TechNet-JA/ShowPost.aspx?PostID=2113684&SiteID=36

[ 投稿者:名無し at 00:18 | コンピュータ | コメント(1) | トラックバック(1) ]

2007年04月26日
Java Script のパワー
MSDN Magazine の記事だけども、 JavaScript のすごさがわかる記事が出ている。

JavaScript
オブジェクト指向の手法によって高度な Web アプリケーションを作成する


C# でリフレクションや匿名メソッドに触れたことのある人なら JavaScript のパワーは容易にわかるのではないかと思う。
[ 投稿者:名無し at 22:44 | コンピュータ | コメント(0) | トラックバック(0) ]

2007年03月12日
Teredo 関連
Teredo 関連のメモ。

ウィンドウズ開発統括部 - Teredo
http://www.exconn.net/Blogs/windows/archive/2006/03/21/8134.aspx

ウィンドウズ開発統括部 - Teredo 対応のアプリケーション開発
http://www.exconn.net/Blogs/windows/archive/2006/03/25/8329.aspx

IPv6使ってP2Pソフト作ってみたいなぁ。
[ 投稿者:名無し at 23:03 | ソフト開発関連 | コメント(0) | トラックバック(1) ]

2006年11月14日
eEye Security Forum
この資料はこの前実施されたeEye Security Forumのもので、Winnyとかリバースエンジニアリングに興味ある方どうぞ。
http://www.scs.co.jp/eeye/materials/index.html

うまく資料がダウンロードできないようであれば、こっちで登録してからダウンしてちょ。
https://sec.scs.co.jp/eeye/shiryo.html
[ 投稿者:名無し at 00:00 | コンピュータ | コメント(0) | トラックバック(0) ]

2006年10月26日
Java言語の最新事情
あとで読んでおこ。

日本ソフトウェア科学会 チュートリアル
「Java言語の最新事情」
http://vh.itc.u-tokyo.ac.jp/java/

「Java 5.0 の新機能」
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/papers/pdf/JSSST-tutorial06.pdf

「Java によるアスペクト指向プログラミング」
http://www.graco.c.u-tokyo.ac.jp/~masuhara/papers/jssst-tutorial2006.pdf
[ 投稿者:名無し at 23:06 | Java | コメント(0) | トラックバック(0) ]

2006年10月03日
データバインディング
最近データバインディングについて調べてて、なんとなく BindingSource は理解しておいた方が良さそうだと感じてたところへ、「MSDN Flash 2006/10/3」でタイムリーな記事を発見した。
あとで精読しておこう。。

舞台裏で: .NET Framework 2.0 における Windows フォーム データ バインドの改良点 (第 1 部)
http://www.microsoft.com/japan/msdn/net/winforms/wfbindp1.aspx

舞台裏で: .NET Framework 2.0 における Windows フォーム データ バインドの改良点 (第 2 部)
http://www.microsoft.com/japan/msdn/net/winforms/wfbindp2.aspx
[ 投稿者:名無し at 22:27 | .NET Framework2.0関連 (C#2.0、VS2005など) | コメント(0) | トラックバック(0) ]

2006年09月17日
Google API で遊んでみた。
Google API で遊んでみた。

開発環境
・Visual Studio 2005 Professional
・C# 2.0

Google API の公開されているサービス
http://api.google.com/GoogleSearch.wsdl


まず、 Google API を使うためには、ライセンスキーを発行してもらう必要がある。
http://api.google.com/createkey

ライセンスキーを発行してもらったら、 Visual Studio 2005 を立ち上げ、下の画面のようなフォームを作成する。

作成するフォームのイメージ


フォームを作成したら、 Google が公開している Web サービスの API を参照する設定を行う。
ソリューションエクスプローラを開いて、参照設定を右クリックして [Web 参照の追加] を選択する。

Web 参照の追加


選択するとウィザード画面が表示される。

Web 参照の追加 ウィザード


URL 欄に http://api.google.com/GoogleSearch.wsdl を入力し、移動をクリックする。
XML形式で記述された WSDL ファイルから Google が公開しているサービスが取得されるので、 [参照の追加] を選択する。

Web 参照の追加 Google API 取得


[Web References] に [com.google.api] という参照設定が追加される。

Web References 追加


ソリューションエクスプローラで [全てのファイルを表示] というボタンを選択し有効にさせると、 [com.google.api] の下に Reference.map というファイルがあり、その下に Reference.cs というファイルができている。

Reference.cs


Reference.cs というファイルをさらっと見た限り、どうやら WSDL ファイルから自動的にタイプセーフなソースコードが自動生成されているようだ。
とりあえず、ボタンをクリックしたときのイベントハンドラに次のコードを書いちゃおう。
このコードは「ぐーぐる」というキーワードで検索するものだ。
ライセンスキーのところは、冒頭に書いた URL のところで作成したものを入力すること。
また、必要に応じて「using WindowsApplication1.com.google.api;」を書いておくのを忘れないようにすること。

        private void button1_Click(object sender, EventArgs e)
        {
            GoogleSearchService gss
                = new GoogleSearchService();
            GoogleSearchResult gsr
                = gss.doGoogleSearch(
                "ライセンスキー",
                "ぐーぐる",
                0,
                5,
                false,
                string.Empty,
                false,
                "lang_ja",
                "utf-8",
                "utf-8");

            ResultElement[] re_array = gsr.resultElements;

            foreach (ResultElement re in re_array)
            {
                this.richTextBox1.AppendText(
                    "Title: " + re.title + Environment.NewLine
                    + "URL: " + re.URL + Environment.NewLine
                    + "Snippet: " + re.snippet + Environment.NewLine
                    + Environment.NewLine);
            }
        }
実行結果。

Google API で実際に検索結果を取得


最後に、オブジェクトブラウザでのぞいてみた画面でもどうぞ。

com.google.api をオブジェクトブラウザて


正直、10分ぐらいでこれだけのアプリが作れちゃう Visual Studio 2005 はすごいと思うが、それだけじゃできないわけで Google API を利用しやすい形で公開してくれている Google にも感謝だね。


<<補足>>
.NET の VB と C# 用のサンプルコードあったのね・・・。
これ書いた後で気づいたよ・・・orz
http://www.google.com/apis/index.html

<<API リファレンス>>
Google SOAP Search API Reference
http://www.google.com/apis/reference.html
[ 投稿者:名無し at 19:54 | .NET Framework2.0関連 (C#2.0、VS2005など) | コメント(0) | トラックバック(0) ]

2006年09月14日
.NET Remoting
MCP 取るときにちょっと勉強したんだけど、 .NET Remoting っていいねー。
ホント、すっごい楽だと思った。
もっと早くにこの便利さを知ってれば、今の仕事もすごく楽になっただろうになぁ・・・。

Visual Studio 2005でのリモーティングに役立つ13のヒント
http://japan.internet.com/developer/20060905/26.html
[ 投稿者:名無し at 22:45 | .NET Framework2.0関連 (C#2.0、VS2005など) | コメント(0) | トラックバック(0) ]

2006年08月29日
Security Engineering が無料公開らしい
セキュリティホール memo ML でゲットした情報だが、 Security Engineering という本が無料公開されたとのこと。
ってことで、ついでなのでここに書いておく。

とりあえず私は暇があったら見てみますね、っとそんな感じ。
[ 投稿者:名無し at 00:50 | コンピュータ | コメント(0) | トラックバック(0) ]

2006年08月24日
Java にもクロージャが入るらしい。
スラド経由で知ったのだが、 Java にクロージャが入るらしい。
個人的にはかなり大きいニュースだと思っている。

MYCOMジャーナル - ついにJavaにもクロージャ? - James Gosling氏らJDK7へ導入提案
http://journal.mycom.co.jp/articles/2006/08/23/java7closuer/

ホワイトペーパ
http://blogs.sun.com/roller/resources/ahe/closures.pdf

Ruby や Scheme などの (おそらくたいていの) 動的型付言語にはクロージャ (Closure: 閉包) というものがある。
簡単に言っちゃえば、関数の中にインラインで関数を書くことができるもので、インラインで書かれた関数の中からブロックの外の変数を参照できるのが、クロージャと呼ばれるものだ。
で、今回は Java でもクロージャが JDK7 でサポートされそう、ってなお話。

正直、 C# 使いとしては、最近の Java は C# の後追いばかりで、またかYOってな感じだったり。
C# の初期バージョンが出たときこそ、 C# は Java のいいところをパクってきたが、ここ最近は、列挙体 (Enum)、ジェネリクス (Generics)、 オートボクシング/アンボクシング (Auto-Boxing/Unboxing) といった感じで Java は C# のいいところをパクりまくってきて、で、ここにきてのクロージャだ。
まぁ、私自身は Java を否定するわけでもないので、お互いに C# と Java で切磋琢磨していって両方ともいい言語に成長していってくれれば文句はない。

さてさて、 C# には、 2.0 で匿名メソッドと呼ばれる機能が追加されたのだが、匿名メソッドはインラインで書かれたメソッドをデリゲート型に暗黙に変換する機能だったりするのだが、それがクロージャの機能を有している。
ただし、 C# の匿名メソッドは完全なクロージャではなく、どちらかというと、レキシカル・クロージャ (Lexical Closure) と呼ばれるもので、時たま変な挙動を起こす問題児だったりするのだが、非常に便利なものなので私は匿名メソッドなしではもう生きていくことができない体になってしまってたりする。

話しがころころ変わってるような気がするが、偶然 Ruby と C# でクロージャの書き方の比較をしたサイトを見つけたので紹介するが、一言感想を言うなら「 Ruby すっげええええ!」ってなところか・・・。
興味ある方は是非見てみることを強くオススメする。

Joe Walnes - The power of closures in C# 2.0
http://joe.truemesh.com/blog//000390.html

ま、 C# の進化はいまやとどまるところを知らずってな感じで、 3.0 ではラムダ式 (Lambda Expression) やら LINQ といった機能が入ってくるわけで、どんどん動的型付言語のいいところが入ってきてる。
そんなわけで言語としてはどんどん便利になっていくわけで、私自身はまだまだ当分は C# をメイン言語として生きていくことになりそうな感じ。
本当に Anders Hejlsberg 氏はいい仕事をしてくれてますよね。

ただ・・・、個人的な悩みというか考えなければいけないことがあって、従来の C 言語スタイルな言語に慣れ親しんできた人に、勉強会とかで教えるときにどうやればうまく説明できるのかなぁとかちょっと悩んでみたり・・・。

とりあえず Java に関しては、どんどんスクリプト言語との距離が近づいていってる感じで今後どうなっていくか楽しみではあったり。

書いてる途中から思ってたけど、この記事ってかなり C# マンセー記事だね・・・(´д`)
[ 投稿者:名無し at 22:24 | コンピュータ | コメント(2) | トラックバック(0) ]