移転しました。
2013年2月〜
http://kanonji.info/blog/

2008年11月〜2013年1月
http://d.hatena.ne.jp/kanonji/

はてなダイアリーに移転してたけど、そっからさらにWordPressでのブログに移転しました。
 
201302061607
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
別窓 | スポンサー広告
----------
Windows用ポータブルwebサーバ Apache Mobile
Blackdot.be :: Run Apache From USB

USBに入れて持ち歩けるApache。
スペックは以下の通り。

Features:

* Management Application
* Apache 2.2.x
o mod_deflate
o mod_ssl
* mod_security
* mod_perl
* PHP 5.1.2
* Perl 5.8

Requirements:

* Windows 2000, Windows XP or Windows 2003
* 256mb USB-key



PHPやPerlが組み込まれている上に、サイトには書いてないがSSLとwebDAVも組み込まれている。
256MBの容量があるUSBフラッシュメモリ等に入れておけば、Windows2000以上のPCがあれば直ぐにwebサーバが立ち上がる。
webアプリのデモやプレゼン、簡易の開発環境として使えそうという紹介をちらほら見かける。

PHPのちょっとしたツールの開発に使ってみたが、自分のWindowsマシンにApache入れてPHP入れてとしなくても良かったので確かに便利だった。
ただ、WindowsのPHPだからなのか、それともApache Mobileという特殊環境だからなのか、PHPの挙動が少しおかしい点があった。

変な挙動1:exec, system, shell_exec等を使う場合のファイルパスのあたり

Windowsサーバでexecコマンドなどを使う場合、シェルはDOSコマンドになる。
DOSコマンドでスペースを含むファイルパスを記述する場合、以下のように「"」で囲む必要がある。

"C:\Document and Settings"

逆に半角スペースを含まないファイルパスの場合「"」で囲っても囲まなくても問題は無い。

"C:\Windows"
C:\Windows

execコマンドで実行したいexeや引数としてファイルパスを渡す場合に半角スペースを含むならば、上記のように「"」で囲まなければならない。

おかしい挙動はここからだが、なぜか「"」で囲む必要が無い場合に囲むとうまくコマンドが実行されないといった動きがある。
具体例を挙げると以下のようになる。

下記からexec($cmd), system($cmd), shell_exec($cmd)などを実行する。

NGな例
$cmd = '"C:\example.exe" -a';
$cmd = 'C:\example.exe -a "D:\folder\example.txt"';
$cmd = 'C:\Program files\example.exe -a';
$cmd = 'C:\example.exe -a D:\My folder\example.txt';

OKな例
$cmd = 'C:\example.exe -a';
$cmd = 'C:\example.exe -a D:\folder\example.txt';
$cmd = '"C:\Program files\example.exe" -a';
$cmd = 'C:\example.exe -a "D:\My folder\example.txt"';

ファイルパスに半角スペースが必ず含まれる・含まれないと分かっている場合は回避できるが、実行毎に変わる場合に非常に困ることになる。

変な挙動2:\3を消すpreg_replace

これもファイルパスだが、文字列としてファイルパスをpreg_replaceしたときに起こった。
例えば以下のような文字列を置換対象(subject)としてpreg_replaceすると、\3が消えてしまう。
もちろん、\3の部分は置換とは無関係でも。

"c:\example\3test.jpg"

具体例で説明すると以下のようになる。

$pattern = '/\.jpg/';
$replacement = '.gif';
$sucject = 'c:\example\3test.jpg';
$result = preg_relace($pattern, $replacement, $sucject);
echo $sucject;
echo $result;

"c:\example\3test.jpg"
"c:\exampletest.gif"


とりあえずは上記2つの挙動を除けば、一応普通に使えている。
上記2つの挙動がApache Mobile固有なのか、Windows上のApache+PHPだからなのかは、あまり検証していないので分からない。
スポンサーサイト
別窓 | 開発環境 | コメント:0 | トラックバック:0
200704140851
| プログラマのチラシの裏 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。