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



この広告は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) ]

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年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) ]

2006年08月10日
Vista の Hotpatching
Vista には Hotpatching てな仕組みが導入される。
プロセス実行中でも、 DLL を置き換えることができるようで、なかなかおもしろそうだ。
あとで原文読んでおこう・・・。


社本@ワック Blog - Hotpatching (in-memory patching)
http://www.ailight.jp/blog/sha256/archive/2005/08/06/9243.aspx

NyaRuRuの日記 - Hot-patching
http://d.hatena.ne.jp/NyaRuRu/20060721#p2
[ 投稿者:名無し at 13:09 | コンピュータ | コメント(0) | トラックバック(0) ]

2006年06月10日
Windows Vista Beta 2 入れてみた。

Windows Vista Beta2 Japanese

Windows Vista Beta 2 日本語版が出たので入れてみた。
参考記事: http://pc.watch.impress.co.jp/docs/2006/0524/ubiq156.htm

今回 Vista を入れるにあたって、 Vista のためだけに献上できるマシンが空いてなかったので、 Virtual Server 2005 R2 上で Vista を入れることにした。
しかし一発でインストール完了というわけにはいかず、それなりに試行錯誤してインストールすることになってしまった。

まず Virtual Server 2005 のインストールから始めたのだが、これがなかなかどうしてうまく動作しないのだ。
「CGI Error」といったエラーが出て、なぜ動かないのか不可解なまま、 2 、 3 回再インストールしてしまった。
ようやくエラーが出ない動かし方がわかってきたので、 Vista のインストールに挑戦したのだが、これも一筋縄ではいかない暴れ馬?っぷりだった。

というのも、最初ダウンロードした Vista の iso イメージはプロダクトキーの認証までは通るのだが、そのあとがどうしても失敗するという不可思議な現象が発生していた。
そこで某掲示板にハッシュが載ってたので比較してみると、完全にハッシュが異なっていた。
イメージがそもそも壊れてたようだ。
しょうがないので、再度 Vista の iso イメージをダウンロードし直した。

また、 Vista 用に HDD を 6GB 確保したのだが、インストール時のパーティションを切ってフォーマットするときに最低 7GB 必要だって怒られてしまうというハプニングも経験した。
6GB あれば十分だろうという私のもくろみは完全にはずれた。
そこで Vista 様に容量を 20GB ほど確保してあげ、再度インストールに挑戦。
まぁ、 Virtual Server で領域を確保するときに容量可変で確保したので、実際に 20GB だけ物理ディスクの容量を消費するわけではない。

その後はスムーズに最後までインストールが完了。

ただ、どうしてもネットワークが外部に接続できない。
これは Virtual Server 側の設定の問題のようにも思えたが、もしかすると Vista 側で Virtual Server 用?のドライバを持ってないことも原因かもしれない。

そんなこんなでようやく Vista をリアルで体験。

↓の画像はサイドバーに時計やら電卓やら付箋紙をつけたものだ。個人的にはサイドバーはかなり気に入った。

Side Bar

適当に Vista をさわってみた感じとしては、 Vista Beta 2 の難点は、やたら重たいということと、設定を見たり変更したりするときにダイアログがやたら出るのがうざいというあたりか。
UI も大幅に変わってるので、どの設定をどこでやるのかを一発で探し当てるのは難しいかもしれない。

でも、現時点としての個人的な意見としては Vista は見た目がかっこくなっただけでなく、いろいろな機能が XP よりも改善されており、現時点での Vista に対するイメージはかなりよさげだ。
出たらすぐに買うということはないだろうが、 SP1 が出る頃には買うと思う。

追記: Virtual Server 上で動かすと GPU でのハードウェアアクセラレーションがきかないのでかなりもっさりで重たいが、ちゃんとしたマシンで動かせば軽いらしい・・・。
[ 投稿者:名無し at 18:56 | コンピュータ | コメント(0) | トラックバック(1) ]

2006年05月28日
本を買った
最近一部の人間の間で話題らしい赤間本を買ってきた。
赤間本というのは、「Microsoft Visual Studio 2005によるWebアプリケーション構築技法-ASP.NET 2.0上での参照系・更新系アプリケーションの設計」という本のことだ。

著者は赤間信幸さんなのだが、去年この人の講演を聞いたことがあるような気がする。
たしかやたら口が回る人で、よくあそこまで練習したなーと妙に感心した記憶があるw

でまぁ、さっそく ASP.NET2.0 の世界に入ってみたのだが、ほとんど C# での Windows プログラミングと変わらないなー。ってのがファーストインプレッション。
今まで培ってきた Windows プログラミングと同じ書き方ができるってのは大きいなーと思うのだが、やはり HTML と HTTP の上で動くものなのでいろいろと Web の世界特有の事柄はあるみたいだ。
まぁ Web プログラミングにはもともとかなり興味持ってたし、いつ仕事で使うかわからないので今のうちに ASP.NET2.0 を遊んでおこうと思う。
そんなわけで、今後暇があれば ASP.NET2.0 もいじっていく次第だ。

んで、買ったのは赤間本だけじゃなくて、ついでに「Effective C++ 第 3 版」も一緒に買ってきた。
こちらはまだ内容をちゃんと読んでないが、現在の C++ の事情に合わせて作り直されており、テンプレートなどについても書き加えられているようだ。
既に初版、第 2 版を持っている C++ プログラマーでも第 3 版は買って損はないと思う。
[ 投稿者:名無し at 00:41 | コンピュータ | コメント(0) | トラックバック(0) ]

2006年05月21日
実行時例外とは何か - その2
前回の記事では実行時例外とは何かについて書いた。
しかしもう一度 Java における例外をもう少し掘り下げ、 .NET とも比較し実行時例外について考えてみる。


Java における例外分類

Java 言語では次のように例外を分類している。
  • 実行時例外 (runtime exception)
  • エラー (error)
  • 検査例外 (checked exception)
実行時例外とは RuntimeException クラスおよびその派生クラスに分類されている例外だ。
コンパイラによる事前チェックが困難で実行時でないと判断ができないタイプであり、プログラムの通常ロジックにおいて回避可能な例外がこれに分類される。
たとえば、 NullPointerExceptionIndexOutOfBoundsException などがある。

エラーとは Error クラスおよびその派生クラスに分類されている例外だ。
このエラーは通常いつ発生するか予期できないものであり、アプリケーション実行に深刻な影響を及ぼすタイプだ。
また、アプリケーションレベルでキャッチするようなものでもないので、コンパイル時によるチェックは行われない。
代表例としては、StackOverflowErrorClassFormatError などがある。

検査例外とは、コンパイル時にチェックされる例外であり、 catch を強制される例外だ。
多くはプログラムの通常ロジックとは別の外的要因によって発生する例外だ。
IOException などがこれにあたる。


.NET における例外分類

.NET Framework における例外の分類は主に二つにわけられる。
  • ランタイムが送出する例外
  • アプリケーション定義の例外
.NET においては、ランタイムが出す例外はほぼきれいに SystemException から継承されたものに統一されている。
ほぼと書いたのは一部例外があるからだ。
これは Microsoft の設計ミスであり、そのため .NET 1.x と .NET 2.0 ではアプリケーション定義の例外に関する方針が変わっている。
.NET 1.x ではアプリケーション定義の例外は ApplicationException から派生させるというガイドラインが出ていたが、 .NET 2.0 においては Exception から直接派生するようにされている。
「プログラミング .NET Framework 」によれば、 SystemException と ApplicationException を各例外の基底型とすることにはあまり意味を感じないと書かれており、むしろ混乱するとも書かれている。
そこで、Microsoft も方針を切り替えたようだ。

ちなみに、 .NET (というより C# かな?) では Java とは違い検査例外というものがない。
私自身の経験上、コンパイル時にチェックしてくれる検査例外が欲しくなることはある。
しかし Bruce Eckel は検査例外は失敗であったと述べており、 C# のアーキテクトである Anders Hejlsberg も C# 言語への検査例外の搭載は見送った。

検査例外にはメリットもあるが、それよりもデメリットが大きい。
例えば、インターフェースで実装を切り替えるようなプログラムがあるとしよう。
スローする例外というのは、当然、実装によって大きく変わることがあり、呼び出し側はいちいち個々の実装を気にする必要が出てくる。
そのような場合、せっかくのインターフェースであるメリットをデメリットにしてしまい、全ての例外をキャッチするような愚行をしてしまう、といったことが多いようだ。
これは明らかにまずいデメリットだ。


改めて実行時例外とは何か

前回の記事では RuntimeException の Runtime は「実行時」という意味ではないと書いた。
しかし上記の Java の例外分類を見てみると、「コンパイル時にはチェックされないが、アプリケーション実行時にはチェックされる例外」という意味では Runtime を「実行時」と訳するのは、少なくとも Java においては間違いではないことになる。
Java 言語設計者達がどのようなプロセスを経て例外を三つに分けたかは私の知るところではないので、結局は Java における RuntimeException の Runtime が指す本当の意味はわからない。(Java に詳しい人、教えて)

逆に .NET Framework では上述のように例外がほぼきれいに二つに分類されているため、 Runtime Exception の Runtime は実行時というよりも、ランタイムが送出する例外ということで、 RuntimeException をランタイム例外とするのが正解で、むしろ実行時例外という用法は誤りではないかと思う。
[ 投稿者:名無し at 16:15 | コンピュータ | コメント(1) | トラックバック(0) ]