2015年12月02日


実運用では無く、学習用の WWWサーバーとしてはこれ以外に無い『AN HTTP Server』ですが、古いソフトなので使い方にコツがあります

AN HTTP Server が何故か落ちる場合は、レジストリの AnHttpd(HKEY_LOCAL_MACHINE\SOFTWARE\AnHttpd) を全て削除して下さい。何らかのの理由で整合性が保たれなくなって落ちています。httpd.exe を実行するとデフォルトの正しいエントリが作成されます。そしてもちろんの事ですが、実行は管理者権限で実行してください。

以下は、実行中の httpd.exe を終了させ、管理者としてカレントの httpd.exe を実行して、スクリプトのあるフォルダをドキュメントルートにします。(インデックス表示を許可するようにしています)
' 管理者として実行を強制する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

Dim Fs,WshShell

Set WshShell = CreateObject("WScript.Shell")

Const ForWriting = 2
Set Fs = CreateObject("Scripting.FileSystemObject")
strCurPath = WScript.ScriptFullName
Set obj = Fs.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurPath = obj.Path

Call WshShell.Run( "cmd /c taskkill /im httpd.exe /f", , True )

Call WshShell.RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\AnHttpd\default\DocumentRoot\",strCurPath )
Call WshShell.RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\AnHttpd\default\Index\Browsable","Off" )
WshShell.Run(strCurPath & "\httpd.exe")

※ php.ini では、cgi.force_redirect = 0 を設定してください。

WEB アーカイブからダウンロードは可能です。

とにかく、今年( 2015年 )の2月5日以降に、何があったのか配布サイトのトップの HTML が無くなっています。ダウンロードリンクはまだ生きていますが、いつ無くなっても不思議は無いです(なくなりました)。



Apache を使ってもいいのですが、インストールいらずで 軽量なので、USB に気軽にいくつでも入るので便利この上無いです。( USB への使い方は、エイリアス無しでルートにディレクトリを掘って何パターンも保存できると言う意味です )

しかし、確かにいろいろ面倒な事が山積みではあるので、知らない人が使おうと思う事はまず無いと思います。ですが、以降の手順であればすぐに PHP を使っていろいろな事ができます。

大前提!! 管理者権限で起動する

これを守らないと、環境によっては訳が解らない事になります。



ショートカットを作成して、その詳細設定ボタンから常に管理者権限で起動するようにしておきます。これは、AN HTTPD がレジストリを使ってデータを保存するので、通常起動だと情報が意図しない場所に保存されて読み出しできなくなるからです。

"C:\httpd142p" に保存する

これは、後々小回りが利くという意味でもありますが、Program Files は、Windows の権限の扱いが面倒だと言う事と、フォルダ名にスペースが混じっているという問題があります。Cドライブに自分が必ず普通にアクセスできる権限で保存します。二つ欲しければ違う名前にします( 但し、一度に起動できるのは一つまでですし、切り替えるにはドキュメントルートの変更が必要です / レジストリは同じ場所になるので )

余計な機能は使わない

1) 引数を与えてレジストリ内に複数環境を作成する事ができる
2) サービスとして登録できる

この二つの機能は、現在の環境(Windows7、Windows8.1)を考えると不向きですし、もともと簡単に実行環境を作る事が目的なので使ってはいけません。

PHP の登録

AN HTTP Serverは、フォルダの参照ができないので、自分でパスをコピーしてペーストしてやる必要があります。そして、PHP の場合は、チェックボックスを必ず二つチェックします。



以下は、php フォルダに置いて実行すると、php-cgi.exe を AnHttpd に自動登録するスクリプトです
' 管理者として実行を強制する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

Dim Fs,WshShell

Set WshShell = CreateObject("WScript.Shell")

Const ForWriting = 2
Set Fs = CreateObject("Scripting.FileSystemObject")
strCurPath = WScript.ScriptFullName
Set obj = Fs.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurPath = obj.Path

const HKEY_LOCAL_MACHINE = &H80000002
Set obj = GetObject _
	("winmgmts:\\.\root\default:StdRegProv")
strKeyPath = "SOFTWARE\AnHttpd\default\Progs\Names"
obj.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames, arrValueTypes
nCount = 0
bEntry = false
For Each strValue In arrValueNames
	nCount = nCount + 1
	strValue2 = UCase(strValue)
	if strValue2 = ".PHP" then
		bEntry = true
		Call WshShell.RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\AnHttpd\default\Progs\Names\" & strValue,strCurPath & "\php-cgi.exe" )
	end if
Next

if not bEntry then
		Call WshShell.RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\AnHttpd\default\Progs\Names\.php",strCurPath & "\php-cgi.exe" )
		Call WshShell.RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\AnHttpd\default\Progs\Attrs\.php", 7, "REG_DWORD" )
		Call WshShell.RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\AnHttpd\default\Progs\Count", nCount+1, "REG_DWORD" )
end if


インデックスを表示させる



これを最初に必ずセットしておきます。


ここから先はお好みで

エイリアスを設定すると、ルート以外を参照可能になります



後は、ログの設定でトレースを出力するようにすると、ファイルのアップロードの際の内部フォーマットを確認できます。必要ならば、CGI 検査を出力するというチェックボックスが一般タブの下のほうにあります。

細かい話で言うと、Apache で動作するバイナリデータの直アップロードとかは動作しないので注意して下さい。さらに、C# とかで作った exe なんかを自作 CGI として動作させる事は可能です。




posted by at 10:07 | Comment(0) | 開発用 | このブログの読者になる | 更新情報をチェックする


Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します