mieki256's diary



2014/10/04() [n年前の日記]

#1 [pc] Windows上でWebサーバを動かそうとしてるところ

仮想PC上の Linux で Webサーバ Apache を動かして、CGIの動作確認をしようとしていたのだけど、エディタその他の関係で、なんだか作業が面倒臭いなと。なので、Windows7 x64上でWebサーバを動かして、CGIの動作確認ができないものかと。

普段、ちょっとしたCGIを動かす時は、 _04WebServer を使っているのだけど。URL書き換え(Apache の mod_rewrite 相当)ができないので、ちと厳しくて。 *1

IISを使おうとして挫折。 :

しばらく前に、IIS 7.5 を導入したので、ソレを使ってCGIを動かせないものかと少し試してたのだけど。フォルダのアクセス権云々がちゃんと設定できてないようで、思ったように動かず。結局諦めた。

XAMPP の Apacheを使う。 :

XAMPPもインストールしてあるので、ソレを使ってCGIを動かそうとしたものの、これまた動かず。

原因は、.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

*1: ちなみに、i-mode用アプリを作ってた頃は、04WebServerは帯域制限が手軽に設定して動作確認できたので重宝してました。

#2 [hns] XAMPP上でhnsを動かすと画像サイズ取得が正常動作しない

Windows + Perl で hns を動かすと画像サイズ取得がおかしくなるのでメモ。hns-lite-2.19.9.tar.gz で確認。 解決策は、open 直後に binmode(IN); を入れて、「バイナリデータとして扱え」とPerlに教えてやること。

ちなみに、jpeg に対しては binmode(IN); がちゃんと呼ばれてた。

以上、1 日分です。

過去ログ表示

Prev - 2014/10 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project