ちえさんへ。
アンインストール方法を教えていただき、ありがとうございました。
やっぱり、書いてあったんですねぇ。
しっかり読めよ、という思いでいっぱいです。
ご親切にありがとうございました。
TTさん、それはJperl.exeが見つかっていない状態ですね。
PerlをJperlにするパッチを入れてないなら入れるか、通常のPerlで使用するならAnHTTPDのOptions/GeneralのExec Prog.for .pl,.cgiの設定をPerlにしてみてください。
パッチを入れているのに同じエラーが出る場合は上記設定のところにJperl.exeまでのフルパスで記入してみてください。c:\perl\binにjperl.exeがあるならc:\perl\bin\jperl.exeになります。
ちなみに色々な所で配布されているスクリプトはjcode.plという日本語コード変換スクリプトを使用していることが多く、このスクリプトとJperlとの相性が悪くエラーがでるのでJperlは使用せずperl.exeで運用したほうがいいようです。
はじめまして。
質問ですが、こんなエラーがでて、CGIが実行できないのです。
CGI Error - can't exec "jperl E:\www\public_html\hello.cgi ", errorcode = 2, No such file or directory
どうすればよいのでしょうか?
智猫さん,とっても助かりました!!
grepで全文検索しているのかと思ってたんですが,lsが原因だったんですね.(^^;
GNUツール落としてきたら無事動いてくれました.
ありがとうございました.
グリフォンさん、そのスクリプトを見てみたところ、
$list = `ls $target`;
という記述がありました。これはlsというUNIXコマンドを実行して結果を受け取るということで、Windows環境には標準ではこのコマンドはないのでエラーになります。
どうしてもこのスクリプトを動かしたいのでしたら、AnHTTPDトップページのリンクからUNIXコマンドを入手してはいかがでしょう。Cygnus の GNU for Win32というリンクです。
ちなみに最近のWeb裏技のスクリプトはUNIXコマンドを多用してます。
はじめまして。AnHTTPdを使わせて頂いている市川と申します。
とてもすばらしいソフトです。あまりにすばらしいので、最初は APACHE for win32の 1.3が
公開されるまでのツナギとして使いはじめた AnHTTPdにどっぷりはまり、先日 APACHEが公開
されたのに、ずっと AnHTTPdで行こうと考えている次第であります。
さて、自分のサーバに AnHTTPdを使っている事をコマーシャリングしたいと思い、色々探し
たのですが、AnHTTPdのオフィシャルマークはこの掲示板のトップにある画像だけなんですね。
ちょっとさびしいので、自分なりにモディファイを加えて使おう(既に使っていますが)と思
っています。あいにく私はグラフィッカーではないので、大した絵ではないのですが・・・。
オフィシャルマークの簡潔性には遠く及ばないものの、「AnHTTPd」を主張するマークがで
きました。(と思ってます)もし、良ければオフィシャルマークが完成するまでこれを利用し
続けたいと思っているのですが、構わないでしょうか?
<IMG SRC="http://www.taa.or.jp/img/anhttpd.gif" BORDER="0">
fin
はじめまして(?-?)自分のPCでのCGI動作テストでは動くのですが・・
ダイヤルアップルータでは・・PPP逆流は出来ないのでしょうか?
もし出来るようなら・・お手数ですがメールで教えていただけないでしょうか・・
m(__)m
AN HTTPD つかわさせていただいてます.
早速質問なのですが,ネットサーフレスキューの「簡易サーチエンジン(SJIS専用)」を使うと以下のようなエラーメッセージが出ます.
指定した名前は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されません。
perl.exeはパスの通った場所に配置してあり,jcode.plはjsearch.cgiと同じ場所に配置してあります.
以上ですが何か解りますでしょうか?
情報が足りない場合は何なりと申しつけて下さい.
初者さんへ。
AN Http Serverのアンインストールですが、一緒に配布されているReadme.htmlに書いてありました。参考までに、書いておきますね。
----- ここから -----
4アンインストール
1インストールしたフォルダを削除する。またはフォルダ内のファイルを削除する。
2レジストリキー HKEY_LOCAL_MACHINE\SOFTWARE\AnHTTPd (およびそれ以下)を削除する。 レジストリキーの削除は regedit.exe などを使用する。
----- ここまで -----
お試しください。
私はCGIプログラムをC++を使って書いています。
フォームへの入力データに対応するデータをシリアル接続された端末に送信したいのですが、そのように書いたはずのCGIプログラムを動作させると、Internal Server Errorになってしまい、「VCL35.BPLモジュールでFFF....Fへの書き込みが発生」とかいうメッセージが表示されます。
これはやっぱり私の書いたソースがおかしいんでしょうか。
それとも、AN Http Serverが対応していないなんて事がありますか?
素人の質問で申し訳ありませんが、よろしくお願いします。
.....夏休み、なんですよね.....(T_T)
こんにちわ。v0.9、6cから使わせてもらってます。
pinball と申します。どうぞよろしく。
素晴らしいソフトを公開してくださり、ありがとうございます。
でわ、またですぅ(^^)/~~。
PS:「Cマガ」で見慣れたお名前があるぅ^^;
いつもAN HTTP Server を使わせていただいている、結城浩と申します。
毎度宣伝ばかりで恐縮なのですが、
拙著「Perlで作るCGI入門」の第二弾 応用編 が出版されましたので、
ご報告いたします。
サポートページでは、
個人用でも商用でも無料で使えるCGIスクリプトがダウンロードできます。
動作テストでは、AN HTTP Serverを活用させていただきました。
すばらしいソフトを公開してくださってありがとうございます。
深く感謝します。
■Perlで作るCGI入門「応用編」
http://www.st.rim.or.jp/~hyuki/cgibook2/
初めて投稿します。
いつもAN-HTTPDを使わせていただいております。
ありがとうございます。
ところで、AN-HTTPDのアンインストールってどうやって
やるのですか?
色々調べのですが分からなかったので。
教えてください。
よろしくお願いいたします。
有り難うございました。
翌日、再起動してみたらちゃんと動きました。
残業して、がんばった結果は何だったのでしょう・・
プロセスの事について少し、知識がついたので
よかったということしておきます。
本当にご迷惑おかけしました。
そして、有り難うございました。
これからもAN-HTTPDを使わせていただきます。
それではこれで、しばらく返答はできません。あしからず。
残業・・さん
いいえ、そういう意味ではありません。
CGIが動く時には別にもうひとつCGIプロセスが起動されます。それが動いているまま、という意味です。
プロセスはパソコンをリセットすればなくなります。
ハードディスク上にあるプログラムのファイルとは全く別ですから、前のバージョンの残りという意味ではありません。
再インストールは必要ありません。
単に Windowsを終了して再起動してやってみてください、ということです。
たとえばメモ帳を開けばメモ帳のプロセスがひとつ動き始めます。もうひとつ開けばメモ帳のプロセスがもうひとつできます。
MS-DOSプロンプトを開けばMS-DOSプロンプトのプロセスがひとつできます。これでプロセスは3つあるわけです。
そこでメモ帳のひとつを終了すればプロセスは 前のメモ帳プロセスとMS-DOSプロンプトのプロセスの2つのプロセスがあるわけです。
AN HTTPD を起動すると AN HTTPD のプロセスがひとつできます。 CGIを動かすと、CGIを動かすために CGIプロセスが(AN HTTPD のプロセスとは別に)ひとつできます。
通常その CGIプロセスは処理が終わると 終了するのですが、何かの理由で終了しないとプロセスが残るという意味です。
CGIプロセスはウィンドウを作らないのであるのかないのか判断しにくいですが。
さらに詳しく言えば、CGIのプロセスは標準入力と標準出力用に2つ一時ファイルを使用します。
名前はそれぞれ stdin.0 と 1.0 です(スレッド0の場合)。
CGIプロセスが終了していないと、次に stdin.0 を開こうとしたときに、終了していないプロセスがその stdin.0 を使用中なので、開けないためそのエラーになります。
ハードディスクがいっぱいで一時ファイルが開けないという可能性もあるにはありますが、ファイル作成時の大きさは0ですから、たぶんそれはないだろうと思います。
使っているのが AN HTTPD の Version 0.9 beta 9e で、Windows95を再起動(あるいは一度終了して起動)しても再度そのような状態になるとしたら、その原因はちょっとわかりません。
上の「何かの理由で終了しない」原因を調べないといけない、ということになります。
スミマセンもうちょっと詳しく教えてください
>おそらく CGI プロセスの残骸が残っているためだと思います。
>一度これが出ると CGI/SSI はすべて動作しなくなります。
>リセットするしかないと思いますが、それでも出るようだとちょっとわかりません
新しいバージョンの An‐Httpdをいれた事によって、前のバージョン
のプロセスが残っているのですか??
これを消去するためにはどのようにしたらよいのでしょうか?
An-httpdの再インストールだけでよいのでしょうか?
教えてください、お願いいたします。
お知らせ
明日からしばらくの間、私はここにアクセスできません。 夏休み、ということで。
よろしくお願いします。
残業・・さん、
おそらく CGI プロセスの残骸が残っているためだと思います。
一度これが出ると CGI/SSI はすべて動作しなくなります。
リセットするしかないと思いますが、それでも出るようだとちょっとわかりません。
Version 0.9 beta 9d およびそれ以前では、CGIプロセスが残ってしまうことがあります。
(beta9e では絶対にない、とも言えませんが)
智猫さん、
SSIで < ...> が2行以上になると(閉じる前に改行があると)ゴミがでることがあるようです。
あるいは原因は別かもしれませんが。 いずれにしろ サーバ側の HTMLの解釈のミスのようですので対処します。
私もやってみていますが、どういう場合によく出るかなど何かわかりましたらまたお知らせ下さい。
バックで Data Missing は、POSTメソッドでの話だと思います。私もふだんは Netscape なので、そういうものかな、という感じでいました。
Netscape は前から Pragma: no-cache の指定に忠実なようですが、これはもう少し調べてみようと思います。
中脇さん、
どうもありがとうございます。
Error 500
CGI Error - can't create stdin
掲示板の登録のときにこんなエラーがでました原因はナンでしょう?
他のCGIやカウンタ(SSI)も動作しません、なぜでしょう??
2台あるパソコンのうちの1つだけこんなエラーが出るのです。
もう一台の方では完璧に動作するのですが・・・
もう、お手上げです。
SSIを有効にしてSSIで記述したページを表示すると、ブラウザ(IE4)で表示したページ末に<か>が出ることがあるのですが……
それをブラウザからソース表示すると入ってないという不思議な状態です。
絶対に出ると言うわけでもないので報告も迷ったのですが。
それと知人によるとCGIで作ったBBSなどで何度か投稿した後に、ネスケでバックボタンを押すとdata missingとかキャッシュのデータが古いとかエラーが出るようです。
最近出た4.5ベータやその前のバージョンでも出るようで、私も3.03で経験しているのでネスケのキャッシュ方式と合わないだけだと思うのですが。
AnHTTPDのバージョンは9eです。
どうもこんにちわ。
私はIE4&NN4の二つのブラウザを一台のマシン内で使い分けているんですけど、ブラウザのキャッシュは共有できないのですが、一方のブラウザでブラウズしたデータを、もう一方のブラウザで見る時にいちいちサイトから落としてくるのはもったいないので、どうにか出来ないかと思って「AN HTTP」をプロクシ、キャッシュサーバとして利用させて頂きました。
それで、結果は非常に快適です。一度アクセスしたデータなら、どちらのブラウザを使ってもすぐに表示されるので快適快適!!
以前も同様のことを試したのですが、時々HTTPDが動作しないようになるので利用を諦めていたところなのですが、バージョンがbeta9eを使うとまったく問題なく動作しています。
非常に有用なソフトウェアを提供してくださっている中田様に深く感謝します。
ピロピロさん、
ちゃんと動作するスクリプトもあるようなので、それぞれのPerlスクリプトの中身の問題でしょう。
127.0.0.1 というのは自分のPCのIPアドレスなので、他のPCから http://127.0.0.1/... とやってもアクセスできません。
ダイヤルアップ接続したときにプロバイダから割り当てられたIPアドレスを知らせてもらわないと見ることはできません。
知らせる方法はいろいろありますが、ダイヤルアップで情報発信の各ページを参考にしてください。
ただし、この場合はそれで見たとしてもスクリプトの中身は見えませんし、Options/General で parse CGI Output にチェックが入っていなければエラーの原因はわからないと思います。
エラーの原因がわかっても、ハードディスクの中身を自由に見ることができなければどう直せばいいかはわかりません。
自分でエラーの原因を調べることができる、というのがローカルHTTPサーバの利点です。
本物のHTTPサーバでは Error 500 を出すだけで何がおかしいのかなかなかわかりませんから。
AN HTTPD では Options/General の parse CGI Output にチェックを入れておくと、何がおかしいかのエラーメッセージを出します。
それをてがかりに調べてみてください。そのエラーメッセージがわからないと原因はわかりません。
一般的には
(1) require に続く(jcode.plなどの)パスの指定が間違っているか、ファイルがない。
(2) 用意すべき(空の)データファイルのパスの指定が間違っているか、そのファイルがない。
(3) Windows95 では使えない symlink, flock などを使っている。
(4) Windows では使えない UNIXのコマンド ls, cat, sendmail などを使っている。
などが考えられます。
パーミッションは全く関係ありません。
755,705, 666, 606 などのパーミッション指定は UNIX での話で、Windows ではこのようなパーミッション設定はできません。
UNIX では単にファイルを作ったり転送しただけでは、普通だれでも読み書き実行できるようにはならないのでパーミッションを設定する必要があります。
Windows では単にファイルを作れば、だれでも読み書き(実行)できるので全然必要がないのです。
parse CGI Output のチェックを入れて実行してみて、エラーメッセージを見てください。
そのエラーメッセージが意味不明でしたら、そのメッセージをお知らせ下さい。
また、diarybbs.cgi, bannerex.cgi とか言われてもどこのスクリプトかわからないので、入手先を書いてください。
もっとも、上記の通りですから、今は別に教えてもらわなくてもいいです。
(有名なスクリプトで、私が知らないだけだったらごめんなさい)
Interlink の話の方では、私は Interlink がどうしているか知りませんが、サーバに UNIX を使っているとすれば、システムの sendmail のパスは /usr/lib/sendmail が普通だと思います。
他に /usr/sbin/sendmail というのも Linux で見たことはありますが、それでも /usr/lib/sendmail に シンボリックリンクされていました。
ただし、/usr/lib/sendmail が CGIスクリプトで使えるようになっているかどうかはプロバイダによります。もろもろの理由でCGI中では sendmail は使えないようになっていることもあります。
このあたりは Interlink に聞くか、ユーザに聞く方がよいでしょう。
なお、
>sendmailのパスは#!/usr/lib/perlでは動かなかったです
のところは意味不明です。
もし、Perlスクリプトの先頭行の #! 以下をこのように変えたら、/usr/lib/perl はないでしょうからスクリプトの実行ができないということになります。
スクリプトによりますが、#!/usr/local/bin/perl はそのままで 中の $sendmail = '/usr/lib/sendmail' とか指定するのが普通でしょう。
明示的に /usr/lib/sendmail をスクリプト中に書いてしまう場合もありますけど。
自宅サーバをつけました。CGIをテストするためです。しかし、CGIが動かないのです。
一度見て下さい。22:00から23:00までついてると思います。
http://127.0.0.1/~kyonpy/diarybbs.cgi動かない!ひょっとしてパーミッションを変更しないといけないのでしょうか(自宅サーバでも)。
/santack.cgi動く!
/bannerex.cgi動かない!
↓あいや、おっしゃるとおりでございました。 < QUERY_STRINGの件
初歩的なミスでお恥ずかしいです。
DDP-SHK-Q.F さん、ありがとうございました m(_ _)m
さあ、これからどんどんスクリプト書きまくるぞ〜 (って先が思いやられる....)
>Katamariさん
それはPOSTメソッドを使ってるからですな。
POSTメソッドでは、標準入力から(フォーム等の)データが
渡されるので、QUERY_STRINGから渡すようにするには
GETメソッドを使って下され。
って、こんな感じですか?
Katamariと申します。
今日ダウンロードして、うきうきと遊んでいるところです。
さて、PerlのCGIを動かす場合について質問があります。
すみませんが、ご教授ください。
(FAQかも知れませんが...でも私の節穴な目では見つかりませんでした)
環境変数 QUERY_STRINGについて、画面(HTMLのフォーム)から入力した内容が渡されないという現象が発生しています。
なにかオプション設定がいかんのでしょうか?単なるコーディングの誤りでしょうか?
環境は、WindowsNT4.0 Workstation/AN HTTP 0.9β9e/Perl for Win32/MSIE 4.0 です。
テストスクリプトを下記に示します。
<HTML>
<HEAD>
</HEAD>
<BODY>
<form method=POST action="http://DAT136/cgi-bin/form1.cgi">
<P>データ1
<input name="Data1" size=20 value="">
<P>データ2
<input name="Data2" size=20 value="">
<P>
<input type=submit>
<input type=reset>
</form>
</BODY>
</HTML>
面白そうなフリーウェアをどうもありがとうございます。
早速おうちHPを試してみます。
中田さん、アドバイスどおりにしたら
いちおーパールは動いている用です。
これからやっとCGIがつかえる
わけれすね。
がんばりま。
ありがとございました。
中田様
アドバイス有り難うございます。
何とかインストールが終了しました(多分)。
まだCGIが動いてない様ですけど。
どうしたらいいのかわからないので、これからQ&Aとにらめっこです。
素人女の悪あがきですが、うまく行くように祈っててください。
中田様江
もう一度、ダウンロードし直してみます。
学校が夏休みに入りましたので、パソコン室が使用できなくなりました。
夏休み明けにもう一度、やり直してみます。
お世話になりました。
なおさん、
どうもありがとうございます。
今回のバグは、VBのCGIに対応させた 0.9 beta 8 あたりで入ったもののようです。
今後も新しい機能を組み込むとどうしてもバグが入り込むと思いますので、よろしく。
いろいろな機能を(負荷圧迫を含めて)自動的に試すチェックプログラムでも作らないと、なかなかテストしきれないのかもしれません。。。
rikky さん、
このあたりは、HTTPサーバを使う以上 CGI/SSI の中身は調べて当然、というような感覚で作ってしまったサンプルです。
そのままちゃんと動くようなサンプルにしないといけないな、と思う今日この頃です。
Perlのサンプルもつけるべきでしょうし。。。
こうさん、
どうもです。DOS/Windows3.1 までは UNIX の弱小サブセットと思っていれば大体済んだように思います。
Windows95/NT でより高機能(?)になったのでかえってわかりにくくなったのかな、という気もします。
しいな(やっほ)さん、
それは別に間違いではないです。
c:\www\httpd099e に解凍して httpd.exe を一度起動すると、オプション設定はすべてレジストリに登録されます。
それ以降いくらDLし直して別のフォルダに解凍しなおしても、最初のレジストリの設定を使ってしまいますから。
readme.html にある通りのアンインストール手順で レジストリ設定を削除 すれば最初からやり直しできます。
regedit を使うことを避けたいのであれば、Options/General で
DocumentRoot: [C:\www ]
[/cgi-bin ] -> [C:\www\cgi-bin ]
と書き換えてしまえばそれでOKのはずです。
ただし、C:\www に解凍先を指定してあれば、ですけど。
C:\www\httpd099e に解凍してあるなら、
DocumentRoot: [C:\www\httpd099e ]
[/cgi-bin ] -> [C:\www\httpd099e\cgi-bin ]
のままでもいいわけです。見本は一例ですから。
Masaoさん、
いや、もちろんそんなことはないはずです。
インターネットにつないでいないときは、http://127.0.0.1/readme.html, http://localhost/readme.html で readme.html が表示されるのに、インターネットに(ダイヤルアップで)つなぐと同じ http:// で表示されない、ということでしょうか?
readme.html が表示されない時に何か(エラー)メッセージは出ていないでしょうか?
先日ご報告したフリーズの件ですが、0.9beta9eをインストールした
ところ、どうやら直っているようで、助かりました。(^^)
何度リロードしてもフリーズしなくなったので大助かりです。
#あんまり負荷圧迫テストをするなと言えばそれまでなんですが。(^^;
そう言えば、以前は結構ページ違反で落ちたりしていましたが、
最近はそれも少なくなって、さらに今回のバージョンでさらに
対応されたようですね。これで、安心して皆に薦められます。
#以前は「よく落ちるんだけどー」とか結構突っ込まれたりして
#たんで。(^^;
ではでは、バージョンアップ頑張ってください。(^^)/
ありがとうございました。無事解決致しました。
プログラムに疎いので、またお尋ねすることがあるかもしれま
せんが、よろしくお願いいたします。m(_ _)m
中田さん
ありがとうございました。まだまだWindowsの細かいところまでの勉強が足りませんでした。
初歩的な質問に手稲に答えてくださってありがとうございました。
また何かありましたらよろしくお願いします
あまりにも初歩的な間違いが
悲しくて動揺しているようです。
メールアドレスを間違えちゃいましたぁ。<m(__)m>
いきなり迷惑を掛けますがこの初心者を助けてくださいね。
解凍する時に間違えてしまったようなんです
DocumentRoot:が
C:\www\httpd099e
と表示されます。
C:\www\httpd099e\cgi-bin
となって\httpd099eこの部分が普通は要らないようなんですけど
DLし直しても、インストールし直しても
見本にあるように
C:\www\cgi-binとなりません。
どうしたらいいんでしょうか?
教えてください、お願いします(はあと)
readme.htmlはなんとか実行できました。
しかし、また疑問が浮かびました。
インターネットにつないでいるときに
readme.htmlが実行できないのです。
(readme.htmlをみにいけない)
そうゆう物なのですか?
えむけいさん、
了解です。Pragmaヘッダについては ブラウザのちょっと古いバージョンでちゃんと出していたかどうか再確認してみますが、使用の有無に関わらず no-cache を見るのがよさそうですね。
なお、ついでに書いておきますが、私の都合で、次のバージョンアップは3週間くらい先になる見込みです。
rikky さん、
それは SSI の動作の時にエラーメッセージを出しているわけで、SSIの中身を見ていただければわかる通り jgawk がインストールされていないためです。
もちろん、だからといって jgawk.exeを入手インストールしてその部分をちゃんと動かさなければいけないわけではありません。
それがわかっていればそのまま放置しておいてもいいですし、jgawk を使わないように書き換えてもいいわけです。
すみません。ぼけました。
「キャッシュを見に行く」→「キャッシュを無視して見に行く」の間違いです。
>意識的に再ロードとキャッシュ使用を選択できるようにするのは難しいと思いますが、何か手はあります
>か?
>CGI/SSI以外の方は If-Modified-Since: がなければ見にいくようにしていますが。
「Pragma: no-cache」が要求ヘッダにあったらキャッシュを見に行くというのではなにか問題あるで
しょうか? NN,IEともに再ロードボタンを押した場合はこれがヘッダに入るようです。
初めてAN HTTP Server を使わせていただいたのですが、少し不具合があるようです。
インストールが間違っているのか、他に原因があるのか分からないので投稿させていた
だきました。
--------------------------------------------------------------------------------
このページはSSIのテストのためのページです。
--------------------------------------------------------------------------------
SSIの処理を開始。現在は1998年07月20日 12時22分08秒です。世界標準時では1998年07月20日 03時22分08秒です。
--------------------------------------------------------------------------------
このファイルの最終更新日時は1996年10月10日 17時28分28秒です。
--------------------------------------------------------------------------------
echoではタグはいれられません。
タグを入れたいときはテキストファイルに入れて typeでstdoutに出力してください。
--------------------------------------------------------------------------------
counter は、countファイルを用意して、
あなたのアクセスは、コマンドまたはファイル名が違います. ファイルが見つかりません. - tmp 111 番目です。
というところでしょうか。
-----------以下略---------
というメッセージがでます。
時間の方は正常に処理されるようですが。
Masaoさん、智猫さん、
なるほど。たしかに Netscape で、Masaoさんの言われるエラーメッセージを確認しました。
智猫さん、ありがとうございます。
http:// でなく file:// でアクセスしているのでは?というのは疑ったのですが、MSIE でやってみたらメッセージが違ったので別の方向に行ってしまいました。
HTMLを開く等 file:// アクセスの場合は HTTPサーバにはリクエストを出しませんから、これを検出するのは難しいですね。
readme.htmlやcgisample.htmlなどに注意書きを加えておくのがいいかもしれませんね。
えむけいさん、
CGI,SSIの出力など LastModified: がない場合は CacheDefaultExpiry 以内の場合は見にいきません。
CacheDefaultExpiry を 0 min にするのが本来かと思いますが、これだと必ず再ロードしますね。
意識的に再ロードとキャッシュ使用を選択できるようにするのは難しいと思いますが、何か手はありますか?
CGI/SSI以外の方は If-Modified-Since: がなければ見にいくようにしていますが。
Proxyのサイトの混線は、実際に私の手元では再現できていなかったのでコードを見てあやしいところに手をいれましたが、まだ起きるとすると、ホスト名のキャッシュ利用を CriticalSection にしないといけないのかもしれません。
現在、ホスト名が前に使ったものであればその時のIPアドレスを再利用するようにしていますが、前に使ったかの判断のあとIPアドレスを取り出すまでの間に別のリクエストが来ると混線するのかな、と。
なかなか完治できず申し訳ありません。
Masaoさん、もしかしてAnHTTPDを起動しないで解凍したreadme.htmlを開いてませんか?
readme.htmlからCGIやSSIのテストを行う場合は、AnHTTPDを起動した後にhttp://localhost/readme.htmlかhttp://127.0.0.1/readme.htmlを開くのですが……
cgisample.htmlの<b>単純なテスト</b>をクリックすると
次のファイルまたはディレクトリを見つけられません
/cgi-bin/test.bat
名前を確認して、やり直してください。
とでます。
ちなみにネスケです。
キャッシュを有効にしているとCGIのデータは再読み込みしてもCacheDefaultExpirlyに
指定した期間が過ぎていないと更新されないことがあるのですが、そういうものなのでしょ
うか?
ふだんCacheDefaultExpirlyを長めに設定していると、すぐに再ロードしたくなったとき
ちょっと不便です。
あと、サイトの混線も相変わらず発生するようです。
植村さん、
ご指摘どうもありがとうございます。
これは直します。
Masaoさん、
それはインターネットエクスプローラが出すエラーメッセージでしょうかね?
どういう操作をした時にそのエラーが出たのか、を 説 明 してください。
それから(再度お聞きしますが)HTML ファイルの表示はできているのでしょうか?
また、/cgi-bin/test.bat でしたら Perl は関係ありません。
test.bat はPerlスクリプトではなくバッチファイルですから、Perlをインストールしていてもしていなくても動作に関係しません。
もし、AnHTTPd のオプション設定がおかしいと思われるようでしたら、regedit で キー HKEY_LOCAL_MACHINE\SOFTWARE\AnHTTPdおよびそれ以下を削除してから AnHTTPd を起動してみてください。
それでオプション設定はデフォルトに戻り、通常は cgi/cgisample.html のCGIは動作するはずです。
ただし、CGI動作時のエラーメッセージを表示させるため、Options/General の parse CGI Output のチェックはいれておいて下さい。
その後のエラーについてはFAQに大体出ていると思いますので参照してください。
質問です。よろしくおねがいします。
同梱されていた、ssisample.shtmlを動かしてみたのですが、
LAST_MODIFIEDの値が、「実際のファイルの最終更新日-9」と
なります。DATE_GMTやDATE_LOCALの値は合っているようです。
SET TZ=JST-9としていますが、よいのでしょうか。
しかし、SET TZ=JST-0とすると、LAST_MODIFIEDとDATE_LOCAL
正しいようですが、DATE_GMTがDATE_LOCALの値と一致します。
どのように、対処すればよいでしょうか。
ssisample.shtml の内容
こんな感じのエラーがでます。
↓
次のファイルまたはディレクトリを見つけられません
/cgi-bin/test.bat
名前を確認して、やりやり直してください。
>SSIの方では EXE の .cgi は意識して動くようにはしていないので、動かないでしょう。
>次、ですね。
ありゃま、そうでしたか。
失礼しました。
Masaoさん、
普通の HTML ファイルの表示は問題ないのですよね?
「サンプルについているPerl」というのが何のことかわからないので、
たとえば、
(例1)cgi/cgisample.html の 単純な例 をクリックしたとき、127.0.0.1 に接続できない、というエラーになった。
(例2)簡単な Perl スクリプトを http://127.0.0.1/hello.cgi としたら、データがありません、というエラーが出た。
(例3)ISAPI のサンプルを動かそうとしたら、Error 500 が出て、errors.log には Can't Load PerlIS.dll となっていた。
などと、
サンプルのどれをどのように動かそうとしたとき、どんなエラーメッセージが出るか、をお知らせ下さい。
えむけいさん、
なるほど。
では、anonymousのパスワードを設定できるようにします。
Perlが動かないというのはサンプルについているPerlが動かないのです。
おそらく簡単なところで設定のミスをしていると思います。
ちゃんと設定はあっているはず(たぶん)なのですがどうしてでしょう?
|指定する場合は URL で ftp://username:password@host.domain:port とすればいいはずです。
URLを手打ちする場合はそれでもいいのですが、私がログインを拒否されたのは ftp サイトへの
アンカーになっていて、しかも一度 http の CGI を呼び出してから Location: ヘッダで目的の
ftp サイトへ転送するという方式になっていたので、いちいちソースを開いてかつ telnet で
Location: ヘッダを調べるのがたいへん面倒です。
AnHTTPD が渡すデフォルトのパスワードを変更する方法はないでしょうか?
ちなみに @ は %40 で渡せるようです。
糸岡さん、
GetRight のレジュームは、どの程度のことまでやらなければならないかまだはっきりしていません。
が、対応させるつもりです。
DDP-SHK-Q.F さん、
SSIの方では EXE の .cgi は意識して動くようにはしていないので、動かないでしょう。
次、ですね。
神崎さん、
そうですね。現在のハングやページ違反の問題を解決したらとりかかります。
Masaoさん
「動かない」というのが、Perlが起動できないのか、簡単なCGIが動かないのか、あるいはもっと別の話か、その内容によって答えは変わります。
それによって インストールをやり直したり、PATHを設定したり、AN HTTPD のオプション設定を変えたり、という話になりますので、とりあえず、どう動かないのかお知らせ下さい。
AN HTTPd使わせていただいてます。
GetRightでのレジュームに対応してもらいたいのですが。
よくタイムアウトになるんで、レジュームがあると便利なんですが。
出来ればお願いします。
ちょっち古い話ですみませぬが
0.99dにしてからexe形式のcgiを実行できるようになりましたが、
SSIが動きません。(exe形式の.cgiで)
これはどうしたらいいのでしょうか。
こんにちは。beta9が落ちちゃうTOMです。
月曜日からbeta9dを使っていますが,今の所落ちていません。ちなみにサービスではありません。
午後くらいからサービスに切り替えて動作させてみます。
イベントログはちょっと待ってください。編集の仕方がわからないので・・・(^^;)
中田さん,こんにちは.お久しぶりです.
かなり昔にお願いしたと思うのですが,ログにそのページを参照したページは残してくれないのでしょうか…?
実は,移動済みのページにアクセスしようとする方が未だに絶えなくて,どこから来ているのだろうと訝っています.
REFERER を残してくれる HTTPd もあるのですが AnHTTPd が使いやすいので出来ればこのまま使いたいのですが….
(勝手な事ばかり言ってすみません.)
perlはインストールしましたが、
CGIを動かそうと思ったのですがなぜか動いてくれません。
なにかほかにも設定するところがあるのですか?
森井さん、
2重起動していなければ、ポート80を使っている他の Webサーバ(HTTPサーバ)が動いているのがエラーの原因です。
ここのページを bind とかでページ内検索をしてみてください。回避法があります。
えむけいさん、
anonymous のパスワードは、デフォルトでは www-proxy@yourhost.yourdomain になります。
指定する場合は URL で ftp://username:password@host.domain:port とすればいいはずです。
username を anonymous にして、password に設定したいメールアドレス、ということですが、メールアドレスの中の @ をどうしたらよかったかちょっと忘れました。
ftp のキャッシュは少々お待ち下さい。
ken さん、
そのエラーだと、perl が起動できていません。
\perl.exe がない、と言っているわけで、スクリプトの中身はそのあとの話です。
perl をちゃんと動かすには
(1) Options/General の parse #! line のチェックをはずす
または
(2) password.cgi の1行目を #! /perl/bin/perl.exe にする
のいずれかの方法があります。
特に意味をもたせているのでなければ (1)をおすすめします。
(ここはデフォルトではチェックを入れていないと思いますが。。。)
色さん、
ゆいチャットはダウンロードして説明の通りにインストールしてそのまま動いたような記憶があります。
hello.cgi などが動いたのなら、問題はないはずだと思いますが。。。
ただし、インストールの説明は UNIX 用ですからパーミッションがどうとか書いてありますが、その部分は必要ありません。
パーミッションの設定は Windows ではできませんから。 FTPを使うというのがパーミッションの話なら、それは不要です。
それから、jcode.pl 2.0も特に使う必要はありません。
それでやってみて、やはり Perl300.DLL が開始できない、というエラーが出るのでしょうか?
こうさん、
Windows95 では ユーザ/グループ/その他 の区別はありませんし、ファイルのパーミッションもありません。
ファイルの属性としては ReadOnlyはありますから、+w, -w はできるでしょう。
実行権は拡張子で決めます。.exe, .bat には無条件で x がつき、chmod では変えられません。
ただしスクリプト(#! で始まる)にも x をつけるようです。
というわけで、制限のある Windows 上でできるだけ妥当な動作をしているのでしょう。
ftpのプロクシを有効にすると、anonymousのパスワードとして渡すメールアドレスの
チェックをしているサイトで、ログインを拒否されることがあります。
メールアドレスを自分で設定する方法はないでしょうか?
あとftpのキャッシュもできると嬉しいのですが……。
はじめまして。実は、「窓の杜」で中田さんののフリーソフトを見つけました。
そして、自己解凍して、httpd.exeを実行したところ、「Winsock error 0」
そしてバインドできなかったというメッセージがでます。
そしてそれ以上進まないので、そこまででインストールがストップしてし
まいます。この症状は最初の最初で出てくるので、どうすることもできま
せん。ちなみに、Win95が悪いのかと思って、再インストールしてい
ます。
宜しく、対処法をお教えください。
あらら、まちがって投稿してしまいました。
こんにちわ、前の文章はまちがっていますので無視してください。
パスワード認識のCGIテストしていますがうまくいきません。
何が悪いのでしょうか?教えて下さい。
まずテスト環境は以下の通りです。Win95で使用マシンは
富士通のデスクパワーです。
まずディレクトリ環境ですが、、、
c:\perl\bin\perl.exe
c:\httpd\httpd.exe
c:\httpd\passwordsource\password.htm
c:\httpd\passwordsource\readme.htm
c:\httpd\passwordsource\password.cgi
c:\httpd\passwordsource\xxx
にしています。
httpdの実行環境(設定パラメータは)以下の通りです。
ドキュメントルート
アクセスコントロール
プロクシ設定
にしています。
ブラウザで呼び出す命令は
http://127.0.0.1/passwordsource/password.cgi
として呼び出します。
すると
Error 500
CGI Error - can't exec "\perl.exe c:\httpd\passwordsource\password.cgi ",
errorcode = 2, No such file or directory
AnWeb/0.9b9b
とブラウザにメッセージがでます。
その時のhttpd.logは
localhost.scm.co.jp - - [16/Jul/1998 16:07:28 +0900] "GET /passwordsource
/password.cgi HTTP/1.0" 500 280
となり、さらにerrors.logは
Thu Jul 16 16:14:53 1998 Error Response 500 Thread 0(ID= -321303) for "/
passwordsource/password.cgi"
となります。
**************************
尚、perlの位置については
autoexec.batにはperl.exeとパスが指定されています。
path "%path%;C:\perl\bin;"
PATH=C:\ATACR;%PATH%
**************************
使用しているcgiは以下のものをテストに使わせていただきました。
#!/perl.exe(ここを修正)**************************
# --------------------------------------------------
# スクリプト名:Password Ver1.1
# 作者:野狸
# --------------------------------------------------
&parse_form;
$user = $input{'user'};
$password = $input{'password'};
$function = $input{'function'};
if(-e $user){
@data=&FileToAllay($user);
if($function eq "post"){
if ($password eq $data[0]){
print "Location: $data[1]\n\n";
}
}
}
print "Location: http://127.0.0.1/passwordsource/password.htm\n";(ここも修正)
sub parse_form{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
if (length($buffer)<5){
$buffer = $ENV{QUERY_STRING};
}
@pairs = split(/&/, $buffer);
foreach $pair(@pairs){
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$input{$name} = $value;
}
}
sub FileToAllay{
local(@data);
open(IN,"$_[0]");
@data = <IN>;
foreach(@data){chop;}
close(IN);
return(@data);
}
<HTML>**************************
<HEAD>
<TITLE>東北建設機械販売イントラネット</TITLE>
</HEAD>
<P><A NAME="top"></A></P>
<center>
<font size=5 color=green>
<blink>
認証を行ないます
</blink>
</font>
<FORM ACTION=password.cgi>
<P>利用者ID:<INPUT TYPE=text NAME=user SIZE=20></P>
<P>パスワード:<INPUT TYPE=password NAME=password SIZE=20></P>
<INPUT TYPE=hidden NAME=function VALUE=post>
<P><INPUT TYPE=submit VALUE=認証> <INPUT TYPE=reset VALUE=取消></P>
</FORM>
</center>
</HTML>
パスワード認識のCGIテストしていますがうまくいきません。
何が悪いのでしょうか?教えて下さい。
まずテスト環境は以下の通りです。Win95で使用マシンは
富士通のデスクパワーです。
c:\perl \bin \perl.exehttpdの実行環境(設定パラメータは)以下の通りです。
c:\httpd\httpd.exe
c:\httpd\passwordsource\password.htm
\readme.htm
\password.cgi
\xxx
#!/perl.exe以上、長くなりましたが、宜しくお願い致します。
# --------------------------------------------------
# スクリプト名:Password Ver1.1
# 作者:野狸
# --------------------------------------------------
&parse_form;
$user = $input{'user'};
$password = $input{'password'};
$function = $input{'function'};
if(-e $user){
@data=&FileToAllay($user);
if($function eq "post"){
if ($password eq $data[0]){
print "Location: $data[1]\n\n";
}
}
}
print "Location: http://127.0.0.1/passwordsource/password.htm\n";
sub parse_form{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
if (length($buffer)<5){
$buffer = $ENV{QUERY_STRING};
}
@pairs = split(/&/, $buffer);
foreach $pair(@pairs){
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$input{$name} = $value;
}
}
sub FileToAllay{
local(@data);
open(IN,"$_[0]");
@data = <IN>;
foreach(@data){chop;}
close(IN);
return(@data);
}
**************************
password.htmの内容はは以下の通りです。
<HTML>
<HEAD>
<TITLE>東北建設機械販売イントラネット</TITLE>
</HEAD>
<P><A NAME="top"></A></P>
<center>
<font size=5 color=green>
<blink>
認証を行ないます
</blink>
</font>
<FORM ACTION=password.cgi>
<P>利用者ID:<INPUT TYPE=text NAME=user SIZE=20></P>
<P>パスワード:<INPUT TYPE=password NAME=password SIZE=20></P>
<INPUT TYPE=hidden NAME=function VALUE=post>
<P><INPUT TYPE=submit VALUE=認証> <INPUT TYPE=reset VALUE=取消></P>
</FORM>
</center>
</HTML>
**************************
**************************
パスワードパラメータファイルは以下の内容です。
xxxは以下の通りです
test
http://127.0.0.1/passwordsource/readme.htm
**************************
訂正です。
失礼致しました。
print文の間違いです。
中田様江
お世話になっております。
>(3) OIDONさんの hello.cgi は動きましたか?
動きました。
簡単なwrite文を使用したcgiプログラムは動きました。
>(4) Perl2.0 というのは何でしょうか? (jcode.pl のことでしょうか?)
jcode.plの事です。すみません。
ゆいチャットは動くんですね。
FTPを使用しなければいけないのでしょうか?
度々すみません。
宜しくお願いいたします。
なおさん、中田さん、ありがとうございました。
おかげで無事にPATHもとおりunixコマンドが使えるようになりました。
しかし、またひとつ気になることがあるのですが、Windowsではパーミッションの
変更はできないようになっているの?ってことです。
試しに、chmod 755 *.cgiを実行してちゃんと通ったのですが、その後に
ls -lで見ると、パーミッションは[-rw-r--r--]のままです。
これはどういうことでしょうか?
それともWindowsの環境ではパーミッションの変更はできないのですか?
中田さん:
これからoptions の Appearance関係をテストしてみます。
うまくいくような設定やその逆の設定があればご報告します。
こうさん:
perlis.dll(Perl for ISAPI)はこいつです。
http://www.ActiveState.com/ftp/Perl-Win32/Release/PlISi316.exe
これをPerl for Win32のバイナリをインストールしたところに
インストールします。ちなみにPerl for Win32はこいつですが、
http://www.ActiveState.com/ftp/Perl-Win32/Release/Pw32i316.exe
一緒にインストールしましょう。
なお、以上のバージョンは 5.003 Build 316 ですが、古いバージョンの
ものは、ここ
ftp://ftp.linux.ActiveState.com/pub/Perl-Win32/Release/
にあります。Build316ではrenameが使えないので、Build310あたりを
使った方が良いかもしれません。
ちなみに、perl.exeとperlis.dllのバージョンをチェックするには、
各ファイルを右クリックして、[プロパティ]から[バージョン情報]で
もって確認できます。
usertool.exeって、CygnusのGNU for Win32のことですよね?
(http://www.cygnus.com/misc/gnu-win32/)
これですが、ベータ19の場合、通常インストールしようとすると、
インストール先(Destination Folder)が、 C:\Cygnus\B19 になって
いると思います。このままインストールすれば、
C:\Cygnus\B19\H-i386-cygwin32\bin
にバイナリがインストールされます。
ここにPathを通す方法ですが、C:\Cygnus\B19 に cygnus.bat という
batファイルがあります。この中身の内、SET で始まる行を c:\autoexec.bat
の最後の方に書き加えて、マシンを再起動すればPathが通ります。
基本的には
SET PATH=C:\CYGNUS\B19\H-I386~1\bin;%PATH%
さえ書き加えれば良いはずです。
インストール先が異なる場合は環境に合わせてくださいね。
マシンの再起動が終わったら、DOSプロンプトで、例えば ls とでも
打ってみてください。これでファイルの一覧が表示されれば OK です。
「コマンドまたはファイル名が違います」と言われたら、Pathが
通っていません。
#こんな説明でわかるかな?(^^;
#説明が下手で申し訳ないですが、この説明でわからないなら、
#インストールしない方が無難だと思います・・・
#何か問題が発生した場合に対処できないのは目に見えていますしね・・・
バイナリファイルアップロードについて1点補足しておきます。
binmodeを入れるのが本質的なポイントですが、AnHttpdのバージョンも
0.8beta3では動きませんでした。0.9beta8dおよび0.9beta9dでOKなのを
確認しました。
こうさん、
PerlIS.dll があるのは ActiveState の Perl for ISAPI のところです。
usertool の方は、PATHを設定すればいいのだと思います。
Windowsの場合、PATHは起動ドライブのルートの autoexec.bat で設定します。
色さん、
それでは、
(3) OIDONさんの hello.cgi は動きましたか?
(4) Perl2.0 というのは何でしょうか? (jcode.pl のことでしょうか?)
ゆいチャットPro 1.0 は手元で動かしたことはあります。
でも、やはり最初の Perl300.DLL を開始できない というエラーの原因はわかりません。
TigerCat さんへ追記。
先頭の空白は削除はしていませんが、HTMLなので。
<PRE> は効くはずだと思います。近いうちにコードがそのまま表記できるように改善します。
TigerCat さん、
chown は Perl にもありますが、システムコールのchownを呼ぶのでしょうから同じことですね。
ユーザ名/パスワードを使うのなら、HTTP の基本認証を(使える環境なら)使えばいいのかなとも思いますが。
本当のユーザ名/パスワードをやりとりするのはちょっと危険かもしれない、と。
枕葉さん、
レジューム(サスペンド)対応は懸案のひとつです。対応への優先度は低いのですが。
レジュームしたときちゃんと動いているのが望ましいと思ってはいます。
えむけいさん、
そうですね。小文字をそのままで大文字は^をつけて名前を変えて^つきの場合は大文字とする、というようなシステムにしないと区別は難しいですね。
本来はパスのところは大文字小文字を区別するはずですからそうしないといけないのでしょうが。。。
TigerCatさん、どうもありがとうございます。
どうも、binmodeのコマンドが抜けていたのが問題だったようです。
無事、バイナリファイルがアップロードできるようになりました。
では、また何かありましたら、よろしく。
智猫さん
アドバイス ありがとうございました!!!
魔法の3行を追加することで、うまく動くようになりました。
見る人が見ればわかるのでしょうが、私にとっては、すんごく不思議で
感動的ですらあります…
これで、perlIs環境でスコスコ動かすことができます。
(再び) ありがとうございました。
はじめまして、AN HTTPD気持ちよく使わせて頂いています。
2つほど質問があります。
まず一つはperlis.dllが見つからないのです・・・・;;
指定された場所に行ったのですが、見つかりませんでした。探し方が足りないのかもしれませんけど・・・
場所を知っている方教えてください。
もう一つは、以前UNIXを使っていたので、ここで紹介されていた[usertool.exe]をインストールしたのですが、
MS-DOSプロンプトでコマンドが使えないのです・・・
コマンド類が保存されているディレクトリに移ると使えますが、それでは不便なので、
どのディレクトリにいても使えるようにしたいのです。
そこで、それを実現する方法を教えてください。
初歩的な質問で申し訳ないですがよろしくお願いします
中田様江
お世話になっております。
度々すみません。
>(1) DOSプロンプト で perl -v でバージョンが表示されますか?
表示されました。
動かそうと思っているcgiプログラムはゆいチャットです。
あちらから、Perl2.0もダウンロードしてあるのですが、
使用可能でしょうか?
>(2) PerlISを使う設定なら、PerlIS と Perl for Win32 の Build番号はあっていますか?
OIDONさんのHPにある「AnHTTPd設定」をそのまま使用しているのですが。
よろしくお願いいたします。
一応、混乱しないように、htmlもつけときますね。
hiddenで$FORM{'action'}="SUBMIT"が入るような仕掛けがありますが
必要なければ要りません。
そういえば、ここの掲示板って、文頭のスペースが削除されちゃうんですね。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=x-sjis">
</head>
<body>
<form action="cgi-bin/さっきの.cgi" method="POST"
enctype="multipart/form-data" name="testform">
<input type="hidden" name="action" value="SUBMIT">
<p>ファイル名:
<input type="file" size="20" name="upfile">
<input type="submit" value="送信">
</form>
</body>
</html>
To 中田さま
いつもご返答ありがとうございます。
chownするには当然root権限が必要ですね。
ウーム、何か別の方法で、chown等のunix外部コマンドを使わず
perlレベルでできるといいのですが・・・
なんかこう、ユーザをFakeするような事ができたはずなんですが。
unixコマンドを使うつもりなら・・・
su - account
して、書き込めばいいのかも知れませんが、このsuの際に
パスワードを聞いてきますよね。
これが確か標準入力(ローカルキーボード)でなければだめっぽく
CGIからsuなどしたら、帰って来なくなっちゃいます(^^;
パーミッションについては
chmod 754 hoge.txt などとできそうですね。
ただ、ファイルを作った後で変更することになりますね。
あ、perlにもchmod ()ってありましたね。
結局何がやりたいかと言うと、webでftpもどきをやりたい
んです。下のファイルアップロードCGIに、ユーザ名・
パスワードを受け付ける部分と、その指定ユーザで・・・
おっと、いい事思い付きました。CGIからローカルのftpを
動かして、そいつにユーザ認証させてファイル書き込み、
終了したらパーミッション設定。
これでばっちしできそうです(泣)、なんだか非常に強引です。(^^;
なんとかならないかなぁ・・・
To しみずさん
まずAN httpdは最新を使ったほうがいいですよ。
古いバージョンでは確かにアップロードで固まるものがあります。
あと、cgiはあんなに簡潔に出来るのでしょうか。
私は下のように作ってます。
ファイル以外でも全てのフォームデータを受け付けることができる
つもりです。(ファイル受け付け部はもっとダイエットできるの?!)
ただし、multipart/form-dataしか受け取れないと思います。
#!/usr/bin/perl
#
require 'jcode.pl';
# ファイルを受け取る場所
$home = ".";
# 変更の必要なし
$retcode = "\r\n";
######################################################
# 設定はこれ以上ありません。これからはプログラムです。
# No more configuration exists to be set.
# Do not change program scripts below. Thanks.
######################################################
# ==============================
# -- HTML ヘッダ出力
print "Content-type: text/html\n\n";
# ==============================
# -- フォーム内容受信 (multipart/form-data)
if ($ENV{'REQUEST_METHOD'} eq "POST") {
binmode(STDIN);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} elsif ($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer=$ENV{'QUERY_STRING'};
}
# MIMEの区切りを解析し、データ取得
$buffer =~ /^(.+)$retcode/;
$boundary = $1;
@pairs = split(/$boundary/, $buffer);
# 送られてきたデータの吟味
foreach $pair(@pairs) {
@vars = split(/$retcode/, $pair);
$vars = @vars;
# ファイルがアップロードされた場合
if ($vars[1] =~ /name\=\"(.+)\"\;\sfilename\=\"(.+)\"/) {
$name =$1;
foreach ($i=4; $i<$vars; $i++) {
if ($data eq '') {
$data = $vars[$i];
}else {
$data .= "$retcode$vars[$i]";
}
}
$FORM{$name} = $data;
$FILE{$name} = $2;
}
# その他フォームデータを取得
elsif ($vars[1] =~ /name\=\"(\S+)\"/) {
$name =$1;
$value = "$vars[3]";
if ($vars > 4) {
$value .= "$retcode";
foreach($i=4; $i<$vars; $i++) {
$value .= "$vars[$i]$retcode";
}
}
&jcode'convert(*value,'sjis');
$FORM{$name} = $value;
}
}
# ==============================
# -- デバッグ用:フォームデータをそのままファイル化
#open (NOTE,">formdata.txt");
#binmode (NOTE);
#print NOTE $buffer;
#close (NOTE);
# アップされたファイル名のディレクトリ部分を削除
$FILE{'upfile'} =~ s/(.+)\\//g;
open (UPLD, "> $home/$FILE{'upfile'}");
binmode (UPLD);
print UPLD $FORM{'upfile'};
close (UPLD);
print "<html><body>$home/$FILE{'upfile'} uploaded!</body></html>\n";
Another HTMLlint Gateway をローカル環境で動かすために使わせていただいています。
ところで、サスペンド状態から復帰(レジューム)した後には一度An httpdを再起動
しないと接続を受け付けないようなのですが。
プログラムの性質上サスペンド対応はあまり必要ないような気もしますけどね(^^;
尾崎さん、wwwlng.cgiでのPerlIS使用時の$ARGVでの取り出しなのですが、下のスクリプトをwwwlng.cgiの適当なところに挿入するのはいかがでしょうか?
if($ENV{'PERLXS'} eq 'PerlIS') {
@ARGV = split(/\+/,$ENV{'QUERY_STRING'});
}
スクリプトで$ARGVに代入するなんて行儀悪いことをしてますが、個人環境限定ということで許してもらえるかと(笑)。PerlISで動作してるのを$ENVで確認もしてますし。
私は$ARGVへのパラメータのセパレータをよく知りませんので、“+”で分割しているwwwlng.cgiにだけしか適用出来ないと思います。
……あ、これ入れるとカウンタも動いてしまような。自分のカウンタは用無しですね。
しみずさん、readする前にSTDINをバイナリモードに切り替える必要があると思います。
binmode(STDIN);
ですね。それと出力用ハンドルUPLDもバイナリモードにすることを忘れずに。
他の方の話題でも出てますが、自分に都合の悪い動作をしない限りAnHTTPDは最新のものにしておいたほうがいいようですよ。
大文字と小文字だけが違うサイトはいっしょくたにキャッシュされてしまうのですが、
Windowsのファイルシステムを使う限りはやはり仕方がないでしょうか?
いつも便利につかわせてもらっています。
今日は一点うまくいかない事があるので教えてください。
CGIでファイルアップロードをしようと、下記のhtmlとcgiで
試してみましたが、テキストファイルは問題無くアップロードできる
のですが、バイナリファイルですとsubmitしたままで停止してしまい
エラーも戻らない状態です。わかりましたらアドバイスをお願いします。
動作環境はSOTEC/TRIMでOSはwin95で、AnHttpdは0.8beta3bで、perlは
jperl1.4です。
HTML===============================
<HTML>
<HEAD>
</HEAD>
<BODY>
<FORM ENCTYPE="multipart/form-data"
ACTION="ztest.pl" METHOD=POST>file
name: <INPUT TYPE="file" NAME="myfile">
<P><INPUT TYPE="submit" VALUE="upload/GO")'></FORM>
</BODY>
</HTML>
CGI====================================
#!/usr/local/bin/perl
$|=1;
print "Content-type: text/html\n\n";
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} elsif ($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer=$ENV{'QUERY_STRING'};
}
$buffer =~ /^(.+)\r\n/;
print <<EOF;
<HTML>
<HEAD>XXXXXX</HEAD>
<BODY><H2>UPLOAD SUCCESS</H2></BODY>
</HTML>
EOF
open(UPLD, "> ZTEST.DAT");
print UPLD $buffer;
close(UPLD);
======================================
以上です。
TigerCat さん、
httpd を動かしている実効ユーザIDで chown ができるかどうかは設定によるとは思いますが、普通はroot権限が必要なのではないでしょうか?
吉田さん、
だとすると大文字/小文字の問題だったのかもしれません。
GET メソッドで .exe は、(自己解凍ファイルの)ダウンロードにしたい場合もあるので、? の有無で判断するようにしています。
/cgi-bin 以下であれば ? がなくても実行すると思います。また、POSTメソッドであれば文句無しに実行します。
尾崎さん、
なるほど、智猫さんがおっしゃる通り $ARGV の問題もありましたね。
(4) $ARGV を使っている、 があるべきでした。
なおさん、
フリーズの件ですが、CGIの実行でリロードのキーを押しっぱなしでしばらくすると画面が真っ暗になりました。
Options の Appearance(特に With Indicator のオンオフ)も関係していそうですが、そんな感じはありませんか?
DDP-SHK-Q.F さん、
Content-type は Cookie がらみなんですね。。。
ざっと見直した限りではなぜそうなるかのかまだわかりませんが、確認してみます。
いつもお世話かけてます。(^^;
CGIのPERLで、ファイルを作成するとき、デフォルトの
wwwとかnobodyユーザではなくて、別のユーザとして
書き出すことはできませんでしょうか。
(UID/GID、パーミッションを指定してファイルオープン
することって・・・できたような気がするので)
全然関係ないお話で大変申し訳ありません。
こっそり教えてください。(^^;
吉田です。
依然投稿した、http://*.cgiがNT上で実行できないという件ですが、
本日0.9beta9dをインストールしたところうまく実行できるようにな
りました。
また、exe形式はファイルのダウンロードが開いてしまいますが、exe?
とすることで、実行できました。
ありがとうございました。
#不具合一覧(?)には?がついていましたが、知らないうちに直ったのでしょうか?
#それとも設定が悪かったのかな?
ところで後ろに?があるとなぜ実行できるのでしょう?
中田さん: 智猫さん: なおさん さん アドバイスありがとうございます。
さっそく、智猫さん のカウンタをダウンロードさせていただいて
PerlISで実行してみました。(うまくいきました!)
でも、カウンタとは別に、ラウンジ(wwwlng.cgi)も私は使用していまして
ここでも$ARGVを使っているようでした…
ラウンジには、結構データを入れているので、ど〜したもんか別次元で悩んでいます。
関係ありませんが、雑感として
私の疑問が、こういったインターネットを通じて、皆さんのアドバイスで
解決される場に直面してなにやら巨大な脳ミソみたいなものを感じるというか、
スゴイというか… 不思議な感じですね。
今後ともよろしくお願いします。
智猫さん:
なるほど、systemで外部コマンドを実行するのとは訳が違い
ましたね。失礼しました。
中田さん:
マシンがフリーズしてしまう件ですが、0.9b9dではまだ未対応
のようで、フリーズします。(^^;
どうも特定のCGIだけではなくて、ほとんどのCGIで発症して
いますので、こちらの環境のせいもあるかもしれません。
でも、0.9b9cよりもしつこくリロードを繰り返さない限りは
落ちないようなので、ANHTTPD側にも問題があるのかも???
常駐ソフト含めて色々試してみます。
それから、以前書きました、ActivePerlですが、現β版だと
PerlISで環境変数が取得できないバグがあることがわかり
ました。(^^;
尾崎さん、wwwcount.cgiが手元にあったので試してみました。$ARGVでパラメータ取り出しをしている為にPerlISでは動かないようです(AnHTTPD付属ドキュメントに記述があります)
私のところでもgifcat.plを使用したカウンタCGIを配布してますので、よかったらお試しください(wwwcount.cgiほど多機能ではありませんがPerlISでの動作を確認しています)
ダウンロードページからどうぞ。
なおさんさん、sysreadはシステムコールですが、外部コマンドには該当しないのでPerlISでも大丈夫ですよ。実際に私のカウンタCGIではgifcat.plを使用してますが、PerlISでの動作を確認しています。
では参考までに。
バージョンはhttpd098d.zipのやつです。
って、もしかしてこれですか!?なら解決ですね?
でもこれってだいぶ前のバージョンみたいですね(汗)。
あと、Content-typeに関して気付いたのですが
cookieを出さなかったらContent-typeは表示されないんですが、
これってもしかしてcookieを出すときは
Content-typeの出力は不要というこということですか!?
でも、それぢゃ種類の判別できないわけだし。
取り敢えず、単独テストでcookieを出す設定で動作テストするです。
(あまり意味なさそうですが)
でしゃばり野郎です。(^^;
尾崎さん:
wwwcount.cgiはダウンロードしてあるのですが、使ってません。(^^;
使ってないし、試してもいないのですが、一応内部を覗いてみました。
どうもwwwcount.cgiに問題があるのではなく、wwwcount.cgi内部で
requireしているgifcat.plに問題があるようです。
gifcat.plで
sysread(IN, $buf, $size);
と記述されている部分がそれです。
sysreadはシステムコールなので、中田さんの(2)に相当します。
多分こいつを何とかすれば良いのでしょう。
解決策ですが、単純にreadに変更してもだめでしょうか?
すみません。私、sysreadとreadの違い、あんまりわからないもので。(^^;
尾崎さん
ちょっとまだ wwwcount.cgi の中身を見ていないのでわかりませんが、一般論では中で
(1)パイプ入出力
(2)外部コマンドの実行
(3)ディレクトリの変更
などがあると ISAPI だとうまく動かないか無視されます。
もしそういうところがあれば書き換える必要がありますが、そういう話かどうか私もちょっと見てみます。
DDP-SHK-Q.F さん
Content-type については、(ISAPIを使う設定でないとすると)ちょっとわかりません。
dnum=20 とかをセットしての単独テストでも2重出力にはならないのでしょうか?
だとしたらソースまたは実行形式のファイルを送っていただけませんか(?)。
DDP-SHK-Q.F さん
ロングネームのフォルダ名もありませんし、95だとなるとちょっとわかりません。
ひょっとして Version 0.9 beta 8d ということはありませんか? そのバージョンだけ EXE の .cgi は動作しません。
調べている過程で、.cgi の(ローカル)フルパスでロングファイルネームがあると動作不良(size of stdout is NULL)になることがわかりました。
これはショートネーム(MS-DOSファイル名)に変換して実行するようにする予定です。
うなぎさん、
http のプロクシ機能はデフォルトでオンになっています。
つまりブラウザのプロクシの設定をしてやればそのままプロクシサーバとしても動くはずです。
下のえむけいさんのお話にもある通りまだ不具合がありますけど。
どういうプロクシの使い方をしたいのか言っていただければもう少し具体的な設定を説明できますが。
(PC2台のLANで一方だけインターネットにダイヤルアップ接続で、とか。。。)
えむけいさん、
たしかにまだそうなるタネが残っていました。
申し訳ありませんが、次のバージョンで完治させます。
以前 ”ページ違反”の件でおじゃまいたしました。(アドバイスありがとうございました)
その後 +16MBして計48MBで運用していますが、まだ、ポツポツとページ違反で
落っこちてしまいますが、なんとかダマシダマシ使わせていただいております。
(Kernel32.dllも最新にしていますが…。まだ私の環境がパワー不足なのでしょう…)
で、今回また、投稿させていただいたのは、
コメント集とかを拝見させていただいていると、なにやらISAPI対応にすると
使用資源も少なそうで、実行速度も速いらしい → こりゃ”ページ違反”に効くかな?
と、perlIs.dll(Build316)をダウンロードして、設定してみると
スコスコ動く感じで、”ページ違反”に関しても、とても良い感じがします。
ただ、このときどういうわけか、カウンタのcgi(私は、cgiが書けるような人間で
なく、まったくの初心者ですので、とほほさんのページからもってきたカウンタcgi
を使わせていただいております。)からの返事がないのかどうか?本来gifで数字が
返ってくるところが、返ってきません。
HTML上 <IMG SRC="./wwwcount.cgi?gif"> という感じで記述しています。
use perlIs.dll for Ext のチェックをはずすと(つまりperlIS.dllの実行をやめると?)
うまく動作します。
それ以外のcgiの実行(これも とほほさんのページからですが掲示板等の実行(書込 含む))
は、正常に行われます。
これは、一体何故でしょうか?
私は、どのようにすればよろしいのでしょうか?
アドバイス等をいただければ幸いです。
実行環境は、0.9.9dでも0.9.9cでも同じです。
(コメント集にもあるように、なにやら別の原因で、CGI finising… といった状態で
ループに陥ることがあるようで、現在は、0.9.8dを使っています。
もちろん、これでもカウンタの実行に関して同じ現象です。)
ヘンチクリンな質問かも知れませんが、よろしくお願いします。
えっと、最後の拡張子以外に.は入ってません。95です。
フルパスはc:\httpd\_newpage\_main\cgi\board.exe(.cgi)で
URLはhttp://127.0.0.1/~ddp_qf/cgi/board.exe?dnum=20(または.cgi)です。
って、こんな感じですか。
あと、ファイル名みて見当つくと思いますが、これは掲示板なんですが
書き込む(POSTメソッド)と最初にContent-type: text/htmlが付くんです。
(ブラウザの表示、ソース共に)
最初はプログラムのバグで2重出力したのかと思いましたが、
(そもそもフラグチェックして2重出力しないようになってるし)
普通に動かしてチェックしてもそうはなってませんでした。
(環境変数は条件コンパイルして_putenv()してますが)
これはどうなってますか。
AN httpdを遣わせていただいています。
httpはなにごともなく、正常に機能しているのですが、
Proxyの設定の仕方が分かりません。
教えていただければ幸いです。
よろしくお願いいたします。
0.9b9dにしてから、ホストが混ざる現象は今のところ起きていませんが、
データが送られてこない現象は依然として発生します。
エラーが起きるときの CACHE.LOG と ERRORS.LOG の中身は
Sun Jul 12 22:43:51 1998 Hit: C:\HTTPD\http\www2s.biglobe.ne.jp\~yav\link\index.html
Sun Jul 12 22:43:52 1998 Proxy: Can't connect the server (socket error 10049)
となっていて、HTTPD.LOGには何も記録されません。
An HTTP Serverを再起動すると復活します。そのときのログは
localhost - - [12/Jul/1998 22:45:44 +0900] "GET http://www2s.biglobe.ne.jp/%7Eyav/link/index.html HTTP/1.0" 200 9522
Sun Jul 12 22:45:26 1998 Hit: C:\HTTPD\http\www2s.biglobe.ne.jp\~yav\link\index.html
Sun Jul 12 22:45:44 1998 Hit: C:\HTTPD\http\www2s.biglobe.ne.jp\~yav\link\index.html
Sun Jul 12 22:45:46 1998 Expires(Default): C:\HTTPD\http\www2s.biglobe.ne.jp\~yav\link\index.html
こうなっていました。
ketto さん、
Windowsで minibbs.dat に書き込めなくなるのは、読み込み専用 になっている場合くらいだと思います。
あるいは、他のプロセスが minibbs.dat を他から書き込み不可でオープンしているということもあるかもしれませんが。
その場合は、Windowsをリセットする必要があるかもしれません。
鈴木さん、
このページ内を Upload で検索すると出てきますが、私が知っているのは File Upload CGIで知らないと困ること くらいです。
初めまして、おいどんさんのHPで、HTTPDのことを知って、DLして
インストしました・・・設定は、おいどんさんの説明を参考に、
その通りインストして、minibbsをDLして実行させてみましたが、
最初の画面で、パスワードの設定をして送ったところ、パーミッションの設定が
合っていなくて、書き込めないと言うエラーがでます・・・
HTTPDには、パーミッションの設定はいらないと思いましたが、
これを回避するのにはどうしたらいいでしょう・・・
なにぶん、初心者で、こんな事もと思われるかもしれませんが、よろしくお願いします
httpdをサーバのソフトとして動かしています。
今度、FileのUploadが行えるようなCGIを作成したいのですが、
参考となるようなページがなかなか見つかりません。
知っている人がいたら、教えてください
また、そのようなCGIのサンプルがあったら教えてください
智猫さん自動切断の件どうもありがとうございました。
ということは、定期的に回線を使用すればいいわけですね。
タイマーで定期的に回線を使用する仕掛けをJAVAかなんかで作ってみます。
ありがとうございました。
TOM さん
明日くらいに 0.9 beta 9d を出すので、そちらでもテストしていただけるとありがたいです。
また、アクセス違反で落ちた時のワトソン博士のログも(メールで)お願いします。
こんにちは。beta9が落ちちゃうTOMです。
えーと,とりあえずサービスじゃ無くして通常起動にしてみました。
・・・あまり変わりません。だいたい1日1回ペースくらいで落ちます。
テストしたのはbeta9bです。今からbeta9c入れてみます。
また一週間後くらいに報告差し上げます。beta9cにする以外にテストして欲しいと言うことが
ありましたら言ってください。出来ることはやります。
DDP-SHK-Q.F さん
URLおよびローカルのフルパスを教えていただけますか?
最後の拡張子以外にドット'.'は入っていないでしょうか?
あるいはNTでしたか?
はまださん、
Could not bind server socket のエラーメッセージをOKにすると、タスクバー隅のアイコントレイに小さな黄色のアイコンが出ているはずです。
その状態では、稼動していません。
そのアイコンを左クリックして httpd のウィンドウを開き、Options 以下で Port を変えて下さい。
Portを変えると稼動を開始するはずです。
なんか大袈裟に書いてるようですが、簡単なことですので自分で探してみてください。
かうかうさん、それはモデム/TAかプロバイダ側に切断されているのでしょう。
どちらも無通信状態が続くと切断されるようになっています。
これは回線の切り忘れで電話料金がかかることを防止することと、無通信の無駄な回線資源を他のユーザが使えるようにする処置です。
AnHTTPDの運用中は席を離れずにどこかのサイトを見たりしてると結構回避できます。
私は上記方法以外に他の方法でも回避してますが、余り広まるとビジーやプロバイダの負荷の増大になりますのでお教えできません。あしからず。
……それをやってる自分はどうなんだと言われると困りますが(笑)
どうしても分からないので質問です。
ダイヤルアップで接続中、長時間放置しておくと自動切断されてしまうのですが、
回避方法を教えてください。
なお、モデムプロパティの自動切断のチェックボックスはオフにしているのですが・・
よろしくお願いします。
あの、小文字だけどダメです。
(個人的にファイル名の拡張子部分が大文字なのは
もどかしい感じがして嫌なんですが)
というわけで、最初から小文字なんですが何故でしょうか。
はじめまして。早速質問なのですが…
"Could not bind server socket"とFAQの4番でも書かれている
メッセージが表示されるのですが、そのあともhttpd.exeが立ち
上がってきません。オプション起動しても同様の状況です。
レジストリを覗いてみたのですが、AnHttpdの下は
標準 設定の値なし
となってい、defaultの設定自体ありませんでした。
このような現象で、考えられる原因と対処法がありましたら、お教え
頂きたく。よろしくお願いします。
山崎さん、
これは、リスト用に割り当てる領域が現在のところ 64kB のための制限です。
必要に応じて割り当て領域を増やすようにしたいと思っています。
DDP-SHK-Q.F さん、
.cgi の部分が .CGI と大文字だとそうなるようです。
とりあえず 小文字の .cgi としてやってみてください。(DOSプロンプトでは REN *.CGI *.cgi)
これは次の版で大文字でもいいように直します。
なおさん、
表示部分で大きな変化はないつもりなのですが、断言はできません。
他からのアクセスでは大丈夫ということは、ソケット操作まわりかもしれません。
そのCGIをそっと見せていただければ解決が早いとは思いますが、プロクシがらみでフリーズが発生したりすることが判明したので、それとあわせて対策を考えてみます。
またインデックスリストで質問です。
あるディレクトリの中に600個ほどのファイルを入れていて、そこをインデックス
表示させているのですが、493個表示された後
... too much file.
... too much file.
とエラーメッセージが出ていて、それ以降のファイルが表示されません。
これは、何かの制限なのでしょうか?なんとか表示させる方法はありませんか?
むー。.exeを.cgiにしてcheck .cgi if script/exeをチェックしましたが
コマンドまたはファイル名が違いますと言われます。
.exeだと問題ないですが。
まだPOSTメソッドは試してませんが。にゅ。
あと、CONTENT_TYPEが入ってたり入ってなかったりしますが
これはそういうものなのでしょうか。
0.9b8eでは普通に動いていたperlのCGIが、0.9b9cだとマシンが
固まる・画面が乱れて固まる・ブルーバックになって固まるという
現象が起きると言われて、ちょっと調査したんですが、私の環境
でも同じことが起きました。
どうして固まるかはわかりませんが、ある特定のCGIを何度も
リロードして結果を表示させようとしたときに固まります。
ちなみに、perlISの場合は問題なくperl.exeのときだけ起き、
しかも、自分のマシン上で実行したときは起きるのに、他の
マシンからアクセスした場合は問題ありません。
設定は、Build316のperl.exeを使うようになっており、
SingleThreadにチェックが付いています。
なお、固まる現象が起きるCGIは今のところ1つだけです。
(都合上そのCGIをお見せすることはできないのですが・・・)
そのCGIは特殊なことをしているわけではなく、極々普通のCGI
なのですが、処理としては、20以上のファイルをオープン&
クローズして内容を一覧表示するようなCGIです。
どうも表示する部分が怪しいような気がするんですが、表示部分
で0.9b8eから0.9b9cまでの間に、何か大きな変化があったんで
しょうか?
何だか支離滅裂になってきました。(^^;
今までAN HTTPDが落ちることはあっても、マシンが固まること
はなかったんで、回避方法を考えるだけでもパニックです。(^^;
ASKN さん、金魚のフンさん、
どうもありがとうございます。
智猫さん、
答えは重複してもかまわないでしょうから、今後もぜひよろしく。
えむけいさん、
データが送られてこないのはタイムアウトの関係のようです。
また、別ホストへのアクセスでホストが混ざるのは、内部のDNS検索のキャッシュがまずいようです。
どちらも、ほぼ再現できたので、次の版で直せると思います。
始めまして
AN HTTPD使わしていただいています。ありがとうございます♪
最初はうまく動かなかったのですが、過去のコメントに助けられてなんとか動いてます。くじけないでよかった♪とても感動しながら使ってま〜す。
中村さん、智猫さんファイル名称に # が入ると開けない件で
解答ありがとうございました。
なるほど、言われてみれば確かにそうですね。
全然思い付かなくてお騒がせしました。m(_ _)m
新バージョン落としに来ました.
7/5 から自分のHPを公開してるのですが,その動作確認などに使っています.
もっともまだCGIとか利用許可がおりないんですけど(笑)
漫画絵に抵抗のない方はこちらへどうぞ.Hは一切なしです.
あらら、中田さんが答えてあったようですね。
失礼しました
山崎 弘明さん、
#の記号以降はHTMLではページ内のラベルを表すものですので、URLに#が含まれているとURLの#以前のページの#以降のラベル名という意味になります。
HTMLなどに使用するファイル名には記号や全角文字、半角カタカナを含まないほうがいいですよ。
ちなみにページ内にラベルを作るタグは<A NAME="ラベル名">です。
An HTTP Server 自体のエラーではなくて、ホームページが載っているプロバイダのサーバが
「Not Found」を出したりします。
また telnet で覗くとヘッダも含めて1バイトもデータが送られてこないこともあるようで
す。IEで見た場合は「無効または認識されない応答をサーバが返しました」、NNだと「ドキュメント
にデータが含まれていません」というメッセージボックスが出ます。
「複数の……」というのは、たとえば member.nifty.ne.jp 上のページへアクセス中に
ブラウザのウィンドウをもうひとつ開いて http://www.st.rim.or.jp/~nakata/ へアクセスし
ようとすると、なぜか An HTTP Server 内部では http://member.nifty.ne.jp/~nakata/
へアクセスしようとしているらしくてニフティのサーバのエラーメッセージが出るとか、そう
いう現象です。
ページ上に別のサーバ上の画像への参照が埋め込まれていたりすると、いくら再ロードを繰
り返しても読み込めないという現象も発生します。
いずれもブラウザの設定でプロクシをOFFにすれば発生しません。
山崎さん、
URL中の # はそれ以降を fragment(ページ内の名前指定とか)とみなす、という文字ですから、すなおには開けないと思います。
URLに使われるファイル名(フォルダ名)には(生の)# を使うべきではない、ということでしょうか。
まあ、だったらインデックスリストでそのまま出すな、ということかもしれませんが。。。
DDP-SHK-Q.F さん、
智猫さんも書いておられる通り、
.exe を .cgi にして、Options/General の check .cgi if script/exe をチェックしておくと、.cgi が EXE形式なら .exe とみなして実行します。
なお、このチェックは、最初の 2byte が MZ なら EXE形式とみなす、という簡易チェックです。
なおさん、
ActivePerl の紹介ありがとうございます。
そのまま そのPerlIS が動くように、私もそろそろやってみたいと思っています。
インデックスリスト(ディレクトリリスト)で表示されたテキストファイルをクリックして
開こうとすると、
Error 404
Not found - file doesn't exist or is read protected
と表示されて開けません。ログを見てみると
Error Response 404 Thread 0(ID= -728637) for "/~yama/soft/Ko72"
と表示されています。ファイル名は Ko72#m1.txt ですので、# 以降認識
出来ないようです。何か制限があるのでしょうか?
すなおに開けるようには出来ないのでしょうか?
DDP-SHK-Q.Fさん、ローカルで実行するEXEファイルのCGIの拡張子を.cgiに変更してはどうでしょうか?
私は使用していませんが、その為のオプション設定がAnHTTPDにあったと思います。
随分前にも書きましたが、
Cでcgiを作りAN HTTPでローカル状態(?)でテストしてる者です。
で、ローカルでは拡張子が.exeで
実際のサーバにあげると拡張子が.cgiとかになると思いますが
これでhtmlファイルを2通り用意せずに済む方法とかないのでしょうか。
(Cのソース内なら条件コンパイルとかすればいいですが)
何か表現が変化かも知れませぬが、すみませぬ。
すみません、お詫びします。
「except POST」になぜかチェックが付いてました・・・(^^;、で、
POST系のCGIが多かったので、当然動いてしまうと・・・。(--;
結論としては、renameはうまく行くけど、どうも環境変数(%ENV)
がうまく取れません。(;_;)
AN HTTPだからかどうかはわかりませんが、やっぱり使うのは
やめた方がいいのでしょう。(^^; どうもすみません。<(_ _)>
#インストールしてもいいけど、フォルダの構成を変更するか
#レジストリを書き換えるかしなければperlISは動きませんよ。(^^;
#もしかするとうまく行く方法があるのかもしれませんけどね。
#もう少しいろいろとやってみますけど。
なお、perl.exeの方は普通に使えるので問題ないです。
ということで、毎度お騒がせしました。<(_ _)>
#なさけない・・・
以前、perlISのbuild316ではrenameが使えないという話をしましたが、
build316以後のバージョンがまだ出ていないのでrenameが使えなくて
さびしい限りです。で、そんなあなたに朗報です。(ホントか?!)
まだベータ版なのでローカルで使うのみにとどめた方が良いと思いますが
<B>ActivePerl</B>というものが出ました。
http://www.ActiveState.com/ActivePerl/
↑こちらです。
ActivePerlはバージョンでいうなら<B>Perl5.005</B>。(でもベータ版なので5.004_69)
Perl for Win32だけではなくて、Perl for ISAPIとPerlScriptを含んでます。
不具合はあるかもしれませんが、私のところでは、現在のところ、ちゃんと
renameもできてますし、おかしな動作はしてません。
何分にもベータ版ですので、何か起きたときに復旧できないような方はインストール
はしない方が無難でしょう。(^^;(何が怒るかわからんし)
詳しくはActiveStateのWebページを見てください。(全部英語ですが・・・)
いっつさん、
了解しました。 が、同じパラメータで自分自身を呼んでもよさそうですけどね。。
けんさん、
ホスト名(+ドメイン名)でアクセスできるようにするには、それができるようにする範囲でやり方が変わると思います。
(1)インターネットからアクセスできるようにするとすれば、正式ドメインを入手する必要があるでしょう。
(2)ダイヤルアップ接続では接続時のIPアドレスに対応するホスト名は決まっていると思います(プロバイダのDNSに設定されている)。
(3)ローカルのLAN内であれば、LANのDNSサーバに登録してもらうか、各ホストの hostsファイルに書いてもらう。
(4)PC一台でやる分には、DNSを使う設定にして適当なドメイン名をつけて、hostsファイルも作ればそれでいいわけです。
あと、(1)と(2)の中間で、固定IPアドレスあるいは固定ホスト名という接続法もあるようですが。
いずれにしろ、HTTPサーバが名前を割り当てるわけにはいかないと思います。ホスト名(あるいはIPアドレス)はHTTPサーバにアクセスするための情報ですから。
あるいは意味が違いますか(?)。
えむけいさん、
エラーはどういうエラーでしょうか?
あと、「複数のドメインへ」という意味がちょっとわかりません。
T さん、
CGIの中身に手を入れないでとなるとちょっと難しいかもしれません。
うまくいかないようなら聞いてください。
以前、Location: でエラーが出ると書きましたが、僕のミスでした。ごめんなさい。
hoge.cgi で、CONTENT_LENGTH が0より大きかったら、指定の処理をして、自分自身を Location: で呼んでもらうという処理をしていたんですが、自分自身を呼ぶというのがまずいようです。
この場合の自分自身は、パラメータも含めてまったく同じURLを指します。パラメータが違う場合は問題ありませんでした。
この現象はネットスケープナビゲータ(4.05で確認)で発生します。インターネットエクスプローラ(3.02で確認)では発生しませんでした。
ホストドメインネームを取得する方法はありますか?
xxx.xxx.xxx.xxxだとカッコ悪いので
ネームがほしいです。
今後改定の予定はないのでしょうか?
えと、かなり前の問題(1998/06/26 23:38 のカキコミ)のことなのですけど、どうやら解決したようです(^^;
ありがとうございました。>北川さん
いろいろ試した結果、ExecProg. for .pl, .cgi に
C:\www\perl\bin\perl.exe
入れてみたら成功したようです。
では、結果報告でした・・・多分、このページなかったらこの問題あきらめてました。
またなにか問題起きた時もどうぞよろしくお願いします。
0.9b9cにしてから、プロクシ/キャッシュ経由で複数のドメインへアクセスしたとき
エラーになる確率がものすごく高くなったような気がします。
中田昭雄さま、ご返答ありがとうございます。
わたしは、このソフトをCGIの実験の為にダウンロードして使っているわけではないので、
CGIはからっきし駄目です。
でも、たしか、CGIの具体的なファイルが付属していたようなので、何とか使ってみます。
頑張りますので、今後ともお願いします。
Tさん、
ファイルのアップロードは Version 0.9 beta 8 以降ならできます。
File Upload CGIで知らないと困ることの cgi-lib 2.15 を使ってのアップロードは確認済みです。
色さん、
URLはまともですから、ちょっとわかりません。。。
(1) DOSプロンプト で perl -v でバージョンが表示されますか?
(2) PerlISを使う設定なら、PerlIS と Perl for Win32 の Build番号はあっていますか?
天井さん、
timefmt は、%T などの POSIXのフォーマット文字列についても対応させたつもりでしたが、今やってみたら確かに 00 になってしまいました。
たとえば %T は %H:%M:%S で代用できますが %T も(次の版で)使えるようにします。
なお、%R は ANSI, POSIXどちらにもないようですが。。。(%r あるいは %D のことでしょうか?)
はじめまして、Tともうします。
Httpdを使わせていただきました。
わたしのところは、MacとWin95が混在していて、
本来はUNIXかWINNTなんかでサーバを立ちあげないと、
ファイルを相互に持っていけないようですが、
このソフトで、ホームページとしてデータを交換することができます。
ところで、NNのファイルのアップロードを使って、
データをアップすることはできるのでしょうか。
中田様江
お世話になっております。
レスが遅くなりまして、申し訳ありません。
>URLはどのような指定でしょうか?
OIDON様のHPを参考に作ったのですが...。
URLは「http://192.0.1.65/~orijinal/chat/chat.cgi」
になっています。
このプログラムがメインです。
出来ました〜(*^^*)どうもありがとうございます。
根本的にflyで何が出来るのかを少し勘違いしていました;;。
当然の部分って、やっぱりどこ見ても載ってないんですよね。
助かりました。
ところで、SSIの時刻表示、%Tとか%Rが00と表示されます。
ぱっと見たところではわからなかったんですが、どなたかご報告済みでしたらすみません。
入江さん
なるほど。Win98 の WSH のサンプルを動かしてみました。
クライアント側での実行用のようですが、これをCGI/SSIとして使うというのは面白そうですね。
標準入出力の操作が(私は)ちょっとまだわかっていませんが、これならすぐに組み込めそうです。
VBS/JS ですが、 .vbs/.js で cscript.exe を起動すればいいだけだと思います。
天井さん、
C:\tmp というフォルダを作ってあるなら、
$infile = "/tmp/fly.$$";
でいいわけですけど。
この /tmp/fly.$$ は、C:\tmp\fly.$$ のことになります。
あと、もちろん $outfile は指定してなければ困りますね。
$outfile = "/tmp/flyout.$$";
とか。
下のログでは、これらのことは当然のこととして省略してしまっていますね。
入江さん、
どうも。
SSIのリソース減少は、とりあえず PerlIS(ISAPI)なら避けられます。
Win98で command.com が複数回起動されるとリソースを減らすようですのでなんとかしたいとは思いますが。
VB/JavaScript の件は、ASPができるように、ということですよね?
サーバ側で処理するためには、スクリプトを解釈実行する部分が組み込めないといけないと思いますが、できるかどうか。。。
バッチファイルうまくいきました(*^0^*)/☆どうもありがとうございます。
jgawkもうまく行きました!見よう見まねで、set path=のところに混ぜてみました。
ところでflyの方は、書いても反応がありません・・・(-_-;)。何故だろう??
c:\0\app\flyにあります。pathにはc:\0\app\flyと書きました〜。$flyprogもflyにしたり、色々入れてみたんですが・・・。
fly-n.exeというのは、検索でflyのインストールページ日本語訳を見つけまして、そこを読んだところ、「それが出てきたら」云々と・・・。zipの人はインストールの必要は無いとあったので、関係なかったのかな?zipで降ろして、一度デスクトップで解凍、フォルダにしまいました。
c:\0\app\fly\examples\cgi-perl-example.plの中身です。省略部分は下ログとだぶってます。
パス指定違うんでしょうか・・・;;。$outfileとかも指定必要なんでしょうか??;;
それとも5分位待ってみた方が良いのかな・・・;;。
$flyprog = "/0/app/fly/fly";
$infile = "/tmp/fly.$$";
↓
close(FLY);
#open(FOO,"$flyprog -q -i $infile |");
#while( <FOO> ) {print;}
#close(FOO);
`$flyprog -q -i $infile -o $outfile`;
↓
print "$output";
unlink($infile);
exit(0);
おそくなってすみません。
こちらでも 1998 で実験してみましたが、改善されていませんね。
しょうがないので時々リブートしながら、使ってます。
ところで IE4/win98 では vbscript/javascript が直接実行できるんですが
これを CGI/SSI でサポートして見ませんか?
天井さん、
MSIE の場合、バッチファイルのCGIを正常に動作させるためには、
エクスプローラの表示/オプション/ファイルタイプで
「MS-DOSバッチファイル」 の 「内容の種類(MIME)」 を text/plain にして下さい。
PATHの設定は AUTOEXEC.BATでしてもらえばいいと思うのですが、別の話でしょうか?
jgawk.exe を C:\Windows\command などに入れてしまえばそれでもいいわけです。
fly.exe は CGI の中で 絶対パスで指定しておくなら PATH を通す必要はないと思います。
fly は、fly.exe です。fly-n.exe というのはどこで出てきたのでしょうか?
付属のサンプルのCGIを動かす要領は、たしかに前にでてきたと思います。
flyを -o 付きで実行するのと、ファイル入出力で binmode を使う、というのが UNIXと違うところ、だったと思います。
こんにちは。そうです、プロンプトがc:\windows\デスクトップ>になってます。
環境変数一つにつき一回、
「c:\windows\デスクトップ>SCRIPT_NAME=/cgi-bin/test.bat
コマンドまたはファイル名が違います
」
などと出ます。これが変数の数分続きます。
httpdはc:\httpdに、jgawkはc:\jgawkに入ってます。ついでにflyというものも最近聞くなあと入れてみた(c:\0\app\fly。win95版)んですが、下ログの通りにやっても待たされるだけです;;。jgawkにしろflyにしろ多分パスが通ってないだけなんだよなと思うのですが、どこをどう直してよいものやらさっぱり・・(-_-;)。ちなみにドキュメントルートは、c:\httpdにしてあります。/cgi-binはc:\httpd\cgi-binです。
perlみたいに、指定出来るところはあるんでしょうか。
それから、fly・・・解凍したらfly.exeが出てきましたが、本当はfly-n.exeが出て来なきゃならないところ・・・なのですか?
質問ばかりですみません。
結城さん、
こちらこそどうもありがとうございます。
TigerCat さん
テストどうもありがとうございました。
MSIE5.0Jも、よろしければ確認していただければありがたいです。
シェル(command.com)プロセスがらみかな、という気はしていますが、まだわかりません。
色さん
URLはどのような指定でしょうか? また、PerlIS.dll を使う場合でしょうか?
「プログラム開始エラー」になる条件がまだつかめません。
TOMさん
サービスでなければ落ちないのでしょうか?あるいはサービスでなくても同じですか?
村田さん、
CGIの中でURLを指定するところ以外はローカルパスの指定になります。
ローカルパスであれば絶対でも相対でもいいはずですが、相対の場合は、(perl.exeの時は)CGIスクリプトがあるところがカレントディレクトリになるはずです。
AN HTTPD のMLはありません。
何かあればここに書いていただくか、メールででもどうぞ。
天井さん
「ファイル名またはコマンドが違います」は、おそらく中で jgawk を使っているところだろうと思います。
「場所も何故かC:\WINDOWS\デスクトップ>」 は、ちょっと意味がわかりません。CGI実行後、DOSプロンプトがそうなっているということでしょうか?
中田さん、
いつもお世話になっています。結城浩と申します。
CマガジンでCGIの連載をしていますが、原稿を書くとき、
基本的にAN HTTPDでローカルに実行して試しています。とても助かります。
近々、拙著『Perlで作るCGI入門』の応用編がソフトバンクから出版されますが、
そこでもAN HTTPDとこのページをご紹介させていただきました。
本当にありがとうございます。
お礼と宣伝でした(^_^)
基礎編
中田様、Windows98日本語製品版にて、AN HTTPd 0.9beta9b
のSSI実行時にリソースを開放しない件、調査しました。
こちらの環境は
COMPAQ ARMADA4130T (ノートSVGA Pentium133)
メモリ 24MB
Windows98J 4.10.1998 (build 1998=製品版です)
perl.exe Version 5.003_07 base perl for win32 Build 316
という感じで、Win98標準のIEで
http://localhost/isapi/isssi.shtml へアクセス。
(AN HTTPdのキャッシュ/PROXY機能はOFFです)
Windows標準のリソースメータにてデータを取りました。
データを取ってはIEのリロードボタンを押し、という
作業の繰り返しです。
AN HTTPd起動時のメッセージ
SERVER READY on aruru at PORT 80
Microsoft wsock32.dll, ver2.2, 32bit of Apr 28 1998, at 19:33:24.(Win95)
for DocumentRoot: C:\www
Server socket initialized -- waiting for connections.
host = ARURU, addr = 169.254.149.135
それではデータです。
[リロード回数] システムリソース Userリソース GDIリソース の順
[初回] 74 74 94
[ 2回] 72 72 94 -> 74 74 94 (一瞬72まで落ちるが74に復活)
[ 3回] 72 72 94
[ 4回] 69 69 94 -> 72 72 94
[ 5回] 68 68 94 -> 69 69 94
[ 6回] 68 68 94
[ 7回] 65 65 94
[ 8回] 63 63 94
[ 9回] 62 62 94 -> 63 63 94
[10回] 62 62 94
[11回] 59 59 94
[12回] 59 59 94
[13回] 54 54 94 -> 57 57 94
ここでIEを閉じる 59 59 97
AN httpdを閉じる 62 62 97
結論: 確かにリソースが減少して行きます?!が〜ん!!
以上。
ps. あ、ひょっとしてWin98のIEがおかしいなんてことは・・・
今度IE5.0Jbeta1でテストしてみましょうか?
>Perl for Win32 が正常にインストールされていて、
>インストール先の bin ディレクトリに Perl300.dll はありますか?
Perl300.dll はありました。
>「Perlのプログラムを実行しようとすると」というのは、
>どのように実行しようとした場合の話でしょうか?
ブラウザを立ち上げ、URLを入力しました。
自己レスです。どうやらテキスト表示されるのは、うっかりファイルを開くから、c:\〜指定してしまったからのようです;;。まぬけな質問してごめんなさい。
デスクトップ関連の方はまだわかってないです。
使ってるのは9-9で、win95を使ってます。
こんにちは。beta9がよく落ちるのでbeta8にダウングレードして使っていました。
先週の土曜日に入れ直して現在までで火曜日に一度落ちましたがそのとき一度だけでした。
beta9を入れる前の約2ヶ月半の間beta8は落ちることなく平穏無事に動いていました。
beta9の場合はほぼ毎日の様に落ちてひどいときには再起動してテストしようとしたときに
落ちたりしました。
ちなみにNT4serverにサービスとして登録しています。ふだんはログオンしっぱなしの
24時間稼働サーバです。他の常駐物としては桜時計というタイムサーバから時間を
とってきて調整するソフトがいるくらいです。
上記で説明不足の点がありましたらご指摘ください。
中田さんありがとうございました。
オープンエラーの質問をしました村田といいます。
どうもインストールしてすぐに実験してそのまま質問してしまったのが間違いの元でした。
結論からいいますと、絶対パスの指定で解決しました。
logfileの置いてあるcgi-binにはエイリアスが設定されているので最初は相対パスで指定してみたんですが....
今後ともよろしくご指導ねがいます。
それとMLなんかは、あるんですか?
初めまして。ローカルでCGIをテストしたくて、導入してみました。動いた時は感動しました!!(*^^*)おかげでデータのコンバートなどにとっても役に立ちました。これからも頼りにさせてもらおうと思ってます☆
ところで、CGIによって、何故かテキスト表示されてしまうものがあります;;。それと、CGIの「単純なテスト」なんですが、何故か「ファイル名またはコマンド名が違います」がたくさん出てきて・・・場所も何故かC:\WINDOWS\デスクトップ>になってしまってます。
ご教授頂けると嬉しいです;;
村田さん、
open の前に、if ( -e "$log_file") とかで、$log_file の存在を確認してみてもちゃんと存在するでしょうか?
ほかには、他の(CGI)プロセスで読み書きオープンしているとそうなることがあるのかどうか、ちょっとはっきりしませんが。。。
色さん、
プログラム開始エラーでしょうか。。。
Perl for Win32 が正常にインストールされていて、インストール先の bin ディレクトリに Perl300.dll はありますか?
また、「Perlのプログラムを実行しようとすると」というのは、どのように実行しようとした場合の話でしょうか?
(DOSプロンプトで perl -v としても開始エラーになりますか?)
はじめまして、httpd099bを見つけたので、挑戦したくてさっそくインストールしてみました。
当然、初心者です。
Win95,perl build306、jcode.pl、とりあえずperlIS.dllは使わない設定にしました。
(使う設定にしてみたんですがerrになるので、また外しました)
そこで、下のスクリプトですが、$log_fileは前段で定義していますし、log_fileも
指定場所に置いてあるんですが、errormes();へ行ってしまいます。
if(!open(fp,"$log_file"))
{
errormes();
}
NTサーバ(IIS-sp4)で使っているスクリプトをそのまま動かしてみた結果です。
どこが悪いんでしょうか。
質問です
Perlのプログラムを実行しようとすると、
「Perl300.DLL」が開始できません。
と出力されました。
どうしたらよいでしょうか?
ひかるさん、
リンクはいくらでもどうぞご自由に。
TigerCat さん、
リソース減少のテストは PerlIS は使わずに isapi/isssi.shtml でやってみていただければありがたいと思います。
Win95 では kernel32.dll のアップデートは後で出ましたし、MSIEの初期のリソース減少などもありましたから、私はちょっと悲観的です。
よろしくお願いします。
中田さん、こんにちは。
今年の初め頃からhttpdを使わせていただき、こちらにも書き込みをさせて頂いた者です。
一応、httpdでデバッグしたCGIを取り付けた仕事がらみのWebページも
うまく立ち上がり会社の中では、なかなか好評です。
ついでに、自分でもプロバイダのホームページスペースを使い
自分で作ったCGIスクリプトを紹介するページなども作ってしまいました。
ちなみに、自分のページからこちらのページへのリンクを張らせていただくことは可能なのでしょうか?
あれ?書き込み失敗かな。
中田さま、Win98製品版で、SSIの実験をしてみようと思います。
どういうスクリプトをどういう条件で、などというテスト要件を
指示していただけると、やりやすいです。
どこかのDLLでのメモリリークでしたら、直ってる可能性は
高いのではないかと思います。
(・・・たぶん)