ApacheでASP
Microsoft Visual Express Edition のすばらしさから考えて、Microsoft Visual Web Developer を使えば、Webアプリケーションも容易に作れるに違いないと思っていました。
IIS(windows)サーバが使えれば問題ないわけですが、今使えるサーバで試してみました。
http://mikeo410.wsp1.net/asp.php/Default.aspx
1.自問自答
- ASPとは
Active Server Pages の略で、サーバーサイド・プログラミングを含む開発手法
- ASP.NETとは
.Net 環境のASP。
- Visual Web Developer での開発の概要は
1)FTPやHTTPでサーバ上のプロジェクト内のファイルを操作する。
2)ローカルでは、開発用サーバーが付いていて、ブレークポイントなど高機能なデバッグが可能
3)Apacheサーバーではデバッグできない
- mono のASPサポートは
1)mod_mono - ApacheにASPサーバーの機能を追加する(権限ないと組み込めない)
2)xsp - Httpdとは別にASPサーバーを動かす(権限ないとポートが開けない)
- アプリケーションでASPサーバ機能が作れるか
.Netには、SimpleWorkerRequestクラスがあり、aspxからhtmlへの変換ができる。
- monoを管理者権限なしでインストールできるか
ユーザディレクトリにプログラムを入れて、四つの環境変数を設定すれば動作する。
- Apache を介して、ブラウザと遣り取りする必要があるデータは
1)HTMLのダウンロード - CGI、スクリプティングを行う主目的なので問題ない
2)レスポンスヘッダ - スクリプトの実装によるが可能
3)POSTの内容 - スクリプトの実装方法によるが取得可能
4)GETの情報 - URLの文字列が取得できれば良い
- CGIとHTTP情報の受け渡しのルールは
1)httpd は、環境変数にリクエストヘッダの情報をセットする
2)POSTの内容は、標準入力でCGIに渡す
3)CGIの標準出力をブラウザに送る。レスポンスヘッダも送れる。
- monoを起動する方法は
PHPやPerlなど、サーバが実行許可するスクリプトから起動する。
スクリプトは、PATHなどの環境変数を設定して、C#で書いたサーバー機能の.exeファイルを引数に、monoを起動する。
サーバー機能の.exe は、手元のパソコンのVisual C# Expressで作る。
- Apache 経由で起動するスクリプトの考慮点は
1)CGIはインタフェースが一律と考えられるが、設定によって許可されていない限り使えない。
2)mod_php4、mod_php5、mpd_perlなど、Apacheのモジュールの場合は、Apacheとのインタフェースはモジュール次第。
2.上手くいかなかったこと
- Perl(CGI)
手元のxampplite環境では、.htaccessを設定して問題なくASPサーバ動作ができたが、肝心のレンタルサーバではスクリプトを実行できなかった。
- mod_php5
レンタルサーバでPerlが使えなかったことから、最終的に mod_php5 を採用。
この過程で試行錯誤したこと。
1)PHPの header() でないとレスポンスヘッダが送れない。標準出力ではHTML部分と同じ扱いになる。したがって、C#のプログラムからスクリプトに戻ってレスポンスヘッダを送る必要がある。
2)POST の内容が標準入力で読み出せない。PHPで file_get_contents('php://input') として読み出し、パイプでC#のプログラムに渡した。
- アプリケーションのサンプルで、アプリケーションのソースコードをTextBoxに表示してみたが、.aspx は上手くいかなかった。
- potentially dangerous Request.Form value was detected from the client (TextBox1="<%© Page Langua...").
と、警告されてしまう。
表示そのものは問題なく行われるが、その後の操作で内容がPOSTされるためにエラー検出されているようだ。
- Visual Web Developer のデフォルトはSJIS。
UTF-8で使いたいが、まだ手順が確立できない。
1)UTF-8を使う場合、BOMなしにしないと上手くいかない。ApacheやPHPとの連携で問題がある。
2)Visual Web Developer のファイル保存のオプションには、BOM付しかないようだ。
3)BOMなしをVisual Web Developer 自身は自動認識できる。(オプションあり)
4)ASCIIしか入っていないファイルは、SJISもUTF-8もまったく同一。日本語を入れたときからSJISになる。日本語を入れたらUTF-8に変換しないといけないが、これを忘れる。
3.monoのインストール
mono-2.0.1.tar.bz2 をレンタルサーバー上でビルドしました。(httpだけなので、ファイルのownerはすべてApacheになります。)
- パッケージはすべてユーザディレクトリに置くので、configure に prefix オプションを指定する。
- configure で、bison、glib が無いと言われたので、bison-2.4.tar.gz、glib-2.19.0.tar.bz2 をインストール。
- これも、prefixを指定してビルドし、ユーザディレクトリにインストールする。さらに、実行できるように、PATHも設定して、再度monoのconfigure。
- make
- make install
バイナリを tar.gz にしたら、40MBぐらいありました。サーバーサイドで使うので多くの使用されないものがあるはずですが最小構成にする方法はわかりません。
du -b の数字は以下のようでした。
| ディレクトリ |
容量(bytes) |
| /home/mikeo410/local |
110,301,031 |
| /home/mikeo410/local/bin |
12,571,288 |
| /home/mikeo410/local/etc |
543,419 |
| /home/mikeo410/local/include |
1,234,993 |
| /home/mikeo410/local/lib |
81,264,078 |
|
/home/mikeo410/local/share
|
14,674,965 |
バイナリを別なマシンに移してみましたが、
mono: error while loading shared libraries: requires glibc 2.5 or later dynamic linker
となりました。
glibcのバージョン依存になるようです。
|