- ベストアンサー
構文チェックについて
#!/usr/local/bin/perl $perl = `perl -wc web.cgi`; $perl=~s/[\r\n]/<BR>/g; print <<"END"; Content-type: text/html <HTML> <HEAD><TITLE>PERLCHECK</TITLE></HEAD> <BODY> perl<BR>$perl </BOBY> </HTML> END exit; と以上のように書いてますが。telnet上ではOKと出ますがブラウザでみるとエラーが出ます。 やりたいことは、Telnetを使っての構文チャックではなく、ブラウザ上で構文のチェックは出来ないか模索しています。上記の`UNIXコマンド`の部分で、freeやdf等のコマンドを実行させると実行結果が得られるので、その延長で出来ないかと考えてます。初心者なのですいませんが教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
えとですね(笑) これは、原因は「$perl = `perl -wc web.cgi`;」の部分です。 この web.cgi の部分は telnet 上では「HP管理者」が実行しますが、Web上では「HP閲覧者」が実行することになります。 つまり、「HP閲覧者が、HTTPサーバーを経由せずにCGIを使う」という、(セキュリティ的に)通常はやってはいけないことをやってしまうことになるんです。 ブラウザからの閲覧は、基本的にすべてゲストログイン扱いになるので、ブラウザ経由でそういうことするのは難しいかと思います。 かくいう俺も、昔HTTP経由でHPの更新とかできるCGIを作ったことがありましたが、制約が多すぎてやめてしまいました(^_^;
その他の回答 (2)
- Fooky
- ベストアンサー率71% (59/82)
deagleさんが触れられているように、 実効ユーザの違いじゃないですか? $perl = `df`; なら正しい結果が得られるんですよね。 それじゃ、$perlの中に書いたものが悪いと 思われますよね。 1.perlのパスが通ってない `perl ...`を`/usr/local/bin/perl ...`に してみる 2.web.cgiってどこにあるの? この書き方だと、telnetでログインした ときのホームディレクトリにあるんですか? web.cgiをフルパスで指定したらどうですか? 3.パーミッションの問題 web.cgiをこのCGIの実効ユーザが読めない。 どういったユーザ名でCGIが実行されてるか、 設定内容を知りませんが、guestならguestが 見にいけないような場所にweb.cgiを置いてませんか? あるいは、web.cgi自体のパーミッションがきついとか。 HTTPサーバのエラーログを見たらどうなってるんですか? 何か原因が書いてありません?
- ayucat
- ベストアンサー率12% (7/55)
Content-type: text/html を Content-type: text/html; とか? どんなエラーが出るのか、詳しくエラーを書けば、 もう少し分かるかも?
補足
telnet上では、syntax OKと出ます。 ブラウザ上では http://testsite.helpkeeper.net/users/tajima/index/web/perl.cgi と出ます。 ブラウザで、構文チェックとcgiのプログラムでは不可能なことですか?