2018年03月30日


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

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

これを守らないと、環境によっては訳が解らない事になります。
httpd.exe のプロパティの『互換性タブ』の一番下の特権レベルで、『管理者としてこのプログラムを実行する』ほうが間違い無いです。


▼ 以下は、ショットカットの場合の設定 ショートカットを作成して、その詳細設定ボタンから常に管理者権限で起動するようにしておきます。これは、AN HTTPD がレジストリを使ってデータを保存するので、通常起動だと情報が意図しない場所に保存されて読み出しできなくなるからです。
AN HTTP Server が何故か落ちる場合は、レジストリの AnHttpd(HKEY_LOCAL_MACHINE\SOFTWARE\AnHttpd) を全て削除して下さい。何らかのの理由で整合性が保たれなくなって落ちています。httpd.exe を実行するとデフォルトの正しいエントリが作成されます。そしてもちろんの事ですが、実行は管理者権限で実行してください。
Windows SDK の mt.exe を使って、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 を使っていろいろな事ができます。

"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 21:29 | Comment(0) | 開発用 | このブログの読者になる | 更新情報をチェックする


2017年12月20日


XCOPY 用バックアップスクリプト(VBS) を作成する createBackupScript.vbs / 2回目からは新しいファイルのみバックアップ



ダウンロードした zip の中に createBackupScript.vbs があります。それを実行するだけです。実行すると、以下のディレクトリ選択ダイアログが表示されます。



バックアップ先は、createBackupScript.vbs が存在するディレクトリになります。保存するディレクトリはネットワークドライブ内のディレクトリを指定すると、あちこちに PC の重要なファイルやフォルダを狙い撃ちでバックアップ可能になります。

バックアップはカレントになるので、バックアップ場所を変えたい場合は、createBackupScript.vbs を別の場所へコピーして実行して再びバックアップスクリプトを作成するか、既存のバックアップスクリプトのコピー先のフォルダのパスを変更します。

スクリプトコード内の strTarget の内容は、必要に応じて運用者が解りやすい日本語に変えるといいと思います。

▼ strTarget は、この表示にのみ使用されています


※ ▼ "C:\httpd142p" を指定した結果


時間がかかるのは最初の実行時のみです。2回目からは新しいファイルしかコピーしません。

▼ 最初


▼ 直後にもう一度実行すると


作成されたスクリプトのコード
strName = Replace( UCase(WScript.ScriptName), ".VBS", "" )
strTarget = "C:\httpd142p"
if MsgBox( strTarget & vbCrLf & "のバックアップを開始します。よろしいですか?", 1 ) = 2 then
	Wscript.Quit
end if
Set WshShell = Wscript.CreateObject( "WScript.Shell" )
ExecCommand = "cmd.exe /C ""xcopy.exe ""C:\httpd142p"" ""D:\backup2\httpd\" & strName & "\"" /D /E /C /S /Y & PAUSE"""
Call WshShell.Run( ExecCommand )




▼ 以下概要
------------------------------------------------------------------------

ディレクトリ選択でバックアップするディレクトリを決定し、カレントディレクトリにバックアップする為のスクリプトを作成します。

そのスクリプトを実行すると、カレントに目的のディレクトリをバックアップとしてコピーします。
XCOPY なので、2回目以降は新しいファイルのみコピーします

▼ 使用するオプション
/D : コピー元の日付がコピー先の日付より新しいファイルだけをコピーします
/E : ディレクトリまたはサブディレクトリが空であってもコピーします
/C : エラーが発生してもコピーを続けます
/S : 空の場合を除いて、ディレクトリとサブディレクトリをコピーします
/Y : 既存のファイルを上書きする前に確認のメッセージを表示しません

一番重要なのは、/D です。/S /E で、存在するディリクトリはすべてコピーされます。/E /Y によって、最後まで停止する事なく実行されます。

追加で使う事が想定されるオプション

コピーしたくないディレクトリやファイルがある場合、以下のように指定します。

/EXCLUDE:ファイルのパス

ファイルのパスが示すテキストファイル内に、除外するディレクトリやファイルにある文字列の一部を1 行に 1 つずつ記述します。

その文字列が、コピー対象ファイルの絶対パスの一部と一致した場合、そのファイルはコピーから除外されます。たとえば、"\obj\" という文字列を指定するとディレクトリ obj の下の全ファイルが除外 されます。".obj" という文字列を指定すると .obj という拡張子のファイルがすべて除外されます

' ***********************************************************
' 処理開始
' ***********************************************************
Set Fso = Wscript.CreateObject( "Scripting.FileSystemObject" )
Set Shell = Wscript.CreateObject( "Shell.Application" )

' ***********************************************************
' 実行中ディレクトリの取得
' ***********************************************************
strPath = Wscript.ScriptFullName 
Set objFile = Fso.GetFile( strPath )
strBackupFolder = Fso.GetParentFolderName( objFile )

' ***********************************************************
' バックアップ対象ディレクトリの取得
' ***********************************************************
' マイ コンピュータを基準にディレクトリ選択
Set objFolder = Shell.BrowseForFolder( 0, "バックアップするフォルダを選択してください", &H4B, _
	"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" )
if objFolder is nothing then
	WScript.Quit
end if
if not objFolder.Self.IsFileSystem then
	WScript.Echo "ファイルシステムではありません"
	WScript.Quit
end if

strTargetFolder = objFolder.Self.Path
strName = Replace( strTargetFolder, ":", "" )
strName = Replace( strName, "\", "_" )
strName = Replace( strName, " ", "" )
strName = "BK_" & strName

' ***********************************************************
' スクリプト作成
' ***********************************************************
Set OutFile = Fso.OpenTextFile( strBackupFolder & "\" & strName & ".vbs", 2, True )

OutFile.WriteLine "strName = Replace( UCase(WScript.ScriptName), "".VBS"", """" )"
OutFile.WriteLine "strTarget = """ & strTargetFolder & """"
OutFile.Write "if MsgBox( strTarget & vbCrLf & ""のバックアップを開始します。"
OutFile.WriteLine "よろしいですか?"", 1 ) = 2 then"
OutFile.WriteLine "	Wscript.Quit"
OutFile.WriteLine "end if"

OutFile.WriteLine "Set WshShell = Wscript.CreateObject( ""WScript.Shell"" )"
OutFile.Write "ExecCommand = ""cmd.exe /C """"xcopy.exe """""
OutFile.Write strTargetFolder & """"" """""
OutFile.Write strBackupFolder & "\"" & strName & ""\"""""
OutFile.WriteLine " /D /E /C /S /Y & PAUSE"""""""
OutFile.WriteLine "Call WshShell.Run( ExecCommand )"

OutFile.Close

WScript.Echo "バックアップスクリプト : " &  strName & ".vbs" & " を作成しました"




タグ:VBScript
posted by at 12:07 | Comment(0) | 職人的 Windows | このブログの読者になる | 更新情報をチェックする


2016年12月28日


『しねきゃぷしょん』/ フリーフォント / ダウンロードは Vectorから

2016 年に閉鎖されました。ダウンロードは現在 Vector から可能ですが、少し古いバージョンになります。



最新バージョンは、インターネットアーカイブを chiphead.jp/font/htm/cinecaption.htm で探して 2016 年の最初のほうでダウンロードが可能だと思います。

ダウンロードアーカイブ内の cinecaption2.28.txt より

●配布条件
このフォントは無料ですが著作権は放棄しておりません。
ですのでフォントの改造・著作権表示の改変を禁止します。
再配布に関しては制限を緩和したので、自由に配布していただいてかまいません。

本来の条件として 再配布は可です。

●著作権関係
このフォントのひらがな部分のデザインは「雑念の塊」氏が、カタカナ、漢字、英字、記号部分のデザイン及びフォント作成はchipheadが行いました。

----------------------------------------

お二人の URL がこの後示されていますが、chiphead 氏、雑念の塊 氏 共に閉鎖されています。ただ、『雑念の塊』というハンドルは検索で見つける事ができます。但し、ご本人がどうかは不明です。



posted by at 22:33 | Comment(0) | フリーフォント : 不明 | このブログの読者になる | 更新情報をチェックする



弐伍六(ニゴロク)/ フリーフォント

2009 年に閉鎖されていますが、フォントはベクターからダウンロードできます。文字種は少ないので使いどころは少し難しいかもしれません。(漢字数字に特徴があります)



!"#$%&'()* ,-./0123456789
:;<=>?@ABCDEFGHIJKLMN
OPQRSTUVWXYZ[\]^_`{|}~
´¨‐’°†‡μπ
▼ readme フリーなのでご自由にお使いください。 ーーーーーーーーーーーーーーーーーーーーーーーー (著作権について) 著作権は、「256DESIGNs」にあります。 非営利目的の個人での使用は構いませんが商用利用は一度ご連絡ください。 著作者の許可なく販売したり、営利目的の製品に添付する事を固く禁止します。 また、このフォントを使用しておこる、いかなる損害に対しても一切の責任を負いません。 著作者を特定できないので、商用は無理です。
posted by at 22:09 | Comment(0) | フリーフォント : 不明 | このブログの読者になる | 更新情報をチェックする


2016年08月13日


Windows ではフォントファイルのヘッダ(OTTO)で otf かどうかの判別が行われているそうです

Windowsではsfnt versionがアスキー文字でOTTO(['0x4f54', '0x544f']に相当)である時のみフォントをCFFとして解析することに注意。



GD の imagettftext で拡張子を .ttf に変更して動作したので、後からどちらのフォーマットなのか確認するのに必要になりました。


関連する記事

「送る」に入れる簡易ダンプ




posted by at 16:16 | Comment(0) | フリーフォント | このブログの読者になる | 更新情報をチェックする


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。