どうして最近早めの時間でもカキコできないんだろ....
眠い眠い
さて....
パスって....
>miyakeさん
まず標準的にDOS/V機ではCドライブ,PC-98xx(NXを除く)ではドライブがシステムドライブ
(かつブートドライブ)となります。DOS/V機では割り当てられるドライブが固定になっている
のに対してNECではフロッピーで起動するかハードディスクで起動するかによってどちらがAドライブ
になるように作られています。何故そうなるのかはOSを設計した人にでも聞いてください。
そういうふうに作られているからです。まあDOS/V機の場合は常に固定のドライブ割り当てNECは
どっちから(ソフトを)立ち上げても同じドライブ割り当てとなるようにでも考えたのでしょう。
何故同じにしないのか。少なくともNECはいつも独自の仕様で突っ走ってきましたからね。その
名残でしょう。
ということでまずAUTOEXEC.BATですがAドライブから立ち上げているならAドライブのルート
(A:\)にある筈です。なければ作る必要があります。A:\WINDOWS\OPTIONS\CABSフォルダ内の
ファイルはセットアップ用なのでここはいぢっても仕方ありません。
次にDOSプロンプトでエラーとなったのは違うファイルをいぢったので(先の通り)そうなっ
た訳ですがパスが通っていないのでperlだけでは動きません。b:\www\perl\bin\perl -version
とすれば動かなくはないが。
それからUnZipの後DOSプロンプトは開かなかったのでしょうか。そこでいくつかのメッセージ
に対して「y」を答える必要があります。そのとき最後にリブート(再起動)するように指示され
ます。
自信がなければ再度Perlをインストールし直せば良いでしょう。
ふと思ったこと。
PC-98xxで使えるんだろうか?
このクラスのソフトはどちらでも動いたりするものですが最適化などのためにハードに依存す
る(BIOSと言った方が正しいのか?)こともないとは言えない?
例え同じ名前を持つWindowsでもDOS/V機とPC-98xxでは違うものですから....
>カメヤマ@KTSさん
そういうことをされていたのですか。
中田さんのいう納得できないというのがどういうふうに納得できないのかが判りませんが
σ(^ー^)も納得できない気がします。というよりなんかややこしい。頭がぐしゃぐしゃ。そうい
うことをやったことがないからでもありますが(ちょっと今はテストもできない)。
と14行ほど書いていたところで何をやってるんだってことで書き直し....疲れた
AN HTTP Serverが動いているマシンとドキュメントルートは同じなのですね。素直に直接
ドライブ名を設定してください。どうしてそういう設定をしたいのか趣旨が見ませんが。
どうしてもそのように指定したいのなら少なくとも(たぶん)\\kts-000\kts_dt2が(その名
前で)共有設定されていないといけない筈ですがそうなっていますよね(でなければダウンロード
になる訳もないだろうが)。以前は動いていたということなのでそこを間違っていないなら動
くのだろう。
あとkts-000という指定がIPアドレスに変換されて処理されるのだろうか?動いていたという
ことなので処理されているのでしょうけど。確認できないのでちょっと判りませんが。
file://kts-000/...ではなくhttp://kts-000/...なのですよね?(念のため)
あとは....
実験してみないと判らないかな?
ちょっと頭の中が整理できない。
素直にhttp://(IPアドレス)/とするのが良いとは思いますが。既に確認した後の話なのだ
と思いますが....
どの段階まで動いた結果の話なのだろう?という気もしています。
かなりぐしゃぐしゃになってしまいました。
ごめんなさい。
カメヤマ@KTSさん、
ちょっと理解に苦しみますが、
httpd.exe を起動しているPCが kts-000 だとしたら、ドキュメントルートやエイリアスにわざわざ \\コンピュータ名 という記述をするのではなく通常の C:\HTTPD などとした場合、どうなるでしょうか?
あるいは、kts-000 以外の PC で httpd.exe を立ち上げているのでしょうか? だとしたら URL が http://kts-000/ というのが納得できませんが。。。
miyake さんのは私はパスさせてもらいます。 ぴゅあさん、よろしく!
岡山さん、
どうもありがとうございます。
keeowさん、
PWSも最初の1.0では本気でやるつもりはなさそうに見えましたが、しっかりバージョンアップしていますね。
>中田さま
4つの設定値について記入いたしました。
よろしくお願いいたします。
(1)ダウンロードになってしまう(CGIを実行する)ときの URL
http://kts-000/kaigo/hantei.cgi
http://kts-000/~test/kaigo/hantei.cgi
※すべてのCGIがダウンロードになってしまう。
(2)httpd.exe があるディレクトリ(フォルダ)
\\kts-000\kts_dt2\HTTPD
(3)ドキュメントルート
\\kts-000\kts_dt2\HTTPD
(4)設定しているエイリアス
/ --> \\kts-000\kts_dt2\HTTPD
/~test --> \\kts-000\kts_dt2\HTTPD\html
/cgi-bin --> \\kts-000\kts_dt2\HTTPD\cgi-bin
また質問なんですが、よろしくお願いします。
ぴゅあさん
>再起動の点では例えばシステムドライブ(WINDOWSフォルダがあるドライブ)がブート
>ドライブ(DOS/V機ではCドライブ)以外の場所にあるとシステムドライブの方に
>AUTOEXEC.BATが作られてしまうようです。DOS/V機を対象に考えている筈なのでPC-98xx
>の場合はCドライブに作ろうとされるのだろうか?(WINDOWSフォルダのある場所に作ろう
>としそうな気がするけど)
私のパソコンNECのPC-9821C166/Cです。
システムドライブ(WINDOWSフォルダがあるドライブ)は、Aドライブです。
ブートドライブはDOS/V機ではCドライブとありますが、一体何なんですか?
AUTOEXEC.BATは、A:\WINDOWS\OPTIONS\CABSの中にありました。
ここまでの事はこれでいいのでしょうか?
ぴゅあさん
>まずブートドライブが何処であるのか確認してください。PC-98xxではAドライブが一般的
>(NXではないのだろう推測していますが)ですが他のドライブからでも起動できるようなの
>で。
>そのドライブをエクスプローラなどで見てAUTOEXEC.BATというファイルを探してくださ
>い。このとき(フォルダ)オプションの表示プロパティシートで「すべてのファイルを表示
>する」を選択しておかないと見えないかもしれません。
>またWebスタイルを選択できない(していない場合は)拡張子を表示するように設定しない
>とどのファイルであるか見つけられないと思います。上記と同じ場所にある筈です。
>AUTOEXEC.BATをメモ帳で開いて(ワードパッドやWord(Office),一太郎などでは開かな
>いこと)一番最後の行にPATH %PATH%;b:\www\perl\binという1行を追加してください。
AUTOEXEC.BATをメモ帳で開くと
@echo off
oemset up
とありました。
最後の行に PATH %PATH%;b:\www\binを追加しました。
>これで次回の起動時からDOSプロンプトでperl xxx.cgiなどとするだけで良いようになり
>ます。
>試しにDOSプロンプトを立ち上げてperl -versionと打ちこんでちゃんとバージョン情報が
>表示されれば正しく設定できています。またこれができていればAN HTTP Serverでもデフォルト
>のまま(即ちperlのまま)で動く筈です。
試しにDOS-プロンプトを立ちあげてperl -versionと打ち込んでみましたところ、
コマンドまたはファイル名が違います。
という表示が出ました。
これはperlがちゃんとインストール出来ていないのでしょうか?
perlをインストールする時、pw32i316.exeを実行し、インストール先を
b:\www\perl にしUnzipボタンを押すと
252file(s) unzipped successfully
という表示が出たのですが・・・。
どこをやり直せば(触れば)いいのでしょうか、教えてください。
よろしくお願いします。
初めまして。
石川県の岡山ともうします。
自作の掲示板やアンケートを作りたくてCGIのお勉強を始めました。
どうやってCGIのテストをしたらよいか悩んでいたのですが、HTTPDをインストールしたら全て解決したみたいです。
ありがとうございました。
始めまして....
HTTPDをダウンロードさせていただきました。
CGIの勉強をしようと思っていたので、最初、MSのPWSを入れたんですが、Perlとの関連の設定が、うまくいかず、困っていました。
PWSは、VBScriptの説明は、詳しいのデスが....なんだか、「MSにあらずんば、ソフトにあらず」って感じでなんかイヤですね(^^)
でも、おかげで、CGIのお勉強に取りこめます。
また、ちょくちょくワザを盗みに来ますのでよろしくお願いします。
まずは、どうもありがとうございました!!
多謝...
ぴゅあさん、
>ただ一言で答えるのとどっちが良いんでしょうね。
どちらが良いともいえないでしょう。
私も平日の時間的余裕がないときは短くなりがちですが、その方が良いと思っているわけではありません。
質問や指摘が短かい場合もありますが、わからなくて短いのか、よくわかっているために短いのか、そのあたりを短い文章(使っている用語)から見極めて答えるのも楽しみのひとつです。ついでに言えば、ソースを見直すのも楽しみのうちです。
toshi さん、
まだ確認はしていませんが、Windowsでは xxx.cgi と xxx.cgi. は同じファイルとみなすためと思われます。確認の上、次のバージョンで対策をとります。
#最初の指摘で十分わかりましたよ。ご心配なく。
カメヤマ@KTSさん、
以下の4つをお知らせ下さい。
(1)ダウンロードになってしまう(CGIを実行する)ときの URL
(2)httpd.exe があるディレクトリ(フォルダ)
(3)ドキュメントルート
(4)設定しているエイリアス
前田さん、
ファイルのアップロードについては、まず、ファイルアップロードCGIを書くときに知らないとはまること をご覧ください。
ぴゅあさん>
>それは質問なのでしょうか?情報なのでしょうか?
> 質問であるならそれがソースコードファイルの名前としたときのことを言っているのなら正し
>い動作の筈です。URLとして指定したときのことを言っているなら本来404とならなければならな
>いものだと思います。
> もし中田さんが後者のことだろうかと思った場合はソースコードを調べ直すというムダな作業
>に時間を費やしてしまうことになりかねないのでどちらであるのかをちゃんと明記しておくのが
>よいと思います。
すいません。省略しすぎました。今読んでみると自分でも良くわかりません(-_-;)
詳しく説明するとhttp://localhost/hoge/xxx.cgiというCGIファイルがあるとします。
そこでhttp://localhost/hoge/xxx.cgi.とピリオドをつけてアクセスを要求してみると
本来404とならなければいけないのにCGIのスクリプトがそのまんまテキストとして表
示されてしまいます。(ピリオドをつけないとちゃんと実行されます)
環境、Win98+httpd1.19f
これでよろしいでしょうか?
初心者なので質問の仕方が下手です。これからは気をつけます。
はぁ 寝すぎてしまった
昨日は買ったばかりのハードディスクを壊してしまったかと焦りながら修復ぶっ通し30時間
身体がだるい
MS-DOS,Win95/98のfdiskには問題あり?
↑こんな一言付きいかが?(^ー^;)
あんまし固くなりすぎる場所って掲示板に限らず仕事場でも嫌いだし(笑)
>カメヤマ@KTSさん
試したことはありませんがたぶんそのチェックでログが出るんだと思いますよ。
何処で何が行われているのかが調べられるのだと思います。
>miyakeさん
再起動の点では例えばシステムドライブ(WINDOWSフォルダがあるドライブ)がブートドライブ
(DOS/V機ではCドライブ)以外の場所にあるとシステムドライブの方にAUTOEXEC.BATが作ら
れてしまうようです。DOS/V機を対象に考えている筈なのでPC-98xxの場合はCドライブに作ろう
とされるのだろうか?(WINDOWSフォルダのある場所に作ろうとしそうな気がするけど)
さていずれにしてもパスが正しくないようなのでまずは一般プロパティシートのその言われて
いる部分にb:\www\perl\bin\perl.exeと設定してください(プログラム名perl.exeを含めて
指定する)。
取り敢えず上記で動くようになる筈ですが将来に使いこなせるようになるとDOSプロンプト上
で直接動かしてデバッグすることもあるでしょう(どうしてもエラーで動かないときDOSプロンプト
上で動かしてみるのもひとつの手。そこで何行目辺りでエラーが出ているのかが推測できる
(場合がある))。
その場合にはいちいちb:\www\perl\bin\perlと打ち込むのは面倒なのでちゃんとパスを通し
ておくのが良いでしょう。必要になったときでも良いですが動かないで悩んでいる今やっておく
のが一番だと思います。
※AN HTTP Serverを使っているときはperlソースコードの1行目に#!b:\www\perl\bin\perl
と書いておく手もあるが環境が変わると直さなければならない。
perlプログラムが増えてくると全部直さないといけないので大変。
またDOSプロンプト上では適当なシェルをインストールしないと1行目の指定は有効にならな
いのでb:\www\perl\bin\perl xxx.cgiのようにいちいち書かないといけない。
まずブートドライブが何処であるのか確認してください。PC-98xxではAドライブが一般的
(NXではないのだろう推測していますが)ですが他のドライブからでも起動できるようなので。
そのドライブをエクスプローラなどで見てAUTOEXEC.BATというファイルを探してください。
このとき(フォルダ)オプションの表示プロパティシートで「すべてのファイルを表示する」
を選択しておかないと見えないかもしれません。
またWebスタイルを選択できない(していない場合は)拡張子を表示するように設定しないと
どのファイルであるか見つけられないと思います。上記と同じ場所にある筈です。
AUTOEXEC.BATをメモ帳で開いて(ワードパッドやWord(Office),一太郎などでは開かない
こと)一番最後の行にPATH %PATH%;b:\www\perl\binという1行を追加してください。これで
次回の起動時からDOSプロンプトでperl xxx.cgiなどとするだけで良いようになります。
試しにDOSプロンプトを立ち上げてperl -versionと打ちこんでちゃんとバージョン情報が表
示されれば正しく設定できています。またこれができていればAN HTTP Serverでもデフォルト
のまま(即ちperlのまま)で動く筈です。
長い?長いでしょうねぇ。余計なことまで書いてあるから。
ただ問題を解決するだけなら(答えがはっきりしているなら)それを一言で答えれば良いので
すけど悩んでいるときそれが新たな知識を得られるときと思うからです(ただゲームの解法など
のようにその場だけなんとかなれば良いものではそれで良いのでしょうけど)。
学ぶつもりで聞きに来ているなら付随する知識も得られることは良いことだとも思うし普通は
なかなか聞けないことだと思います。答えている方も新たな知識を得たり間違いに気が付いたり
できる機会でもあったりするのですけど。
ただ長くなってしまう嫌いがあります。ただ一言で答えるのとどっちが良いんでしょうね。
>中田さま
:オプション/一般の 「CGI出力を検査」にチェックをいれてから、
:もう一度やってみてください。
はい。チェック後再起動しましたが、同じようにダウンロードが開始しました。
>ぴゅあさま
レスいただきありがとうこざいました。
ご返答ありがとうございます。
ぴゅあさん >Perlをインストールしたときリブート(Windowsを再起動する)するようにと
メッセージが表 示されていると思いますが再起動しましたでしょうか?
はい、再起動しました。
>或いはPC-98xxのようですのでAUTOEXEC.BATの環境変数PATHにperlへのパス
の追加が正常に 行われていないとも思えます(Perlが開発されている環境に
PC-98xxが置いてある可能性は無に 等しい(と考えるのが普通だと思う))。
取り敢えずはAN HTTP Serverの一般プロパティシートのPerlのパスの記述の
部分をフルパス で指定してください。
AN HTTP Serverの一般プロパティシートのPerlのパスの記述の部分という
のは[オプション]→[一般]ダイアログボックスの
.pl,.cgiの実行プログラム:
のところですか?
フルパスで指定するというのは
b:\www\perl\bin
でいいのですか?
(私はPerl for Win32をb:\www\perlにインストールしました。)
>これで取り敢えずは動くようになるでしょう。できればAUTOEXEC.BATを
手で直しておくことをお勧めしますが。
何分ど素人なもので、どう手で直したらよいのかわかりません。
できればもう少し詳しく教えてください。
よろしくお願いします。
>前田さん
今はちょっと全マシンの再編成ちうなのでファイルもマトモにみれないのである程度記憶を頼
りに。
まずentype属性に付いては使ったことがないのでちょっと調べないと解りませんがもしかする
と共通ライブラリ?cgi-lib.pl辺りに汎用の関数とかあるのでは?ダウンロードだけかな?(ま
だ試したことがないのでいずれも存在はあやふや)
INPUTタグのtype属性は「属性として」"file"(だった筈)を指定します。ファイル名ではあ
りません(enctype属性により変わるのかも知れないけど)。type属性を"file"とすることによ
りアプリでよく見かけるファイルの選択ダイアログが表示されてそこからファイルが選択できる
ようになるというものです。既存ファイルの選択という用途向けなのかな?この指定はただ単に
ファイルの選択が楽になるというだけで普通のテキストボックスと基本的には変わりません。
別にファイルを書き出すだけなら普通にやっている掲示板やチャットなどと処理は変わらない
でしょう。どういうことをやろうとしているのかは判りませんが。
どういうことをやろうとしているのかがはっきりしないのでなんとも言えませんが普通は固定
のファイルに対して出力しているのに対してファイル名をフォーム上から指定できるようにする
だけでは?
なおこの処理はプロバイダのサーバでは(以後の管理が)できない場合があります。例え
ディスクスペースを所有している本人であってもブラウザからアクセスすると他人の所有になって
しまうからです。従ってこれを禁止しているプロバイダもあります(サーバ管理者(プロバイダ
のこと)の手を借りなくても対処する方法もあったりする?)。
また当然ローカルでの利用に制限するべきでインタネ上でやるのは非常に危険である場合があ
ります。
後は誰かご存知の方にお願いということで。
ちょっと何時頃通常の環境に戻し終わらせられるか判らないので調べることが....
ファイルをアップロードしたい。
マニュアルには
<form enctype="multipart/form-data"
action="cgiのurl" method="post"
<input type="ファイル名"
と書いてあります。
formで入力したデータをファイル名を指定してhttpdのディスク上に書込む方法について
質問します。 宜しくお願いします。
どうもここも最近23時過ぎ辺りは重い?
>Sakuraさん
なるほどPerl v4だった訳ですね。
v4は動かしたことがありませんけどv5で拡張された部分もあるのでたぶんjcode.plの最近の
バージョン?(v2.8を使っているようですが)だとlocalをmyとしたりとか書き換えているので
しょう(例:myはv4にはない。v5ではlocalではなくmyを使うことを推奨している)。
そういう意味でも共通ライブラリ?(jcode.plなど)はプロバイダで用意しているものを確認
して(場所と名前)使うのがトラブルが少ないのかもしれません。
ただ自分で書いたコードがPerlのバージョンと合っていないと同じことですけど(^ー^;)。
>misaさん
プログラムが少し理解できてきたらその動かなかったというCGIのソースコードを見直してみる
のも良いでしょう。他で用が足りたらもう使うこともないものなのかも知れませんけど。
が、より理解を深めるのには役に立つものと思います。また人それぞれの手法を持っているの
で(良いも悪いも)今後何かのときに役立つものがきっと得られることでしょう。
>toshiさん
それは質問なのでしょうか?情報なのでしょうか?
質問であるならそれがソースコードファイルの名前としたときのことを言っているのなら正し
い動作の筈です。URLとして指定したときのことを言っているなら本来404とならなければならな
いものだと思います。
もし中田さんが後者のことだろうかと思った場合はソースコードを調べ直すというムダな作業
に時間を費やしてしまうことになりかねないのでどちらであるのかをちゃんと明記しておくのが
よいと思います。
CGIファイルの後ろにピリオド"."をつけるとCGIふぁいるがテキストとして表示されます。
何時もありがとうございます。
ぴゅあさん、中田さんのお話通り試してみたのですが・・
やはりエラーでした。
こちらに書きこみする前に会社に(シェアウェアのCGIを使ってます)
問い合わせてみた結果が返ってきました。
Perlのバージョンが古いと(5以降だと)エラーが出る、との事でした。
早速プロバイダにも問い合わせますと、!/usr/local/bin/perlのままでUpすると
4を使ってしまうそうです。
そこで !/usr/local/bin/perl5 と、5を書き加えると正常に動作したのです。
何度も何度もお伺いしてしまって申し訳ありません。このような問題であったと
早くにわかっていればお手数をかけずに済んだものを・・。
でも、今後エラーが出た時の対策とさせて頂きます。
(そしてテストにはANHTTPを使わせて頂きます)
本当にありがとうございました。
>中田さん
そうですね。入っているのを忘れていました。
でもそれが効かないような記憶も?
もうちょっと環境が落ち着いたら確認してみます。
>Sakuraさん
先の部分の究明はともかく"./"を付けてみるかperl/libの中に入れるかの方法でやってみて
ください。
もしかするとPerl for Winはマルチピリオドに対応していない?
内部でそうなってしまっているプログラム言語のソースコードも見たことがあったと思うので
考えられることでもあります。
何度も掲示板で質問していたmisaです
丁寧なご返答どうもありがとうございました
CGIのファイルを変えたら動くようになりました
どうやら読み込んでいたファイルに問題があったのかも知れません
本当にどうもありがとうございましたm(_ _)m
ぴゅあさん、
普通、@INC の最後に '.'があるので、カレントも見つけるのではないでしょうか?
>Sakuraさん
jcode2.8.plはそれをrequireしているソースコードファイルと同じディレクトリ(Winでは
フォルダと呼んでいるもの)にあるのでしょうか。
そうであればrequire './jcode2.8.pl';と"./"を頭につけてください。たぶんrequire 'jcode2.8.pl';
となっているのでしょう。
"./"を付けない場合はエラーメッセージにある通り@INCに設定されているパスリストを元に
対象ファイル"jcode2.8.pl"が検索されます。これはシステム(と呼んでいいのか)が設定する
MS-DOS時代でいう(の方が定義としてハッキリしている?)環境PATHと同じものです。
@ENVなどは今後CGIを扱うときにでてくることもあると思うので@INCの内容をprintしてみる
のもいいでしょう(表示されたものに使い道があるかどうかはわかりませんが)。
"./"を頭につけるとカレントディレクトリ("."がその意味)即ちrequireしているソースコード
ファイルの置いてあるディレクトリが基準になるのでそれと同じディレクトリにある"jcode2.8.pl"
を探しにいきます。
これでたぶんエラーはなくなるでしょう。
この長ったらしい説明の部分はopen()関数のパスなど今後よく出てくると思うので理解して参
考にしてみてください。
なお通常は(プロバイダの)サーバ内に"jcode.pl"を持っているものであると思うのでそれ
を使うようにrequire 'jcode.pl';とするようにすると考えるのがよいと思います(サーバの
Perlコマンドに最適なjcode.plとして用意されたものを使う(ディスクスペースの無駄な使用
を防ぐという意味も....)というのが普通に考えても常識?だと思うのでサーバに持って
いるもの即ち@INCから探されるものを使うようにするのがいいでしょう)。
これをWin上のPerl上でシミュレートする方法もあります。
Perlのインストールされたフォルダ(通常C:\Perlなど)の直下にlibフォルダがあると思い
ます。この中に適当なフォルダi386-win32などを作ってjcode.pl(一般的な使い方ができるよ
うにjcode2.8.plはjcode.plに名前を変えて使うのがいいでしょう)を入れておきます。
これでrequire 'jcode.pl';と書いたものがこのフォルダから探し出されるようになります
(即ちそれぞれのCGIのコードに対してjcode.plをカレントディレクトリに用意する必要がない
。それよりもあちこちにコピーしたときもしjcode.plのバージョンの違うものが混在していた
場合のトラブル(もしかすると同じソースコードがあるバージョンのjcode.plでは動かなくて
原因不明のエラーで悩むことがあるかもしれない)も防ぐことができます。またこの方法が(開
発)環境構築の基礎であるとも思います)。
>urakenさん
この部分はいずれちゃんと解説を書きたいと考えていたのですが。
長くなるので電子掲示板(良い名前募集中(笑))を使いたいところですが(オリジナルの掲示
板でないので使い辛い?のが難点)、とりあえずここに書いておきましょう。
以下はσ(^ー^)の通常使っているコードです。
POSTメソッドに限定しているのでGETメソッドの場合は一般配布されているソースコードに同
じような部分が必ずあると思うので参考にしてみてください(すぐソースコードを探し出せれば
補足できるのだが。めんどい(^ー^;))。先頭の'read(STDIN,...'に当たる部分でPOSTかGETか
を判断して環境変数から$bufに取り込むように書かれている筈です。
read(STDIN,$buf,$ENV{'CONTENT_LENGTH'}); # <=== $bufにPOSTで送られてきたデータを格納
# name/value 分割
@pairs = split(/&/,$buf); # <=== データ単位に分割して取り出す
foreach $pair (@pairs)
{
$pair =~ s/\+/ /g; # <=== '+'を半角スペースに戻す
($name,$val) = split(/=/,$pair,2); # <=== 'name=value'をばらす
$name =~ s/%(..)/pack("c",hex($1))/eg; # <=== HEX文字で書かれている漢字などそのまま渡せない文字をちゃんとした文字に戻す
$val =~ s/%(..)/pack("c",hex($1))/eg;
&jcode'convert(*val,'sjis'); # <=== $valはこの後使うデータ部分なので感じコードを統一しておく(ここではシフトJISを採用している)
# 作用させるものとして「\」が含まれていなければEUCでなくても問題はないものと判断
$item{$name} = $val; # <=== nameで検索できるようにvalueを連想配列に格納して使う
}
・補足説明:jcode'convert()関数を使っている部分
いままでシフトJISで問題が発生したことはない。
文字'\'に対して(つまり('\'が文字として含まれうる)漢字に対してとか)何かの処理(検
索,変換など)を行う場合はEUCにしないとそれらの処理が誤動作する筈である。
通常はソースコードのコード系に合わしておくと良いだろう。
判断できないならEUCに統一しておくと良い。ただしこの場合はブラウザに見せるときに
ソースコードで使っている(EUCで書いていないとき)のと同じコード系に再変換しておく必要があ
る。
※このコードを動かすためにはjcode.plが必要です。
>miyakeさん
Perlをインストールしたときリブート(Windowsを再起動する)するようにとメッセージが表
示されていると思いますが再起動しましたでしょうか?
或いはPC-98xxのようですのでAUTOEXEC.BATの環境変数PATHにperlへのパスの追加が正常に
行われていないとも思えます(Perlが開発されている環境にPC-98xxが置いてある可能性は無に
等しい(と考えるのが普通だと思う))。
取り敢えずはAN HTTP Serverの一般プロパティシートのPerlのパスの記述の部分をフルパス
で指定してください。これで取り敢えずは動くようになるでしょう。できればAUTOEXEC.BATを
手で直しておくことをお勧めしますが。
こんにちは、はじめまして。
初めてCGIを扱います。
ローカルサーバでCGIをテストするため、
「CGIでつくるインタラクティブWebページ」(Terra著)
付属のCD-ROMからPerl for Win32(Pw32i316.exe.)と
AN HTTPD(httpd 118.exe.)をインストールし、同CD-ROM中の
CGIスクリプト、データファイル、jcode.plをコピーして
B:\www\aiai\public_html\cgi-binに一緒に保存して
http://127.0.0.1/~aiai/cgi-bin/netebook.cgi
にアクセスしたところ
Error 500
CGIエラー 以下のコマンドラインを実行できません。
”perl b:\www\aiai\public_html\cgi-bin\notebook.cgi"
というメッセージがでます。
パソコンについての知識が乏しいので、自分でどこをどう
手直ししたら良いのか全然わからず、行く手八方塞の状態で
悩んでいます。
このような説明で、何か助言いただけることがありましたら
教えてください。
よろしくお願いします。
ぴゅあさん、中田さん、ありがとうございました。
今Telnetで実行したのですが
Can't locate jcode2.8.pl in @ INC at clip4.cgi line 12.
という結果が出ました。
確かにclip4.cgiの12行目にはrequire 'jcode2.8.pl';という記述があり、
ぴゅあさんの御指摘通りでした。
同じディレクトリにjcode2.8.plは入っているのですが何が問題なのでしょう・・・?
またまたお世話になります・・・
えーっと・・・今度はCGIスクリプトなんですが
投稿フォームから入力されたデータは、呼び出されるCGIで
どのように記述したら受け取れるんですか?
自分でスクリプトを書き始めたんですが・・・(泣)
みなさんが提供してくださるスクリプトを見てもイマイチ分かりません。
つらい・・・むつかしい・・・(号泣)
助けてください。m(_ _)m
うう やっとカキコ成功(T_T)
>misaさん
カウンタが進んでいるということはカウンタのCGIは動いているということですね?
「ページが....」ということからIE4/5辺りなのだと思いますが「何処も触っていない」,
「カウンタは進んでいる」という点からん〜〜〜という感じです。
そのエラーが出るのはSUBMITボタンを押したときですよね?
そのように置いてある(置いてある場所と仮想パス/cgi-bin)ならACTION属性は"/cgi-bin/xxx.cgi"
のように書いてあるでしょうか。
もし"http://どっかのプロバイダ/~xxx/..."のように書いてある(&ダイヤルアップしてい
ないまたはそのドメインが実在しない)ならそのようなエラーが通知されそうです。以前は404
(見つからない)ということだったのでそのときはダイヤルアップしていたのではと思われます。
試しにダイヤルアップしたまま確認してみて再び404が通知されるならACTION属性のURLの書き
方に問題があると思われます。
>カメヤマ@KTSさん
NT3.51ですか。持ってはいるものの外からちらっと見たことしかないので詳しくは判りません
が....
その前にNT3.51で同さ保証してましたっけ?プログラム的にはちょこっと手を加えてあれば特
殊なこと(未サポートなこと)をしていなければ動くのだと思いますが。
元の場所にコピーして駄目だったなら(或いは元の場所が使えないなら)Perlは再インストール
で新しい場所で設定をしてくれるのだと思います。
AN HTTP Serverはコマンドラインオプションでdefault以外の名前を付けて起動するか
レジストリを削除した上で(NT3.51にはレジストリがありましたよね?確か見掛けた記憶があるの
ですが。ないとたぶんAN HTTP Serverも正しく動作しないのだと思うし)立ち上げなおしてみ
てください。
それ以上のことは使ったことがないので詳しくは判りませんが。
こちらで試してみるにもNT4.0 Workstationを入れるつもりの場所がまだ空いたままになって
はいますがちょっと時間が掛かると思うし....
>水谷さん
ディレクトリツリーを書かれるとき半角スペースで位置決めされる方が多いのですがこのよう
な場合は全角スペースを使ってください。HTML構文では連続した半角スペースはただ1個の半角
スペースと見なされますので。ソースコードを吸い上げて編集して確認しましたがめんどい(>_<)。
ACTION属性(他URL)に書くURLはURL的に見たパスになります(AN HTTP ServerのURLに対す
るローカルパスへの変換処理手順は通常のプロバイダにあるサーバと同じ)。
"/home/cgi-bin/keiji.cgi"とされています(これは(ほぼ)ローカルパスの指定をしたこ
とになりちゃんと探してくれないと思う)が仮想パス/homeが設定されているならこれでも動作
するようになるでしょう。また"file://C:/home/cgi-bin/keiji.cgi"(でいいのかな?)は
正しく動作するのかも?
※例えば/homeをC:\homeとしてあれば/homeの部分をC:\homeに置き換えてちゃんと探してくれ
る筈。先日もエイリアスに付いて出てきましたがこのC:\homeをHTTPd用?に/homeという別名
にしておいて/homeが書かれたときにC:\homeから探してくれるようにする機能がエイリアス
です。これにはC:\homeより上(即ちC:ドライブの中全て)を勝手に覗かれないようにするた
めのセキュリティの意味を持ちまたC:\homeをC:\home2などに変えたとしても見る側からは
常に/homeのままで良い(ちょっと意味が違いますがプロバイダを変えたとき移転先のURLの
お知らせをしたりしていますがそのようなことをしなくても以前のURLのままで新しいプロバイダ
にある移転先が見られる(実際にはこれはできないが)という感じのものです)というも
のでサーバ側の都合で実際の見る場所(ローカルパス)が変わっても見る側は何も気にする
ことがないという便利なものです。
実際のUNIX環境では後者のような意味で長いコマンドラインを数文字の入力で済むようにした
りすることなどに利用されています。HTTPdの場合は前者のセキュリティの意味合いの方に重
点を置いているのだと思いますが。
ということでACTION属性は(一例として)"/cgi-bin/keiji.cgi"とするのが正しいというこ
とです("/home/cgi-bin/keiji.cgi"とすることも可能であるはずであるが先の理由から好まし
くない)。また中田さんのおっしゃる通り仮想パス/cgi-binのローカルパスをC:\home\cgi-bin"
とする必要があります。これにより"/cgi-bin"の部分が"C:\home\cgi-bin"に置き換えられて
keiji.cgiを探しに行きます。
重複した回答の上にまたただ長いだけで解りにくい説明ですがそれでは。
水谷さん、
action=で指定するのは URL なので、keiji.cgi が C:\home\cgi-bin にあるのなら、
action="/cgi-bin/keiji.cgi"
としてください。
ただし、エイリアスの指定で /cgi-bin のローカルパスが C:\home\cgi-bin になっているとしてですが。
あと、/~sat のローカルパスは C:\home\sat になっていますか?
URLのパスとハードディスク上のパス(ローカルパス)の対応をつけるのがエイリアスです。2種類のパスの対応づけにご注意ください。
misa さん、
カメヤマさんへのお答えと同じく
オプション/一般の 「CGI出力を検査」にチェックをいれてから、もう一度やってみてください。
それから、CGIを動かそうとしている URL (http:// 以下)を書いてください。
TOKIさん、
servlet は当分の間、対応できないと思います。
カメヤマ@KTSさん、
オプション/一般の 「CGI出力を検査」にチェックをいれてから、もう一度やってみてください。
それでどうなるでしょうか?
えむけいさん、
そうですね。CGIを直すのが正解でしょう。
urakan さん、
ぴゅあさんの言うとおりで、
オプション/一般の「#!の行を調べる」のチェックをはずしてください。
それでまたエラーが出たらその内容を知らせてください。
中田さん、ぴゅあさん有難うございました。
投稿する時に動くURLをいろいろと、いじってみましたがうまく
行きませんでした。さらに詳しく状況を書きますので、よろしくお
願い致します。
使用している参考書と付属スクリプト
「最新HTML&CGI入門」エーアイ出版発行(笹木望、藤崎真美共著)
AN HTTPDをインストールしているフォルダ
C:\home --- cgi掲示板の呼び出しURL(正常に表示されます)
cgi-bin ----------- keiji.cgi
httpd-docs keiji2.cgi
imagemap
isapi
maps
perl
sat ---------------- public_html ---- keijiban.html
Scripts data.html
ssi
ぴゅあさん、早速のご回答ありがとうございます。基本的な概念として、
ぴゅあさんのおっしゃる「アンインストール後に再インストール」ということは
理解しています。
さてサーバのことですが、NT3.51で運用しています。詳しく書いた方が
良かったですね。それとPerl実行プログラムへのパスの設定をいぢっていると、
ダウンロードになったり「サーバが見つからないか、または DNS エラーです」
と表示されたりします(悩)
何度も申し訳ありませんm(._.)m
今日は違うエラーが出ています、どこも触っていないのに・・・
ページが表示できません−サーバが見つからないかDNSエラーです
やはりこれは、anhttpdの問題ではなくうちのパソコンの問題なのではないでしょうか?
ちなみに、拡張子がCGI以外のもの(htc,gif,jpg)等はちゃんと表示されています
カウンタも更新ボタンでちゃんと進んでいきます
CGIファイルはD:\Misa\home\misa\httd\cgi-binに置いてあります
エイリアスは上から書くと
空欄□
仮想パス/ ローカルパスD:\Misa\home\misa\httd
仮想パス/~misa ローカルパスD:\Misa\home\misa\httd\
実行パス
仮想パス/cgi-bin ローカルパスD:\Misa\home\misa\httd\cgi-bin
仮想パス/scripts ローカルパスD:\Misa\home\misa\httd\scripts
一般パス
仮想パス/perl ローカルパスD:\Misa\home\misa\perl
です
よろしくお願いします
servletへの対応はされるのでしょうか?
>カメヤマ@KTSさん
以前何度か「MIMEタイプの設定を....」というレスを見掛けましたが(注:ただ普通に
「ダウンロードになってしまう」という質問に対して)この場合はそうなのかな?とも思うので
取り敢えず....
まず基本的にアプリのディレクトリを移動してしまうのは御法度です。そのような場合は
アンインストール後再インストールをするというのが正当な手順なのですが....
簡単な確認方法:元に戻すとちゃんと動作するか。
稀にその前後に行った他の作業による場合も考えられますがこれで正常に動作するなら移動が
原因であることは間違いないと思います。
Perlも共に移動した場合レジストリに記録されているので手で直すか再インストールする必
要があるのではないかと思います。
未確認かつPerl for Win32の場合ですがレジストリに記録されているパスを直すだけなのだ
と思います(他にシステム環境変数。ただしWin95/98の場合にレジストリとAUTOEXEC.BATの修
正が必要であろうということでNTの場合はシステム環境変数だけで良いのかもしれない。また
これはAN HTTP ServerのPerlのパスの設定の仕方にも寄るかもしれない)。
簡単にはたぶんPerlを再度インストールするだけで良いのではないかと思います。
また前述の通りAN HTTP Serverに直接Perlのパスを書いている場合はそれを修正する必要が
あります。これだけでも良さそうな気がしますがAN HTTP Serverでフルパスで指定していない
場合、特にISAPIを使っている場合はシステム環境変数或いはレジストリに記録されている内容
(めんどくさいのでNT側は確認していない(^ー^;)。見るだけだけど)が影響すると思います。
AN HTTP Serverもレジストリを使っています。これはプロパティシートの関連するパスを全
て修正すれば必要な個所をレジストリに反映してくれるのだと思います。がAN HTTP Serverの
レジストリの量は(ちょっと)膨大な量なので(細かく見るのが面倒なだけ(^ー^;))プロパティ
シートで設定できる項目の範囲を超えて関わる部分があるのかは確認していません。これ以外
に影響する部分があるとすればレジストリを削除した上でAN HTTP Serverを立ち上げなおして
設定しなおせばちゃんと動作するようになるのでしょう。
ということで、以前何度か「ダウンロードになってしまう」ということに対して「MIMEタイプ
の設定を....」或いは他の設定だったか?という対処方法ではないと思われたので答えて
みましたが。
カメヤマ@KTSと言います。
1.19fをLANサーバ(NT)上で利用しています。
先日httpdのディレクトリをディレクトリごと移動したところ、
CGIの実行ができなくなってしまいました。
Perl.exeのパスの設定がまずいのかとも思いましたが、
CGIを実行すると、該当のスクリプトをダウンロードするかどうかの
ダイアログが表示されてしまいます。
どのように対処したらよろしいでしょうか?
よろしくご教授ください。
>1.14あたりから以降は、Location の前に空白があるとそれを Location とは認識しないようになっています。これは直した方がいいですね。
これはCGIスクリプトを直したほうがいいという意味でしょうか?
HTTPヘッダのフィールド名は空白を含んではいけないというか、そもそも空白で始まる行は継続行として解釈しなくてはならなかったと思います。RFC2616とか読み切っていないのでちょっと自信がありませんが…。
>misaさん
動かないということは絶対にないと思うのでがんばってみてください。
どこのフォルダにCGIを置いてどのようにURLを指定したのか、もしAN HTTP Serverの設定に
触ったならどのようになっているか(エイリアスプロパティシートの内容)を書いてもらえれば
何処に問題があるのかを言えるのではないかと思います。
>Sakuraさん
問題点は中田さんの指摘している部分くらいだと思います。
URLの間違いは404となって出てくると思うので500とは違いますので404が出たらURLを疑って
ください。
404 - ファイルが見つからない
500 - CGIにエラーがあって実行できない
何処にエラーがあるかは例えば
sub print_debug()
{
print "Content-type: text/html\n\n";
print "<HTML><HEAD></HEAD>";
print "<BODY>動いたっ!!</BODY>";
print "</HTML>";
exit(0);
}
とか関数を作っておいて徐々に進めていくと何処で止まっているかが判るでしょう。
注:本来のコード中で'Content-type'を出力し始めた後は適当に調整すること。
例えば最初の実行文の前に入れ動かないならrequireしているjcode.plなどが見つからないと
いうことになります。
因みにこの調べ方はプロバイダでもAN HTTP Server上でもできる(最も初歩的だけど)デバッグ
方法です。HTTP Server上ではコマンドラインで直接Perlを動かしたときのように何処に
エラーがあるのか見つけにくいので結構役に立つのでは?と思います。
あ、パスとパーミッション?
Perlのパスはプロバイダに確認してみてください。プロバイダのサイトで説明してあるところ
も結構あります。大抵/usr/local/binになっていると思うのでperlソースコードの1行目は
'#!/usr/local/bin/perl'と書くことになります。まれにあるかもしれないこれと違うサーバ
の場合はパスの部分を指示されたものに直してください。
パーミッションはCGIのソースコードは755または705。FTPクライアントによっては'-rwxr-xr-x'
または'-rwx---r-x'と表示されることになります。真中を0に(できるなら)するのは同じ
プロバイダの同じサーバに居る他のユーザが自分のファイルにアクセスできないようにするた
めです。特に'w'には注意する必要があります。FTPなどで入った後書き換えたり削除したりでき
てしまう場合があります。
実は殆どやっている人は居ませんがブラウザから直接呼び出されないソースコードファイルつ
まりrequireされるファイルは744または704(-rwxr--r--)で良いようです。
ログファイルなど書き込みが発生するファイルは766または706(-rwx-rw-rw-)、読み出しの
みのファイル(なさそうで考えれば在り得る)は744または704(-rwx-r--r--)、また少ない例
でしょうけど書き込みのみの場合は722または702(-rwx--w--w-)といった具合になります。
数字とr,w,xの組み合せはr=4,w=2,x=1として足し算で見比べてみてください。
ふぅ 草臥れた
この辺のこともそろそろサイトの方にちゃんと書こうかな
>urakenさん
一般プロパティシートの「#!の行を調べる」にチェックが入っていませんか?
P.S.
やっと何年も待った(T_T)念願の新しいパソを組み立てていてクライアントの総入れ替えに始
まってNT Serverのマシン移行からUNIXサーバの増設とかでかなりバタバタして(遊んでいる
だけだけどぉ(^ー^;))ちょっとインタネから切れてしまうかも?数日だと思うけど....
極力切れない状態を維持しつつと思っていますけど暫くレスできなかったらごめんなさいm(__)m
さっきはIPアドレスの再編成しようと思ってサーバのIPアドレス変えたらメルが使えなくな
って焦ってしまった(~ヘ~;)
でわでわ〜♪
何度もすいません・・・(泣)
ちがうスクリプトで試したんですが
こんなエラーが出るようになりました・・・
Error 500
CGI エラー - 以下のコマンドラインを実行できません : "\usr\local\bin\perl c:\www\uraken\public_html\cgi-bin\wwwbbs.cgi "
自分でイロイロ設定をいじってしまったので(httpdの)
どこをどう触ったかも覚えてません・・・(;´Д`)
超初心者に愛の手を・・・m(_ _)m
misa さん、
「同じエラー」というのは エラー404ですね(?)。
ぴゅあさんの2番目というと、
指定しているURLは
http://127.0.0.1/cgi-bin/xxx.cgi
としてあって、
D:\Misa\home\misa\httd\cgi-bin に xxx.cgi を置いてありますか?
そうだとすると、xxx.cgi のつもりが xxx.cgi.txt などとなっている可能性があると思います。
エクスプローラのオプションで「登録されている拡張子は表示しない」になっていたらそのチェックをはずして xxx.cgi の拡張子が .cgi で終わっているかどうか(xxx.cgi.txtになっていないか)確認してください。
ノートパッドなどで xxx.cgi を新たに作ると xxx.cgi.txt になってしまったりします。
その場合はもちろんファイル名(拡張子)が違うので 404 エラーになります。
urakan さん、
たぶん UNIX のサーバにはある htpasswd などを使うようなスクリプトなのでしょう。
Perlのcryptなどを使って大幅に書き換えないと無理だと思います。
とりあえず他のスクリプトを使うことを考えた方がよいでしょう。
Sakura さん、
プロバイダ等のサーバ上に設置する場合、サーバが UNIX だとすると 500エラーになりやすいのは、
(1)CGIスクリプトの1行目の #! /usr/local/bin/perl の perl へのパスがそのサーバ用になっていない。
(2)CGIスクリプトに(その他ユーザの)実行パーミッションが設定されていない。
(3)データファイルに(その他ユーザの)書き込みパーミッションが設定されていない。
(4)require している jcode.pl や cgi-lib.pl などがない。
などが考えられます。
他の原因や、perl のパスやパーミッションについてはぴゅあさんがさらに詳しく答えてくれると思います。
kasai@OHIO さん、
1.14あたりから以降は、Location の前に空白があるとそれを Location とは認識しないようになっています。これは直した方がいいですね。
なお、Apacheで「"Status・・・"をCGIに残したまま動く方法」というのを教えていただければありがたいです。
コメントどうもありがとうございましたm(._.)m
httpフォルダのcgi-binにファイルを移してやってみましたがやはり同じエラーが出ます
ぴゅあさんの書かれた方法の上から2番目のやり方をやりましたがだめでした
うちのパソコンでは動かないのでしょうか?
(そんなことってあるのかな?)
ちゃんとreadme.htmlからのCGIテストモードは動いたのですが・・・・・
ファイルが何か足りないなんてことはあるのですか?
cgi-binフォルダにはbatファイルが5つ、dllファイルが2つ、exeファイルが4つ、pifファイルが1つあります
どうして、他の人のパソコンではちゃんと動くのにわたしのだけ動かないのかなぁ
SSIで作ったカウンタはanhttpdでちゃんと動作しているのですが・・・
やっぱり設定が違っているのでしょうか?どこかの・・
はじめまして。さっそくDLしてローカル環境でCGIを動かしてみたんですが。
そのCGIスクリプトの中に「暗号処理のできないサーバには設置できません」
と書いてありました。
実行結果は「パスワードファイルに登録できません」と出ました(泣)
何か設定方法があるのでしょうか?
方法が場合は、できるだけ詳しく教えて下さい。
超初心者なもんで・・・(*^^*)
はじめまして。ネット上にCGIを設置するのに利用させて頂いております。
ここで一つわからないことがあったので、質問させて下さい。
AN HTTPでは正常に作動するのに、ネット上にアップロードすると
500のエラーが出てしまいます。
アップロード用をコピーして、AN HTTPで動かしてみたので、
アドレス等の間違い等はないとは思うのですが・・・・
Telnetも再度設定しましたが、どうも駄目でした。
抽象的ではありますが、問題点はありますでしょうか?
また、具体的に質問させていただくとしたら、どんな項目が必要でしょうか?
宜しくお願い致します。
文字化けの訂正版("追加"の一行目)
下記の対策CGIをプロバイダ(FreeBSD + Apache)にアップしたところ、任意の位置へジャンプ(<a name タグ)しなくなりました。
試行錯誤した結果、"Status・・・"をCGIに残したまま動く方法が見つかりました。
追加
下記の対策CGIをプロバイダ(FreeBSD + Apache)にアップしたところ、任意の位置へジャンプ(<a name タグ)しなくなりました。
試行錯誤した結果、"Status・・・"をCGIに残したまま動く方法が見つかりました。
原因はやはり私のCGI の中にあり、"Location "の前に半角スペースがいくつか入っていたのが悪かったようです。
指示通り一時違わず
print "Status: 302 Moved Temporarily\n";
print "Location: xxx.html\n\n";
と記述することで解決しました。
でも何故Version 1.13までは動いていたのでしょうか?
中田さん
print "Status: 302 Moved Temporarily\n"; を外すことで、動くようになりました。 ありがとうございました。
因みに今までは「インターネットサイトhttp://***.***.***.***を開けません。 ヘッダが見つかりません。」とのメッセージが出ていました。---WIN95+IE4
NT4.0+NC4.6では「Content-Length: 47 Last-Modified: Wed, 25 Aug 1999 09:46:44 GMT Location: /~kasai」と出ています。
試みたVersionは1.14以降のほぼ全てのVersionです。(1.18は確認していません)
この情報が今後の役に立てば幸いです。
再度、ありがとうございました。
>misaさん
ドキュメントルートをD:\Misa\home\misa\httdからD:\Misa\home\misa\public_htmlに変更
して/cgi-binと/scriptsのローカルパスはデフォルトのままなのですね。
http://127.0.0.1/...としたときドキュメントルートが基準になる(これより上は見えない
ように保護されている)ためD:\Misa\home\misa\public_html\cgi-binを見に行く指定方法は
(このままでは)ありません。
以下のいずれかの方法を採ることになります。
http://127.0.0.1/xxx.cgiのように指定するつもりならD:\Misa\home\misa\public_html
(ドキュメントルート)にCGIを入れる。
http://127.0.0.1/cgi-bin/xxx.cgiのように指定するつもりならD:\Misa\home\misa\httd\cgi-bin
(/cgi-binのローカルパス)に入れる。
http://127.0.0.1/~misa/xxx.cgiのように指定するつもりならD:\Misa\home\misa\public_html\public_html
(/~misaのパス)に入れる。
cgi-binに分けたいのならD:\Misa\home\misa\public_html\public_html\cgi-binに移動さ
せてhttp://127.0.0.1/~misa/cgi-bin/xxx.cgiのように指定する。
D:\Misa\home\misa\public_html\cgi-binのままで使いたいなら例えばエイリアスとして
/cgi-bin2でも作ってこのパスをローカルパスとして設定しhttp://127.0.0.1/cgi-bin2/xxx.cgi
と指定する。
などの方法を採ることになる筈です。
>misaさん
エイリアス(alias)
辞書で引くと「別名」ですがパソコン上のフォルダの位置(ディレクトリパス)をURL(サイト
の場所)に呼び変える設定になります。
中田さんが仮想パスと言っているものがURLの一部,ローカルパスがパソコン上のパスという
ことになります。
指定しているURLがどうなっているかとそれに対応したエイリアスの設定がどうなっているの
か(指定されたURLを元にエイリアスの設定を参照してパソコン上のフォルダを探しに行く)を
確認しているわけです。
404が出ているということなのでURLでの指定した場所(フォルダ)にCGIのソースコードファイル
が入っていません。
エイリアスの設定はオプションメニューの一般のエイリアスプロパティシートに書かれていま
す。
例えばドキュメントルート(同一般プロパティシート内)がC:\WWWになっていて(デフォルト
ではAN HTTP Serverのインストール先)、エイリアスの/cgi-bin(仮想パス)のローカルパス
がC:\WWW\cgi-binになっているならhttp://127.0.0.1/cgi-bin/xxx.cgiのように呼び出した
場合C:\WWW\cgi-binフォルダ内のxxx.cgiが呼び出されることになります。即ちC:\WWW\cgi-bin
以外の場所にxxx.cgiがある(同フォルダ内にない)とエラー404(見つからない)が返される
訳です。
すいません、エイリアスわかりました
CGIを指定しているURLは
D:\Misa\home\misa\public_html\cgi-binにCGI(使いたいもの)ファイルを入れています
ANhttpdとPERLはD:\Misa\home\misa\heedpd,D:\Misa\home\misa\perlに入ってます
エイリアスは
上から順番に書けばよいでしょうか?
■(空欄)
仮想パス/ ローカルパスD\Misa\home\misa\public_html
仮想パス/~misa ローカルパスD\Misa\home\misa\public_html\public...
この2個はクリックしても選ぶことが出来ません
実行パス
仮想パス/cgi-bin ローカルパスD:\Misa\home\misa\httd\cgi-bin
仮想パス/scripts ローカルパスD:\Misa\home\misa\httpd\scripts
です、これでわかりますか?
すいません、ど素人なもので・・・
エイリアスってなんですか(・・?)
教えて下さいm(._.)m
>水谷さん(中田さんに補足)
もしかしてそのHTMLというのはAN HTTP Serverを通さないで直接ブラウザで見てしまってい
るのでは?
....という気がちとしましたので
水谷さん、
投稿する時に動くCGIのURLがおかしいのかもしれません。
掲示板のスクリプトはどこの何でしょうか?
また、御自分で設定された内容がどういうものかお知らせ下さい。
あるいはまったくの自作スクリプトであれば、スクリプトを(メールででも)送ってください。
misa さん、
エイリアス(仮想パスとローカルパスの対応)がどこか違っていて、実際に指定されたファイルがない、という症状なのだろうと思います。
CGIをやるときに指定している URL と、設定しているエイリアスを(すべて)お知らせ下さい。
kasai@OHIO さん、
確認してみましたが、Perlスクリプトで
print "Status: 302 Moved Temporarily\n";
print "Location: xxx.html\n\n";
は、1.19f で正常に動作しました。(もちろん、1.13でも)
「使えません」というのはどういうエラーになるのでしょうか?
また、1.14以降のバージョンいくつでしょうか?
Status: の行は一般的には不要ですが、これをなくしても同じでしょうか?
AN HTTPD のStatus:ヘッダの扱いがおかしいのかもしれないので調べてみますが。
はじめまして水谷と申します。
私もCGIを勉強しようと思いまして、テスト用サーバとしてAN HTTPD119を
ダウンロードさせていただきました、有難うございました。ところがインストールして作動させて
見ますと掲示板のHTMLは表示されますが入力窓に文字を入力して送信ボタンを押しますと
1〜2分後「データ受信中にネットワークエラーが発生しました。(ネットワークエラー :
接続がピアーによってリセットされました。)もう一度接続してください。」と言うエラーが
でて先に進みません。どうしたら直るのでしょうか、お教え下さい。
私のパソコンの環境 : 通常はinternetExplorer5を使っていますが、
NetscapeCommunicator4.6が良いと聞きまし
たので買ってきてAN HTTPD用として使いました。
パソコン機種 : DOS/V機です。
よろしくお願い致します。 水谷
はじめまして、CGIを勉強してみようかなっと思い
PERLとANhttpdをインストールしました
CGIに関してはまったく何もわからない初心者ですm(._.)m
インストールをしてSSIを使ったカウンタまでは大丈夫だったのですが
CGIをやろうとするとCGIのファイルをまったく受け付けません
Error 404がでてファイルがありませんというメッセージがでます
ネスケでも試してみましたがやはり同じ番号のエラーが出て
CGIスクリプトまたはプログラムがありません というメッセージが出てきます
プロセスログで調べてもスペースなどはファイル名に入っていないのですが・・・
プログラムをさわるまえから、門前払いをくらってしまって悲しいです(;。;)
いったい何がいけないのでしょうか?
こんにちは。
いつも便利に使わせていただいています。
大分前から気になっていた不具合があるのですが一向に解決しないので、ご存知でしたら教えて下さい。
Version 1.14 以降ではCGI の中で
Status: 302 Moved Temporarily
Location: xxx.html
が使えません。
Version 1.13 にアプリケーションを取り替えると問題なく動きます。
OS はWIN95 で、PerlIS.dllは使っていません。
よろしくお願いします。
はぅ
間違って投稿されてしまった....(T_T)
>中田さん
やっと念願のプロバイダ移転の作業を今夜辺りやろうと思います。
メインサイトは9月いっぱいで閉鎖となる予定です。
落ち着いた時点でまたご連絡します。
果たしてちゃんとリニューアルできるのか??
一から書きなおしていくつもりだけど....
ただトップの形はたぶん同じ
あれがあのサイトの味?
またまたゴタゴタしていて暫くインタネに居ませんでした....
例によって?いくつか
>竜さん
その後ご連絡がないようですがうまくいっていますか?
>TANさん
クライアント側でサーバにダイヤルアップさせてインタネにつなげたいだけなら....
その手のソフトがフリーでも出ているので試してみてください。
そうでなくてAN HTTP Serverから何かしたいのであれば....
詳細が解らないので何とも言えませんが。
>菅野さん
サーバとしているマシンでAN HTTP Serverを立ち上げているということでしょうか?
相手にはインターネット接続しているときのIPアドレスを伝えて接続してもらっている(或い
は自分で動作確認している)のでしょうか。
たぶん(特に制限されていなければ)そのIPアドレスを使うことでアクセス可能となると思い
ます。
ただしプロバイダによってはポートを変えていたりしている場合も有り得るかもしれません(
上りと下り)。プロバイダに確認してみると良いかもしれませんね。
因みにICQなどでもプロバイダに確認することで無事解決したという報告を受けています。
ただし2台目のパソコンでAN HTTP Serverを立ち上げている場合はリレーさせるなどの処置
が必要であると思います。
「モデム接続を使っても駄目....」というところがどのようにしているのかがよく解らな
いのではっきりとはしませんが。
「IPは表示される」という部分は(AN HTTP Serverでのことを言っているのなら)プライベート
アドレスである筈なのでその表示は無視してください。
★やっと念願のプロバイダ移転の作業を
bee さん、
そのエラーメッセージはCGIが出しているメッセージです。 AN HTTPD 自体はそのエラーメッセージは出しませんから。
CGIスクリプトで、そのエラーメッセージを出す箇所を調べてみてください。 おそらく必要なデータファイルなどを作っていないのだと思います。
はじめまして。
AN HTTPD,Version1.81をインストールしているのですが、
CGIをブラウザで実行すると"ファイルのオープン、入出力に失敗しました"という
表示が出るのですが、これはサーバの設定等に何か問題があるのですしょうか?
中田さん、解決しました...ありがとうございました。
私の書き方が悪かったようです。
又、何かありましたら来ますね。
それでは、本当にありがとうございました。
中田さん。開発と対応お疲れ様です。
私の運営しているスクリプト配布ページが引越ししたのでお知らせします。
メインページは http://www2u.biglobe.ne.jp/~asuka-s/ へ
スクリプト配布ページは http://www2u.biglobe.ne.jp/~asuka-s/download/ へ移動しました。
お手の空いたときにでも、こちらのトップページからのリンクを変更をお願いします。
中田さん、まっちゅさん!
ご返答どうもありがとうございました!
わかりました、明日、プロバイダに電話して問い合わせしてみます。
モデム回線でもだめでしょうか??
色々ありがとうございました!
また、プロバイダ等の返答により、
カキコにくるかもしれませんが、よろしくお願いします
うずみさん、
そのポート設定の場合、AN HTTPD には 「http://localhost:8080/〜」 とする必要があります。
「http://localhost/〜」 は 「http://localhost:80/〜」 の省略形です。
菅野さん、
まっちゅさんの言う通りとりあえず無理だと思います。
サーバのIPアドレスが xxx.xxx.xxx.xxx であってもLAN内でだけ通用するIPアドレス(つまりプライベートアドレス)であると、外からそのIPアドレスを指定してもサーバには到達しません。
ケーブルネットのルータのところで、(グローバルアドレス)yyy.yyy.yyy.yyy 宛てを xxx.xxx.xxx.xxx 宛てにアドレス変換してくれれば、yyy.yyy.yyy.yyy と指定すればいいわけですが、普通それはやってくれないでしょう。LAN内のIPアドレスを内部専用に割り振っている意味がなくなるからです。
念のため、ケーブルネットの方に聞いてみた方がいいと思います。大勢からサーバを置きたい(使いたい)という声が出ればなんとかしてくれるかも(?)。
こんにちは、いつもanHttpdの方はお世話になっています。
前に、ASPの質問をしたことがあり、anHttpdではASPが使えないと言うことで、無謀にもPWSを入れてぐちゃぐちゃになってます(笑)。
そこで、anHttpdとPWSの共存は出来ないのでしょうか?
HPを置いている親サーバはASPとCGIが使用できるため(NTですが)、私のPCでも両方使えるように頑張っていたのです。ちなみに私のPCはWin98です。
portをPWSは80に、anHttpdは8080にすると、両方動くのですが、anHttpd上のファイルに「http://localhost/〜」からアクセスできません。
本当は、ASP使いたいのだからPWSで統一すればいいのですが、PWSでCGIを動かしたところ、CGI上からdatファイルに入出力のアクセスが出来なかったのです。設定が悪いのかも。
少し、anHttpdと離れた質問になってしまいますが、申し訳ありません <(_ _)>
よろしくご教授お願いします。
ケーブルインターネットだと、ダメだろうなぁ・・・・。
グローバルアドレスじゃないからなぁ・・・。
きっとプライベートアドレスなんだろうなぁ。
つまり無理だよなぁ。
おせわになっております。
友達からの紹介で知りました!
初めて使わせていただいているのですが、
うまく動作はしているのですが、アクセスできません・・
パソコンを、2台もっているので、1台をケーブルインターネット(サーバとして使用)
1台を、モデムでつなぎ、ためしているのですが、どうしても、アクセスできません・・
プロバイダの相性なども関係ありますか?
サーバとして使っている環境は
PC-9821V16S5
OS:Windows98
ケーブルインターネット接続(LAN)
です。
IPは、表示するので動作しているはずです。
なにか、特別な設定が必要ですか?
初心者なので、変な質問すいません・・・
よろしくお願いします
うさこさん、
sleep 秒数 でOKです。
AN HTTPD では、PerlIS(ISAPI)ではデフォルトのタイムアウトは20秒ですが、perl.exe では時間制限はないはずです。
「長い時間」というのはどのくらいですか?また、「タイムアウトが発生」したのはどうしてわかったのでしょうか?
お久しぶりです。
自分でperlプログラムの勉強のため、いろいろなことを試してみたのですが、
どうしても出来ない事がありました。
それは、sleepで長い時間sleepさせてしまうと、タイムアウトが発生して、
その後が続かなくなってしまいました。
何か良い方法はありますか?
自分で色々調べてみたのですが、「sleep 秒数」と書けばいくはずなのですよね?
やはり、時間の制限とかあるのでしょうか?
また、制限はサーバ側で決まっているのですか?
perlについてあまり知らないので、言い方とか変なところが有るかもしれませんが...
どうか、教えてください。よろしくお願いします。
TANさん、
そうですね、AN HTTPD にダイヤルアップを起動させる機能はありません。
AN HTTPD をプロキシとして使うのであれば、IE4の接続を自動ダイヤルアップにしておけばパネルは出るでしょうが、クライアントからボタンは押せませんね。
コマンドラインで自動接続/切断できるユーティリティがあれば、それをCGI/SSIで起動する、という方法はあるとは思いますが。
ありがとうございます。
はじめまして、TANといいます。
早速質問なんですが、
クライアントからサーバのモデムを自動でダイヤルアップさせたいのですが、
どのような設定をすればいいのでしょうか?
現状では、ダイヤルアップのパネルもでない状態です。
ローカルでHPやCGIは正常に動いています。
環境
サーバ側
Windows95B
56Kモデム
AN HTTPD Ver1.19f
wsock32.dll Ver2.2
IE4.0
クライアント側
Windows98
モデムなし
IE5.0
道添さん、
ログ設定を変えた時に HTTPD の処理動作中だとちょっとおかしくなるかもしれません。
また起きるようでしたらお知らせ下さい。
斎藤さん、
どうもありがとうございます。
Tiger さん、
(1)(jg)awk での CGI の情報は私は知りません。多少マニアックな感じになってしまうのではないでしょうか(?)。
せいぜい シェルスクリプトで sed/awk などを併用してというのが自然な気もしますが、それを実現したのが perl ではないかと思います。
とはいえ、私も UNIXでは perl にはなじめませんでしたが。
(2)#!(Shebang)で実行可能スクリプトの実行プログラムを指定するならわしは Windowsにはありませんから、#!の行を読み取り解釈するのは AN HTTPDではオプションです。 (Apache for Win32 では、それがデフォルト動作だったと思いますが)
オプション/一般の「#!の行を調べる」にチェックがある場合、拡張子 .cgi の 先頭行を調べます。
チェックがなければ、「.pl, .cgi の実行プログラム」の指定を優先し #! の指定は無視します。
というふうにしたつもりなのですが、動作が違うようであればお知らせ下さい。
チョイスさん、また何かありましたらどうぞ。
阿修羅さん、
最新バージョンでも同じでしたらお知らせ下さい。
1999/08/16 18:12 に書きこんだ障害(logを開こうとするとフリーズ)は、今日は不思議になんともありません。(PCを再起動したせい??? 昨日は再起動したかどうかの記憶がないので…)
多分、明日以降も大丈夫と思います。
申し訳ありません、お騒がせ致しました。
デバッグの質問をした斎藤です。
コメントありがとうございました。
お礼が遅れてすいません。
開発がんばってください。
中田さんへ、
先ずお礼を! アドバイスのおかげで、Win95+VB4でCGIができるようになり、世界が広がりました。
漢字コードのデコードに少してこずりました。cgi4vbだけではうまくゆかなかったので、2バイト文字のデコード部分を「VBでCGI作ろう」を参考にてなおしすると、OKでした。これから、慣れてるVBでどんどん作れそうです。
慣れてるというと、私はperlよりもjgawkがすきなので、awk-cgiにも挑戦してみました。perlだと1行目に
#! /usr/bin/perl ・・・・(a)
とおまじないを書きますが、これを
#! /・・・・・・・・/jgawk -f ・・・・(b)
とするだけで、jgawkのcgiプログラムが動いたので感動でした。
標準入力も getline < "/dev/stdin/" だけで簡単ですね。
しかし、デコードは自分でやらなければなりませんので、今頭をひねっています。
2ばかり質問ですが、よろしくお願いします。
1 jgawkでのcgiの利用例、特に、デコード方法等参考になる情報がありましたら、御教授ください。
2 上記(b)でパスを正確に記入しないと動かなかったので、生じた疑問です。実は、perl-cgiの時、(a)のとおり記入していますが、perl.exeはこのパスにはありません。それでも正常に動きます。なぜなんでしょう? ただし、autoexec.batでperl.exeにPATHはとおしています。
CGIの確認できるようになりました。
CGIについてはこれからが本番っといった感じなので
またわからない事が出てくると思いますので、
その時はよろしくお願いします。
本当にありがとうございました。
いつもPerlスクリプトのテストに利用させてもらってます。手軽なのがいいですね。v.1.08で時々フリーズする(スクリプトエラーでstdoutに何も出てこない時に、Perlのプロセスを殺せない様で)のがたまに傷でしたが…新しいverを試してみます。
>竜さん
別におかしい部分はありません。
その後の処理に問題があるのでは?
或いはどのような結果(配列変数の中身)を期待しているのでしょうか?
Perlで変数を配列変数に代入しようとしているが、うまくいきません。
誰かこの解決方法を知っていますか?
@sample =("test1","test1","test2");
$ctest = "test0";
$sample[0] = $ctest;
いつも便利に使わせていただきありがとうございます。
ここでちょっと質問です。
2月に使用をはじめ、今の今まで順調に動作していたのですが、ログ設定を変えたとたんにログを開くことができなくなりました。
具体的には、いままでは、errors.logとhttpd.logだけを取っており、支障もなく開くことができました。
しかし,そのほかのlogも取りたいと思い、その設定をしたあと、logを開こうとすると、はじめてログを開くのはOKですが、2度目(別なログでも)開こうとするとANHTTPDがフリーズしてしまいます。(応答なしとなる)
ヘルパーのせい?と思ってヘルパーをOFFにしても同様です。
使用環境は
windows98(fujitsuFMV・win95からのアップグレード)
バージョン:1.19f(Dドライブにインストール)
logの保管場所:./log
私のマシンだけならしょうがないので諦めますが、同じような症状のユーザはいないのでしょうか。
ぴゅあさん、中田さん。
詳しい説明ありがとうございます。
初心者なので、UNIXとWINのperlは同じものと考えていました。
これからは、説明していただいたことを参考に勉強していきたいと思います。
また、勉強していく中でわからないことを質問しますのでよろしくお願いします。
>ちせさん
一応v10.30でざっとだけみておきました。
times()関数は単に検索にかかった時間を計測するために使っているだけのようですので
'(times)[0]'の部分は'time()'に置き換えるだけでできると思われます。ただその表示のため
だけに使われているようなので省略するなら中田さんの言われるように'0'のままでも問題ない
と思います。
ソースコードをそのまま残して使いたい場合....
配列を返す関数というのを書いたことがないのではっきりしたことは言えませんが
sub times
{
return(time());
}
という関数を何処かに書いておけば「このCGIの場合だけには」対応できると思います。
ただし頭の中で考えただけで実際に動かして試したわけではないので'(times)[0]'に対して
ちゃんと動くかどうかは保証できません。色々試行錯誤してみてください。
return文は'return(wantarray?(time()):time());'と書いたほうが良いのかもしれない?
注:正確にはPerlでは関数ではなくサブルーチンと呼ぶらしい。σ(^ー^)は関数と呼ぶことに
しているが(^ー^;)。
なお、ざっと見た限り目に付いたところはなかったので残りの部分は中田さんの指摘された部
分くらいで良いのだと思います。
ちせさん、
プロバイダで動くのに、という場合の多くは、Perlの動作の違いという話です。
Perl は Windows 上で動くものがあるわけですが、本来の(UNIX上の)Perlにある関数の中で Windows ではうまく機能しないものがあります。
これは Windows と UNIX の違いから、なかなか同じようにできないからです。
一方で CGIも rescue さんのところのスクリプトのように UNIX で動かすことしか考えていないものもあります。
このようなスクリプトは WindowsNT で IIS(PWS)を使っても正常には動作しません。
Windows用のPerlでは実装されていない関数を使ったり、UNIXコマンドをそのまま使ったりしているわけです。
また、入出力のテキスト/バイナリモードにも無関心です。(UNIXではバイナリモードだけなので)
おたずねの minibbs10.30 では、
Perl for Win32 (Pw32i3xx.exe) では、times関数は実装されていないので、
$start = (times)[0];
$end = (times)[0];
などのところを
$start = 0;
$end = 0;
などとして、times関数を使わないようにしないとだめでしょう。
"times" というのを検索して修正してください。
経過時間が常に 0 になってしまいますが、まあ実害はないと思います。
ActivePerl (APi5xx.exe) では、timesも使えますので、この修正は不要です。
もう一個所、sub new の
print "Content-type: image/gif\n\n";
の後に
binmode(STDOUT);
を入れておかないと画像が正常に表示されないはずです。
gethostbyaddr は機能するのですが、ネットワークに接続していないと非常に時間がかかります(2分くらい)。
その場合は、
if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }
の行の頭に # を入れて無効にしておくのがよいでしょう。
ぴゅあさん、
一応見てみましたが確かになんだかよくわかりませんね。
>ちせさん
WinベースではUNIX用に書かれたCGIの一部はそのままでは動作しません。
大抵ロック機能の有無が設定できる筈なので無効にしてみてください。
使えないもの
flock()関数,gethostbyname()関数(という名前だったかな?),symlink()関数とか。
not implementedというのは実装されていないから使えないということです。
確かにtimes()関数はPerl4/5に実装。Winでは未実装となっています。
こんばんは、ANHTTPDをダウンロードさせていただきました。
Perlもインストールして動かしています。
CGIは初心者なので、雑誌に掲載されていたhttp://www.rescue.ne.jp/のページから
サンプルCGIを使ってみました。
掲示板のCGIでminibbs.cgiを動かそうと思ったのですが、
Error 500
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:
times not implemented at c:\www\ni\public_html\cgi-bin\bbs\minibbs.cgi line 265, chunk
というエラーメッセージがでてしまいます。
プロバイダ上では、動作したのですがローカルテストでは何度やってもうまくいきません。
同ホームページのCGIでも動作するものとしないものsymbolエラー?と出てしまうもの
がありました。
何か設定がありましたら教えていただけませんか?よろしくお願いします。
使用したものhttp://www.rescue.ne.jp/cgi-rescue/cgi?minibbs1の最新Ver10.30で
管理キー設定画面は動作してその後エラー表示されます。
???
直接biglobeのサーバ上からMIDIを呼び出すということをすると普通に?....
他に原因があるのだろうか?
しかし起こっていたのは必ずMIDIをおいてあるbiglobeのサイト....???
と思ってComposerで吸い上げてみるとパソコン上でも同じ現象。以前はここまでしなかったの
で判りませんでしたが。
MIDIを使っている場合に限ってというのが変ですが(スタイルシートは関係ないはず/やまさ
んのところでは使っていなかったはずだから。またMIDI単体,MIDIを外した状態/存在しない状
態にするだけでも起こらなくなる)何が原因であるのかもう少し調べてみる必要があるようです。
ただMIDIが組み込まれているかどうかが関係している可能性は高いような....
因みにこの現象が起こらないサイトのMIDIファイルに差し替えても起こっているのでMIDIファイル
の形式によるものではないらしい。
そしてやまさんのところではEMBEDタグを外すだけで発生しなくなったのでした....
さらに謎が深まってきてしまいました。
やっぱし放っておこうかな?(^ー^;)
>中田さん
見てみますか?
偶然にも隣町に住む友人
しごく普通のサイト特に何のこともないEMBEDタグですが....何故か?
ここはスタイルシートを使っていますがそれの影響はないはずです。
あれ?IEでのMIDIは??
EMBEDタグをサポートしたのかな?
以前ここにこられていたやまさんはBGSOUNDタグだけにされました。
ぴゅあさん、
さあどうでしょう。。。
biglobe は Netscape Commerce/1.12 で HTTP/1.0 のようですが、問題の MIDIファイルの URL はたとえば何ですか?
MIDIを再生するプログラムによっては応答ヘッダの内容で動きが変わることはありうるとは思いますが。。。
>中田さん
サーバのMIMEタイプといえば以前から気になっているものがあるのですがどう思われます
か?AN HTTP Serverとは全く?関係ないことなんだと思いますが。
あちこちのサイトでMIDIを扱っているのをみかけますがどうもbiglobeのサーバだけおかし
いのではないかという気がしています。
行ったことのあるbiglobe内にあるサイトの全てでMIDIファイルを置いてあるとデスクトップ
上のアイコンを始めすべてのウィンドウ、タスクバー/トレイでリフレッシュ?が発生している
ようでいつもヒヤヒヤしながら見ています。
biglobe側ではブラウザに適当なプラグインがないからだと言っていましたがbiglobe以外で
は発生したことがないし確かそのMIDIファイルを吸い上げてネスケで再生した場合は何ともない
んですよね。
サーバ或いはサーバの設定によってWin(ネスケ)が影響を受けることってあると思われ
ますか?
biglobeを利用している訳でもないし特にこれによって問題が発生しているようでもないので
別に構わないんですけど。
見かけ上同じMIDIファイルのように見えて微妙にどのプラグインを使うかによって違いがで
てくるのだろうか?
どう思われますか?
ちょっと気になっていましたので。
P.S.
MIDIに関して。
MIDIを使われている人も多くいるのでしょう。
色々調べて判明したことですがMIDIファイルのパスが間違っているとIEでは無視されて?再生
されないだけですがネスケだとNETSCAPE.EXEのセキュリティエラーであるといちいちダイアログ
が表示されてしまいます。
結構この手のミスをしているサイトを多く見かけるのですが原因不明で悩んでいる方、確認し
てみてはどうでしょうか。
また今時サウンドボードを実装していないマシンを使っている人は居ないのでしょうがネスケ
ではサウンド再生を無効にすることは出来ないようなのでいちいちデバッグダイアログが出て煩
わしいという場合にはQuickTime辺りのプラグインを使うとこの邪魔なダイアログが出なくなり
ます。ただちょっとプラグインの起動に時間が掛かるのとバージョンアップの宣伝がたまに出て
くるのが邪魔ですが。
ちょっと関係ない話題で失礼しました。
ぴゅあさん、
この場合のMIMEタイプは、ブラウザのではなくてサーバの方です。
>puffさん(中田さんに追記)
普通だとそのまま使えるはずですが。
記述は<SCRIPT language="JavaScript" src="fframe.js">とします。
引用符"で囲まれた部分は大文字小文字が区別されるので正しく書く必要があります。
またこの記述だとパスがカレントを指しているのでfframe.jsは呼び出しているHTML文書と
同じディレクトリ(フォルダ。インターネットとしての言い方ならディレクトリのみ?)に存在
する必要があります。
中田さんのおっしゃっているMIMEタイプについてはネスケの場合特にインストール時に設定
をいぢってなければ何もする必要はないはずです。IEの場合MIMEタイプを追加する部分が見当
たらない(ざっとしかみてない(^_^;))のですが今まで特に設定したことはありませんし設定
が必要となったことは今のところありません(Win95/IE4ではIEの方ではなくエクスプローラな
どのフォルダオプションのファイルタイプで設定するのだと思う)。
また'JavaScript1.1'などはそのバージョンの機能を使わなければならないときに指定しま
す。通常は'JavaScript'だけで良いのでしょう。試したことはありませんがたぶん'JavaScript1.2'
としたときv1.2に対応していないブラウザではJavaScriptが組み込まれていないと同じ動作を
する(<NOSCRIPT>が有効となる)のだと思います。
今時?という気もしますがあり得ないことではなく(古い)ブラウザによってはJaveScript
の(新しい)機能を使えないブラウザも存在します。
動作しないのならどのような現象が起きているのかを詳しく書いていただければ。
puff さん、
訂正です。
ちょっと調べてみたら違いました。SRCはサーバから読み込むわけですね。
ファイルタイプの設定で、
拡張子 js で、MIMEタイプは application/x-javascript にする必要があるようです。
また、LANGUAGEは
<SCRIPT LANGUAGE="javascript1.1" SRC="fframe.js"></SCRIPT>
のように javascript1.1 と指定しなくてはいけない、という記述がありました。
puff さん、
JavaScript は私は使ったことがないのでわかりませんが、ブラウザ側で解釈実行するもののはずですから、MIMEタイプの設定は必要ないと思います。
fframe.js を認識しないとすれば、fframe.js がないか、ファイル名が(拡張子も含めて)違っているか、中身が不適当か、ではないでしょうか。
中田様へ ・・・二度目になりますが宜しくお願いいたします。
<SCRIPT LANGUAGE="JavaScript" SRC="fframe.js"></SCRIPT>
この、fframe.js なんですが・・認識させるには・・
ファイルタイプ設定の場所で・・拡張子・js / MIMEタイプ・text/js
こんな感じでよいのでしょうか・・
どうも、今一つ分かりません・・ご指導ください・・(^^;;
**** puff なんとも・・苦しいです
>ぴゅあさん、中田さん
"ネットワーク接続が存在しないときにはダイヤルする"にチェックを入れたところ、
なにも聞かれず(オフラインがどうのこうの)に動作するようになりました。
LANの設定の方は何もチェックなしです。
"インターネットに接続する時にいちいち..."ということもありません。
どうもありがとうございました。
>竜さん
第3者というのはアクセスしてきている(Cookie保持者)ということですよね?通信ライン内
に割り込んできて改竄するという場合を想定したときは若干変わってきます。
前者を想定すると3つくらい考えられると思います。
ひとつは簡単には変更できないようにCookieデータの意図が解り難いデータとする。
変更されたことが解るようにチェックする機構を導入する(簡単にはチェックサムなど。ただ
し一般的なものでなくオリジナルを考える)。
データ自身を暗号化する。
しかしCookieデータの改竄が影響するようなCookieデータを扱わないようにするのが基本で
あると思います。セキュリティに関して様々な研究がなされていますがそのようなことが影響す
るCGIということになるならセキュリティの一項目として考える必要があるのでしょう(考える
というのはインターネット上でのセキュリティということではなくCGIの設計上のこと)。どう
してもそのようなデータをCookieデータとして扱わなければならないなら更に色々な場合を想定
すね必要が出てくるでしょう。
確か以前Cookieとしてデータを持つのが良いかサーバ側でデータを持つのが良いか相談され
てきたと思います。CGIで扱うデータをどのように割り振るか。これが設計と言うものです。
データの扱い方を十分に検討されてみてはどうでしょうか。
>Yoshiyukiさん(中田さんに対して追記)
確か「ダイヤルしない」という設定方法は以前出てきましたよね。ただこれだとAN HTTP Server
を使うかインターネットに接続するかでいちいち設定を変えなければならないという面倒な作業
があったような。ただAN HTTP Serverのプロクシ機能を使えば対処できるんだろうと思います
がこの機能は特に使っていないので....
”必要なときに....”という設定がうまく機能してくれればと思ったりしますが。
>中田昭雄 さん
レスありがとうございます。
現在/privateのエイリアスを設定して正常に動作しています。
竜さん、
もちろんブラウザ側のクッキーが書き換えられればそれが Cookie: に出てきます。
書き換えられたことがわかったら再度 Set-Cookie: で正しいクッキーをセットすればいいのだと思いますが。。。
。。。という意味ではないのかな??
Yoshiyuki さん、
私のところのIE5の接続のところの設定は、「ダイヤルしない」にしています。
「LANの設定」は、自動設定、プロキシサーバとも全部チェックなし、です。
もっともLANカードがはいっていてIPアドレスが指定してあります。
それが関係するのなら、TCP/IPのプロパティに適当なIPアドレスを指定しておいて接続を装うのでも大丈夫だと思いますが。
表島さん、
そうですね、Windows(DOS)では private と private. は同じとみなしてしまうのでした。
AN HTTPD 側で直します。
当面という意味では、おっしゃるような方法の他には、/private のエイリアスを設定するというのもあると思います。
その場合は /private. は 404(Not Found)エラーになると思います。
Perlで作成したCGIの中でデータを一度クッキーに保存し、HTMLを掃き出します。誰か第3者がクッキーファイルの内容を意図的に書き換えてしまいました。次に起動されるCGIの中でクッキーよりデータを取得しようとした場合、書き換えられたデータが入ってくることってないのかなー?何ページかCGIでHTMLを作成して、戻ったり、進んだりしながらテストしているけどどうなんでしょう?掃き出されたHTMLやパラメータが誰か第3者によって変更されたりする場合って、元に戻す方法ってないでしょう?
>Yoshiyukiさん
そうそう"オフラインで使用しますか"というのだからその先ですね。
暑くて頭が回ってない(*_*) と逃げとく....(~_~;) 室温35度(>_<)
IE5では設定が「ローカルエリアネットワーク(LAN)の設定」プロパティシートに全部移った
形になっています。スタンドアロンだとどう設定すれば良いのかということを正確には言い難い
環境にある(要するにLAN環境に繋がっているマシンしかない)のですが、そこのところはIE4
に設定していたものと同じ設定にすれば問題ない筈です(もしスタンドアロンであるなら参考ま
でにどう設定しているか聞かせてもらえれば)。
で「プロキシサーバを使用する」はチェックして適当なアドレスとポートの設定はしてある
と思います。「ローカルアドレスにはプロキシサーバを使用しない」にはチェックが入ってい
るでしょうか。これで"オフラインで使用しますか"というのは聞いてこなくなるのでは?と思う
のですが。
それで駄目なら色々と設定してみることですが(特にネスケでは/注:LAN環境のとき)「例外」
に例えば192.168.0.1或いは192.168.0.1:8080また同様に127.0.0.1やlocalhostなど呼び出し
に使っているアドレス(と必要ならポート)を指定しないといけない場合もあったようなのでそ
の辺をいぢってみると良いかもしれません。たぶん先のチェックだけで充分なのではないかと思
いますが。
ただこの辺の設定はIE4でも変わらなかったような?
メインマシンはエクスプローラを使おうとしてもハングアップしてしまう状況なので再インスト
をしなければならない状況。再インストの前のバックアップもなかなかできない....
なんとか動いてくれればこの機会にLANから切り離して確認してみます。バックアップが完了
してLANから切り離しても良い状態になってからになるので時間が掛かるかもしれませんが。
そんな状況なので確認できるかどうか判りませんがもし先の設定で駄目だったときもし解決法
が判ったら....ということで....
おっと今はモデムが繋がっていないので設定できないのですがその上の「ダイヤルアップの設
定」で「ネットワーク接続数存在しないときにはダイヤルする」という選択肢もあったように
記憶しています。設定するのは接続プロパティシート内だけの筈なので駄目なら色々試してみてく
ださい。
>ぴゅあさん
レス、ありがとうございます。
インターネットオプションの接続タブは分かるのですが、
具体的にそこのどこを変更すればいいのでしょうか?
お手数お掛けしますが、よろしくお願いします。
はじめまして。
AnHTTPdを使用しているのですが。
ユーザ認証が通常の方法で上手く動きません。
普通に使う分には平気そうに見えるのですが、
フォルダ名に“.”をつけるとパスワード無しでアクセスできてしまいます。
例:/private/ だとアクセスできないが、/private./だと出来る。
現在“.”のあるなしで2つの認証を付けて起動しているのですが。
何かほかに解決法があるのでしょうか?
よろしくお願いします。
>Yoshiyukiさん
IE5ではツールメニューにインターネットオプション
その接続プロパティシートにあると思いますが。。。。
初めまして。
AnHTTPdをインストールさせていただき、動作はしているのですが一つ質問が
あります。質問はこちらでいいのでしょうか?問題があれば削除して下さい。
IE4.01/NN4.04では動作するのですが、IE5だと"オフラインで使用しますか"
のようなコメントが出て動作しません。
FAQのところで解説されているブラウザの設定が違うのだと思うのですが、IE5
のインターネットオプションに"LANを使って....."の設定が見当たりません。
IE5(WIN98)の場合は、どこでこの設定をするのでしょうか?
以上、よろしくお願いします。
ぴゅあさん、さすが色んなことを知っていますね。
ありがとう、助かります。
これからも、よろしくね(^_^)!。
ぴゅあさん、
戻ってくれてよかったです。よろしく。
竜さん、
ぴゅあさんの指摘通り、1回のCGIプロセスの中で Set, Get をしても無効です。
SetCookie は、CGIの応答ヘッダの中で Set-Cookie: . . . . という形で Cookie がブラウザにセットされます。
GetCookie は、ブラウザからのリクエストヘッダ中にある Cookie: . . . . というヘッダの内容が 環境変数 HTTP_COOKIE に入るので、それを取り出しているはずです。
ヘッダのやりとりは AN HTTPD では トレースログを有効にすることで見ることができます。
チョイスさん、
ぴゅあさんの言われるとおりで、.cgi や .pl をダブルクリックや「開く」の「参照」などで開くと、http:// ではなく file:// となり、ソースが表示されます。
その時はブラウザが直接ファイルを開いているわけで、 AN HTTPD にはアクセスしていません。
http://127.0.0.1/. . . という形であれば、サーバ(AN HTTPD)が反応し、サーバがCGIを実行します。
>竜さん
ドラゴンとなっていたので誰かと思いました(^_^;)。
まず処理としてCookieをSet後すぐにGetするのは同一のプロセス(ソースコード)内でデータ
を扱えるので意味のないことになります(直接データを処理すれば良い)。通常Cookieは次
回(別の)呼び出しに対してデータを引き継ぐために用意されています。
Cookieデータがうまく扱えないことに関してサーバ内部のことはまだまだ調べるに至って
いませんが以下のことが挙げられると思います。
・SetCookieはブラウザに対してCookieデータを保存するように指示しているだけである。
SetCookieはブラウザに対してCookieデータを渡しているだけの筈です。各プロセス(Perl
が起動されたとき)で作られる環境変数の更新まではやっていないと思います。従ってすぐにGet
してもCGIを処理し始めたときのCookieデータしか得られないということです。
これは次回にCGIが処理されるときに必要なデータを保存しておくための機能と考えれば環境
変数への更新が必要ないこと,更新されなくても問題ないことが理解できると思います。
・Cookieを取得するか聞いてきたときに既に<HTML>以下の部分がブラウザに表示されているかも知れない。
これは前述と重なる部分もありますがCGIの実行が始まったときブラウザ側から渡されたCookie
データをサーバ側で環境変数として設定します(これをCookieデータとしてGetする)。
Cookieを取得するかどうかを聞いてきているときに既にブラウザにそのCGI内で記述した処理
の結果がブラウザに表示されていたならSetCookieに対する応答を待たずにGetCookieへ進んで
いることが視覚的に理解できるでしょう。ここでユーザがCookieを取得するかどうかをどう答
えるかによってGetCookieのデータは以前のものか今回のものかで変わってきますがこの時点で
はサーバ側ではそれを確認することはなく再度ブラウザからのCookieデータの取得要求は出し
ていないことにもなります。
サーバはブラウザに「Cookieの保存が要求されているよ」というのを送ったらそれに対する
応答を待たずに(当然ブラウザから「指示は受け取ったよ。後の処理は任された」という返事だ
けは受けとってCookieデータを正しくブラウザに渡せたことは確認しているでしょう。その後の
処理はブラウザに任せているはずです)次の処理(この場合だとGetCookie)へ進んでいます。
これからもCGIでは前回のデータしか扱えない(次の起動のときに前のCookieを取得している)
ということが理解できると思います。
長々と判り辛く書いてしまいましたが要は一番最初に書いた内容です。
CGI側では起動(直)後にCookieデータを取得して必要な処理を行う(Get)。CGIの実行終了
前に次回の起動時に必要なデータを保存しておくようにブラウザに要求しておく(Set)。とい
うのが通常(正規)の処理手順と思います。
print &setCookie("KEYWORD", $keyword);
print &setCookie("DISPLAY_COUNT", $display_count);
&getCookie();
print <END_OF_HTML;
Content-type: text/html
<HTML>
<HEAD>
<TITLE>Cookie Test</TITLE>
</HEAD>
<BODY>
*************
*************
*************
</BODY>
</HTML>
こんな感じでPerlで作成したCGIの中でデータを一度クッキーに保存し、クッキーよりまたデータを取得し、HTMLを掃き出している。クッキーよりデータを取得するとき、最新のものが取得できず、次のCGIを起動したときに前のクッキーを取得しているようだ。ちなみにブラウザはIEだけど、「Cookieを取得する前に確認する」ってありました。ぴゅあさんへ・・・?
ご無沙汰してます。
1ヶ月ほどインタネから離れていました。
いくつか質問も来ていたので返事を書かなきゃと思いつつ(もう解決したのかな?)折角の久
しぶりの休みなのになにもする気が起きず....
暑さの所為だろうか?
>チョイスさん
AN HTTP Serverを通さず直接ブラウザでCGIソースコードを見ているのではないでしょうか?
例えばAN HTTP ServerをインストールしたフォルダにCGIソースコードファイルを格納したと
するとhttp://127.0.0.1/xxx.cgiのような指定の仕方をすることになります。
AN HTTP ServerはインストールしてあるのでしょうからCGIをPerlで書いてあるならPerlの
インストールもお忘れなく。Perlが正しくインストールできていなかったらそれなりのエラー
が出る筈ですからAN HTTP Serverへの設定を確認すれば先へ進める筈です。
>ドラゴンさん
メール頂きました。
たぶん1回目のCookieは設定できているのでしょうから2回目以降Set Cookieが行われてい
るか、またそのデータが正しいか確認してみてください。当然のことながらブラウザでCookieの
取得を拒否するとデータは更新されませんし、CGIの方で古いデータを送っているのかもしれま
せん。
ブラウザで「Cookieを取得する前に確認する」と設定しておけば設定されるべきデータの内
容が確認できる筈です。
HTMLのデータをCGIで一度クッキーに保存し、クッキーよりまたデータを取得し、
HTMLを掃き出して表示しようとしていますが、最新のクッキーのデータを取得することができません。クッキーよりデータを取得などはPerlで行っているんですが・・・・・
誰かこの問題についてコメントしてください。
はじめまして
最近CGIの勉強をはじめた初心者です。
恥ずかしい話ですが、CGIのチェックが自分のマシンでできることを知り
早速、DL、設定を試みましたが、どうもうまくいきません。
症状としては、CGIプログラムソースが表示されます。
後は特にエラーは出ていません
接続方法はいまいち理解していません。
機種 windows95、IE5環境です
どうか HTTPDをPCに導入方法を教えてください。
よろしくお願いします
斎藤さん、
文法エラーではなくて実行時のデバッグだとすると、古典的には、各段階で知りたい変数を表示させる、ということになると思います。
CGIでは 最初に print "Content-type: text/plain\n\n" とでもしておいて、適宜変数などを print するというやり方です。
Perlのデバッグモードでは環境変数や標準入力をとりそろえるのが面倒ですし。
Tigerさん、
別に変ではないと思いますが、VBで 漢字変換なり %NN のデコードなどをすれば済みそうな気もします。このあたりは VBでライブラリでも作って公開すれば皆さんに喜ばれるかもしれません。
なお、Visual Basicを使ったCGIによるWEBデータベースアクセス のページも参考になると思います。 特に cgi4vb など。
あと、Excelなどの操作では、 WSH(Windows Scripting Host)の cscript なども利用価値があるのではないかと思います。
tonakaiさん、
オプションのログで、プロセスログを有効にして process.log の内容を調べてください。
ドキュメントルートなどに "Program Files" など空白を含むフォルダがあるとうまく動きません。
TED さん、
ページ拝見しました。何かご要望でもありましたらどうぞ。
開発ご苦労様です。
AN HTTPDを使ってPerlのCGIのテストをしています。
とても初歩的な質問で恐縮なのですが、デバッグはどのようにしたらいいのでしょうか。
エラーの出ないような変数の中身を知りたいような場合どうすれば…。
HPをいろいろ探してみたのですがみつかりませんでした。
中田さん、「VBでCGI作ろう」のページ教えていただいて、ありがとうございました。
ざっと通し読みしただけですが、ひとつ氷解しました。
DOSーBasicには標準入出力がありましたが、VBにはないので、
どうするのかなと思っていたら、APIを使うのですね。
それと、Perlの場合だと、jcode.plやcgi-lib.plなどで、意識しないうちに
やってもらっていたことをVB側で自分でやらないといけないわけですね。
新しいことを始めるには、CGIの基本に立ち帰ってということですかね。
私の夢は前にも書いたように、Windowsのアプリを動かすことです。
HTTPDから直接VBを動かすと、デコードの様な面倒な作業が必要になるので、
それならば、一旦、Perlでデコード等の作業を済ませてしまい、それから、
おもむろにPerlからVBのアプリを起動したらどうかと思いついたんですが、
変ですか?
はじめまして。最近、自分のマシンを WWWサーバして、CGIが動かせるということを知った、
初心者です。わからないことが出てきたので、よろしければ教えてください。
自分のマシンでCGIを動かそうとすると、なぜかエラーになってしまいます。ドキュメントフォルダにhtmlファイルを置けば、ちゃんとそのhtmlファイルが表示されるのですが、CGIファイルだと、
Error 500
CGI エラー - 標準出力一時ファイル 1.x を stdout.x にリネームできません。
とか、
Error 500
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:
指定されたファイルが見つかりません・p>
などと出てきてしまいます。
コマンドプロンプトからはちゃんとperlが実行できます。
AN httpのオプションなどの設定を変えてみたりして、いろいろ試しているのですが、
原因がいまいち良くわかりません。
わかる方いましたら、教えてください。
初心者のくだらない質問のような、気がしますが、
ほんとに分からないのです。よろしくお願いします。
中田昭雄 様へ
素敵なPRGを、公開していただきありがとうございます。いつもCGIのバグ取りに
苦労してました。おかげさまで、順調に・快適に作業でき、この、土・日で、大幅に
作業が進捗しました。これまでは、テレホーダイ時間帯で集中的に作業してましたが、
これからは、昼間にゆっくりと出来ます。
まずは、お礼まで。
因みに、本日の作業分の URL です。 一度、冷やかしがてら、覗いてください。
http://freedom.mitene.or.jp/~ohkubo/webmail
http://freedom.mitene.or.jp/~ohkubo/mini
http://freedom.mitene.or.jp/~ohkubo/mini2/
HPは、 http://www.mitene.or.jp/~ohkubo です。
chorkee さん、
私はやってみたことはないので具体的にはわかりませんが、MySQL のページ中のドキュメントが参考になると思います。
DBIなどPerlのインタフェースについては日本語訳はそれほど進んでいないようなのでMySQL本家(のミラー)のDocumentationでも同じかもしれませんが。
誰かがこのサーバを使って、データベース構築(MySQL)して、なおかつ、DBI(Database Interface)を使ってデータベースをやり取りしている経験が
がある人がいますでしょうか?
もし、いれば、PERLでmysqlとサーバの繋がり方をお教えていただけませんでしょうか?
それとも、この情報に関連して、よいサイトを紹介していただけませんでしょうか?
ぜひ、よろしくお願いします。
Tiger さん、
とりあえずVBでCGI作ろうあたりでしょうか。
他にも2、3あったと思うのですが、今ちょっと出てきませんが、"VB" と "CGI" で検索すれば出てくるかもしれません。
また、ASPという選択もあります(AN HTTPD では現在できませんが)。
中田さんへ、
HTTPDをPCに導入して、PerlでCGIスクリプトの練習をしている初心者です。
安心して実験のできる環境を作って頂いて感謝しています。
UNIXはよく分かりませんので、シェルやCはチンプンカンプンです。
dosのjgawk、jperlや Visual Basicは経験があります。
そこで質問ですが、最終的にプロバイダのWebサーバに登録するのが目的なら、
UNIXの言語でCGIを作る必要がありますが、家庭内LANあるいは、スタンドアロンで
利用するだけならば、使い慣れたjgawk, Visual Basicなどが利用できれば
便利だと思います。
こんなことは可能なのでしょうか? 発想は変ですか?
PerlやCを使ったCGIの例を記載したページはたくさん
見かけますが、Windowsの言語のサンプルがあれば、紹介して頂けないでしょうか?
(夢は、ブラウザから、検索条件を入力し、多数のExcelシートから条件にマッチする
ものを選択して、シートの一部を表示することなのです。)
いとさん、
なるほど。 ヘルパーはひとつしか起動されないということを前提にしていました。
対応を考えます。
中田さん、こんにちは。お久しぶりです。
Helper が原因で Windows が終了しない件、私も最近経験しました。
他の方と同じかどうかは不明ですが、次のケースで起きるようです。
通常、AN HTTPD は同じポートT番号で複数個同時に起動できないのですが、
[レ]バーチャルホスト
[レ]ヘルパープロセス
[ ]プロクシサーバ機能
という設定では何個でも起動します。Helper も同じ数だけ実行されます。
AN HTTPD を順に閉じていくと、最初の一つの Helper は終了するのですが、
二つ目以降は残ってしまい、Windowsが終了できないという状況に陥ります。
通常、バーチャルホストにチェックを付けたり、AN HTTPDを複数起動させる
必要性は全くありませんので上記のようになることは稀でしょうが、試しに
やってみたという場合に起きる可能性はありそうです。
以下はHelperとは全くの別件ですが、ついでということで。
プロクシサーバ機能にチェックすると、AN HTTPDの画面で、プロクシポート:8080
以下の表示が文字化けします。会社のLAN接続したWin95aで起き、自宅のWin98では
起きないのですが…。表示だけの些細なことなので、他の Win95マシンで起きない
ようでしたら無視してください。
最後に最近のAN HTTPDの動作状況報告です。99年3月中旬頃からハングの頻度が
際立って少なくなっています。平均で7〜10日、最長で37日間連続稼動しました。
このときは Win95の49.7日問題を心配したほどでした。多謝 > AN HTTPD です。
>ヘルパープロセスのチェックを(はいっていたら)はずしてみて
はずしてみたところ、Windows終了できました(^^)/
何か不明の点がありましたらご遠慮なくどうぞ。
SayT さん、
以下のような表記になると思います。
open(FILE,"/http112/cgi-bin/log.txt")
open(FILE,"C:/http112/cgi-bin/log.txt")
open(FILE,"\\http112\\cgi-bin\\log.txt")
open(FILE,"C:\\http112\\cgi-bin\\log.txt")
open(FILE,'\http112\cgi-bin\log.txt')
open(FILE,'C:\http112\cgi-bin\log.txt')
同じドライブですから C: は省略できると思います。
パス区切りは本来 \ ですが、Perlスクリプト中では / でも同じになります。
エイリアスの設定は、URL で使われる仮想絶対パス と ローカルディスク上の絶対パスとを対応させるものです。
ドキュメントルートが仮想パスのルートです。
仮想パス / は C:\http112 のことになり、
/~sayt のエイリアスが C:\home\sayt\public_html なら、言われるような対応になります。
(Perlスクリプト内では \ が / でも同じです。)
仮想パス /cgi-bin のエイリアスが C:\http112\cgi-bin になっていれば、ローカルディスク上の絶対パスはもちろん C:\http112\cgi-bin で、これが ドライブ名を省略し、\ を / で表記すれば /http112/cgi-bin ですが、あくまでそれは C:\http112\cgi-bin のことです。
HTTPサーバにアクセスするとき http://127.0.0.1/index.html は、 /index.html にアクセスしますが、ディスク上のローカルパスは、ドキュメントルート(C:\http112)が仮想ルート / なので、C:\http112\index.html です。
UNIXだとローカルパスも / 区切りなので、かえってわかりにくいかもしれません。
ZnZ さん、
現在のところ b = d です。受けたポート(b)に接続(d)します。
なかにしさん、
そうですね。CGI/SSIは大体コマンドラインで動かすので、"Program Files" など空白を含むフォルダの下に置くのを避けた方がいいようです。あるいは PROGRA~1 などの短縮名に置き換えるのでもいいのですが、あまり美しくはないですね。
print文を修正するとうまく動きました。大変お騒がせしました。
今後もよろしくお願いします。
どうも、はじめましたて、中田さん。
HTTPDは僕のバージョンは1.12でやや遅れ気味ですが
快適に動作しています。
ところで、かなり切実な質問です。僕はUNIXは使ったことはありますが
基本的にWindowsユーザなためにいまいドキュメントルートディレクトリが
よくわかりません。というよりも、CGIのファイルのopenの時の
絶対パスでの実行がいまいちうまくいきません。
例えば、C:\http112のフォルダが最上階のディレクトリだとします。
cgi-binの中でopentxt.plというファイルで同じフォルダのlog.txt
絶対パスで呼び出すスクリプトを作ったとします。
相対パスでの呼び出しは「open(FILE,"./log.txt")」で呼び出せるはずです。
では、絶対パスはどうなるのでしょうか???「open(FILE,"/???/log.txt")」???
構造はこんな感じです。
C:\http112
|
|=cgi-bin=
|
|-log.txt
|-opentxt.pl
今日、さかなさんホームページで知ったのは、
「http://127.0.0.1/~sayt/index.html」というのが
「/home/sayt/public_html/index.html」でCGIのときはアクセスすべしと
言うことは知りましたが、public_htmlよりも上の階にあるcgi-binでは
どう絶対パスを指定すべきかわかりません。
助言お願いします。
ゲートウェイで設定できるポートって
MUA a-b httpd c-d server
のうちbとdのどちらなのでしょうか?
中田さん、お返事ありがとうございます。怪しい所を発見しました。
process.logで
>Mon Aug 02 21:03:56 1999 E:\WINNT\system32\cmd.exe /C "E:\Program Files\httpd"\cgi-bin\test.bat < E:\TEMP\stdin.0 > E:\TEMP\1.0
のようになっていました(IE5,NN46共に同じログがとれます)。ここで、
"E:\Program Files\httpd"\cgi-bin\test.bat
のように""が途中までついている所が怪しそうです。対処法はありますでしょうか?
中田さん、どうもです。
おもいっきり、ボケました。(^^;
readme.htmlをWクリックで開いたものからリンク
伝って行こうと思ってました。
どうも失礼しました。(^^;
有難うございました。
また、宜しくお願いします。
早速の回答ありがとうございます。
ところが、システムを再起動してもうまく動作しません。
スクリプトも極力余計なものを消去しましたが、同じエラーが表示されます。
htmlおよびcgiファイルは以下の通りです。なおAN HTTPを1.19eから1.19fに変更しました。
恐縮ですが、再度のご指導よろしくお願いします。
以下今回動かそうとしたファイル
---test.html---
<HTML>
<HEAD><TITLE>TEST</TITLE></HEAD>
<BODY>
<H1 align="left">TEST</H1>
<FORM METHOD="GET" ACTION="/cgi-bin/test.cgi">
<INPUT type=text NAME="inputtext1">
<INPUT type="submit" value=" 検索 "> <INPUT type="reset" value="リセット">
</FORM></BODY></HTML>
---test.cgi---
#! d:\Perl\bin\JPerl.exe
print "Content-type: text/html\n\n";
print "<html><head><title>TEST PRINT</title></head>\n";
print "<BODY>";
print "OK\n";
print "</BODY></html>\n";
※これだと入力テキストを受け取りませんが、その辺は今のところ構いません。
加藤T さん、
いろいろ動かした中で Perl のプロセスが動いたままになっているとそのエラーになります。
そのプロセスがTEMPディレクトリにあるファイル1.0をオープンしたままのためです。
Perl(と関連する)プロセスを強制終了するか、WindowsNT を再起動する必要があります。
そうなる原因は、スクリプトにあることが多いと思います。(標準入力待ちが2箇所以上あるか永久ループになるなど)
"オプション/一般"の"CGI出力を検査"にチェックを入れるとうまく行きました。
"CGIエラー - 標準出力一時ファイル 1.x を stdout.x にリネームできません。" と
いうメッセージが表示されるだけで、相変わらず動作しないことには変わりありません
が。
ともあれ、CGIは始めたばかりなので、いろいろ試してみようと思います。どうも
お騒がせしました。
はじめまして。ローカル環境でcgiを動かそうと思ってこのツールを導入したので
すが、最初のところでつまづいてしまいました。詳しい方がいらっしゃったら、ぜひ
助けてください。
(症状)
perlで記述したcgiプログラムが動きません。具体的には、あるhtmlファイル中に
|<FORM METHOD="GET" ACTION="/cgi-bin/test1.cgi">
|<INPUT type="submit" value=" 実行 ">
|</FORM>
と記述し、ボタンを押すとtest1.cgiが動くようにしたかったのですが、ボタンを
クリックしたところ、Netscapeの場合、「ドキュメントにデータが含まれていません。
あとでやり直すか、サーバの管理者にお尋ねください」、IEの場合は「インターネット
サイトhttp://localhost/cgi-bin/test1.cgi?を開けません。無効なまたは認識
されない応答をサーバが返しました」とのエラーメッセージが表示されます。
リンク先に存在しないファイル名を入力した際は、エラー404が表示されます。ま
た、.bat形式のファイルをリンク先に指定すると正しく動作しますが、.plや.cgiの
場合のみうまく動作しないので、perl実行プログラムを呼び出すあたりでうまく行っ
ていないものと思われます。
なお、オプション設定は"#!の行を調べる"をオフに、".pl,.cgiの実行プログラム"
を"D:\Perl\bin\JPerl.exe"(パール実行ファイルの置いてある場所)に指定し、test1
.cgi文中には"#!(パールの位置)"は指定していません。
このperl.exe(JPerl.exe)自体は動作確認済みで、通常のperlプログラムを正しく
処理できます。
システムの組み合わせは、WinNT4.0 + Perl5.005 + AN HTTP1.19e です。よろしく
お願いします。
はいどんさん、
たとえば CGIのサンプルページを表示する時、ブラウザの場所(アドレス)の欄は、
http://127.0.0.1/cgi/cgisample.html
となっていますか?(最初が http: になっていますか?という意味です)
中田さん、どうもです。
えーと、例えば、CGIテストのページの「単純なテスト」であれば
次のファイルまたはディレクトリをみつけられません。
/cgi-bin/test.bat
名前を確認して、やり直して下さい。
といったダイアログが出てきます。
もちろん、test.batは、ちゃんと存在してます。
宜しくお願いします。
はいどんさん、
「次の」というくらいですからそのあとファイル名(パス名)が出ていると思うのですが、そのファイル名をお知らせ下さい。
特に設定は必要ないはずですが、readme.html の注意書きにあるように、ドキュメントルートや/cgi-bin のエイリアスに空白(ブランク)を含んでいると正常に動作しないことはあります。
zaqua さん、
受ける方は、POP3,APOP には対応しているはずなのですが。。。
rvshop.com のメールサーバとのやりとりがgateway.log に残っていたら、メールで送っていただけませんか?
なかにしさん、
プロセスログをチェックして process.log をみていただくとわかりますが、NT では、CMD.EXE を呼び出します。
その CMD.EXE は 環境変数 COMSPEC に指定してある CMD.EXE のフルパスになっているはずです。
中田さん、ありがとうございました。
そうです、IE5です、他の書き込みでもありますね。
いろいろ問題ありますね>IE5
また質問すると思いますのでよろしくどーぞ
たびたび、すいません。(^^;
先ほど、CGIが上手く行かない・・・と書いたのですが
どうやら、CGIの問題ではなく、ロケーションの問題みたいで、
ネスケで見たところ、「次のファイルまたはディレクトリを見つけられません」
と、言われてしまいます。
参考までに・・とクリッカブルマップのサンプルもやってみましたが、
同じメッセージが出てしまいます。
とくに、何も変更してないのですが、エイリアス関連で、
やらねばいけない事があるとか・・・でしょうか??
宜しくお願いします。
>中田さん・・・
どうやらrvshop.comのめーるが対応していないようでした。
他のメールサーバを使用すれば問題なく使用できるようです。
どうもお手数おかけいたしました。
*質問する前にもっと自分でいろいろとチェックしてみるようにします。
ありがとうございました。
次はまたローカルサーバでCGIの勉強しますので、設定でつまづいた時にでも
また教えてください。
それでは失礼いたします。
(次はICQなどの対応してもらえるとすごくうれしいと思います(^^;)
はじめまして。
CGIテストにと、使わせて頂こうと思っています。
がしかし、CGI、上手く行きません。
IE5を使用して居るため、「サーバが見つからないか、またはDNSエラーです」
というエラーが帰ってきます。
んで、「CGI出力を検査」にチェックを入れてみましたが、
結果は同じく、「サーバが見つからないか・・・・」が出てしまいます。
使っているバージョンは、1.19eです。
宜しくお願いします。
中田さん、お返事ありがとうございました。
「コマンドまたはファイル名が違います」ですかぁ。そういうエラーが出るはずは
なさそうなんですけどね。
一応報告しておきますと、オプション/一般の「拡張子/実行プログラム」の
ところは空になっています。
pathは通っているので、「perl」だけでも大丈夫なはずなんですが、一応
「.pl, .cgi の実行プログラム」をフルパスで書いてみましたが駄目でした。
perlは動作確認はしているのでperl.exeの問題でもなさそうです。
前回書き忘れましたが、NT4はNEC版です。
#これが一番怪しかったり(^^;
どうもありがとうございました。
#前回の二重書き込みは失礼しました。
zaqua さん、
ゲートウェイのチェックは必要です。
ゲートウェイのところは今までメーラで設定していたサーバ名(またはIPアドレス)を入れます。
今まで、AN HTTPD が稼動しているPCのメーラからメールサーバに直接アクセスできていなかったとすると、AN HTTPD のプロクシ(ゲートウェイ)を通してもアクセスはできません。
その場合は、ネットワークの環境がどうなっているか(メールででも)お知らせ下さい。
えむけいさん、
"Friendly http errors" は127.0.0.1へのアクセスに限れば直接レジストリを見ればいいわけですが。。。
一般に見る分には、yes のままの方がいいのだと思います。
Pragma: no-cache は追加しておいた方がいいですね。
なかにしさん、
WinNTのそのエラーは Win95/98 でいう「コマンドまたはファイル名が違います」というエラーです。
オプション/一般の「拡張子/実行プログラム」のところに .bat の指定をしているようでしたら、その行を削除してください。そういう指定はしていないとするとちょっとわかりません。
また、「.pl, .cgi の実行プログラム」のところは フルパスで C:\perl\bin\perl.exe などとしてください。
>中野さん。
ゲートウェイのSMTP と POP3 のチェックボックスを外したら127.0.0.1でも
192.168.16.5(←これは私のサーバのIP)でもメールサーバにコンタクトを
取りに行っているようです。ネットスケープメーラで確認しました。
ただし、データがうまく送受信されていないようで、
「応答がありませんでした。サーバがダウンしているか応答しないようです」
というメッセージがでます。
一度だけメール受信に成功しましたがほとんどの確率で失敗に終わっています。
というよりも一回きりでその後は全然だめです。
他にどのような設定をすればメールの送受信ができるようになるのでしょうか?
あと、「ゲートウェイ」のチェックボックスを外したらメールチェックができるようになった
のにもちょっとだけびっくりしました。
それではよろしくお願いします。