2014/10/04(土) [n年前の日記]
#1 [pc] Windows上でWebサーバを動かそうとしてるところ
仮想PC上の Linux で Webサーバ Apache を動かして、CGIの動作確認をしようとしていたのだけど、エディタその他の関係で、なんだか作業が面倒臭いなと。なので、Windows7 x64上でWebサーバを動かして、CGIの動作確認ができないものかと。
普段、ちょっとしたCGIを動かす時は、 _04WebServer を使っているのだけど。URL書き換え(Apache の mod_rewrite 相当)ができないので、ちと厳しくて。 *1
普段、ちょっとしたCGIを動かす時は、 _04WebServer を使っているのだけど。URL書き換え(Apache の mod_rewrite 相当)ができないので、ちと厳しくて。 *1
◎ IISを使おうとして挫折。 :
しばらく前に、IIS 7.5 を導入したので、ソレを使ってCGIを動かせないものかと少し試してたのだけど。フォルダのアクセス権云々がちゃんと設定できてないようで、思ったように動かず。結局諦めた。
◎ XAMPP の Apacheを使う。 :
XAMPPもインストールしてあるので、ソレを使ってCGIを動かそうとしたものの、これまた動かず。
原因は、.cgi の1行目に書いてある Perl のパスだった。
Linux 環境なら、えてして、
ところが XAMPP の Apache は、.cgi の1行目をちゃんと見てるので、Windows 環境の perl のパスにしないと動いてくれない。
しかしこれでは、cgi をLinux上にFTPアップロードしようとする時に、毎回パスを書き換えないといけないので困ってしまう。
以下のページによると、解決策は2つあるらしい。
_Unix の CGI ファイルを Windows 上で動かす
_Windows + xampp + perl-addonによるMovable Typeプラグインの開発 | kwLog
一つは、C:\usr\bin\perl.exe を作ってしまう方法。これはシンボリックリンクを使えば作れる。ただし、C:\usr\bin\ 内に Perl しか存在しない妙な構成になる。Apache + Perl しか使わない、という状況ならいいけれど…。
もう一つは、httpd.conf 内で ScriptInterpreterSource Registry-Strict を指定して、レジストリで .cgi と Perl.exe を関連付けてしまう方法。
今回は後者を試してみた。以下の内容で execcgi.reg というファイルを作成。perlのパスは自分の環境に合わせておくこと。
httpd.conf に指定。今回は userdir に指定した。C:\xampp\apache\conf\extra\httpd-userdir.conf を開いて、1行追加。
しかしこれでは、.cgi を Perl でしか動かせないような…。
原因は、.cgi の1行目に書いてある Perl のパスだった。
Linux 環境なら、えてして、
#!/usr/bin/perl
#!/usr/local/bin/perlを指定してあるものだけど。04WebServer はその1行目を無視してCGIを実行するので今まで困らなかったわけで。
ところが XAMPP の Apache は、.cgi の1行目をちゃんと見てるので、Windows 環境の perl のパスにしないと動いてくれない。
#!"C:\xampp\perl\bin\perl.exe"
#! C:/xampp/xampp/perl/bin/perlみたいな。
しかしこれでは、cgi をLinux上にFTPアップロードしようとする時に、毎回パスを書き換えないといけないので困ってしまう。
以下のページによると、解決策は2つあるらしい。
_Unix の CGI ファイルを Windows 上で動かす
_Windows + xampp + perl-addonによるMovable Typeプラグインの開発 | kwLog
一つは、C:\usr\bin\perl.exe を作ってしまう方法。これはシンボリックリンクを使えば作れる。ただし、C:\usr\bin\ 内に Perl しか存在しない妙な構成になる。Apache + Perl しか使わない、という状況ならいいけれど…。
もう一つは、httpd.conf 内で ScriptInterpreterSource Registry-Strict を指定して、レジストリで .cgi と Perl.exe を関連付けてしまう方法。
今回は後者を試してみた。以下の内容で execcgi.reg というファイルを作成。perlのパスは自分の環境に合わせておくこと。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.cgi\shell\ExecCGI\Command] @="C:\\xampp\\perl\\bin\\perl.exe %1"エクスプローラで右クリックして「結合」を選択。レジストリに、「.cgi はこのプログラムで動かせ」と登録される。
httpd.conf に指定。今回は userdir に指定した。C:\xampp\apache\conf\extra\httpd-userdir.conf を開いて、1行追加。
# -*- mode: apache -*- <IfModule userdir_module> UserDir "C:/home/web/localapacheusers/*/public_html" <Directory "C:/home/web/localapacheusers/*/public_html"> AllowOverride All Options ExecCGI MultiViews Indexes FollowSymLinks Includes Require all granted # 以下を追加 ScriptInterpreterSource Registry-Strict </Directory> </IfModule>要するに、 <Directory "〜"> 〜 </Directory> の中に、
ScriptInterpreterSource Registry-Strictを追加する。これで、.cgi の1行目を無視して、Windowsのレジストリに登録されたプログラムで .cgi を呼び出すようになる。
しかしこれでは、.cgi を Perl でしか動かせないような…。
◎ XAMPP の Apache について気付いたこと。 :
エラーログ C:\xampp\apache\logs\error.log を眺めていたら、NameVirtualHost *:80 という指定が云々とエラーが出ていた。Apache 2.4 からは、該当指定はしなくてもよくなったらしい。
_Apache2.4ではconfの書き方が変わりました。 - Qiita
_Apache2.4ではconfの書き方が変わりました。 - Qiita
*1: ちなみに、i-mode用アプリを作ってた頃は、04WebServerは帯域制限が手軽に設定して動作確認できたので重宝してました。
[ ツッコむ ]
#2 [hns] XAMPP上でhnsを動かすと画像サイズ取得が正常動作しない
Windows + Perl で hns を動かすと画像サイズ取得がおかしくなるのでメモ。hns-lite-2.19.9.tar.gz で確認。
ちなみに、jpeg に対しては binmode(IN); がちゃんと呼ばれてた。
- 画像サイズの取得処理は、lib\Image\Size.pm で行ってる。
- gif または png を open した直後、バイナリで開けてるものと決めつけて各値を取り出してる。Linux上なら、このままでも問題無い。
- しかし、Windows + Perl では、ファイルを open するとテキストデータとして開いてしまうので、妙な値を取り出してしまう。
ちなみに、jpeg に対しては binmode(IN); がちゃんと呼ばれてた。
[ ツッコむ ]
以上、1 日分です。