6

私は最近、CGIスクリプトがstdoutに出力できるほとんどすべての言語で記述できることを発見しました。ローカルのapacheインストールでは機能するが、共有ホストでは機能しない小さなguilecgiスクリプトを作成しました。

#!/usr/local/bin/guile -s 
!#
(display "Content-Type: text/html")
(newline)
(newline)
(display "hi")
(newline)

これは、ホスト上のシェルからsshを介してスクリプトを実行したときの出力です。

$ ./scheme.cgi
Content-Type: text/html

hi

だから、明らかに私のホストにはguileがインストールされています。ただし、ブラウザでこのファイルにアクセスしようとすると、「500InternalServerError」が発生します。エラーログを見ると、恐ろしい「スクリプトヘッダーの早期終了」エラーが発生していることがわかります。

[server.com] [Tue Aug 17 00:54:19 2010] [error] [client xx.xx.xx.xxx] (2)No such file or directory:
exec of '/home/www/vhosts/jcw.geekisp.com/cgi-bin/scheme.cgi' failed

[server.com] [Tue Aug 17 00:54:19 2010] [error] [client xx.xx.xx.xxx] Premature end 
of script headers: scheme.cgi

私は共有ホストを使用しているため、mod_lispまたはguileのfastcgi実装を使用することは問題外です。そうは言っても、ここでの問題は何でしょうか?私がpython、perl、ruby、shで書いた同様のcgiスクリプトは、サーバー上でエラーなしで動作します。guile 1.8.7がホストにインストールされているようですが、ローカルマシンは最新バージョンです。

これは非常にニッチな質問であることを理解しています。助けていただければ幸いです。

4

3 に答える 3

6

また、guileなどの独自のコピーをコンパイルして〜/ bin /ディレクトリに保存し、そこにスクリプトを指定することもできます。

于 2010-08-21T20:21:02.530 に答える
4

/usr/local/bin/guileエラーは、Webサーバープロセスがインタープリターにアクセスできないことを意味すると思います。そのファイルのアクセス許可を確認し、サーバーがchrootで実行されている場合、または強制アクセス制御下で実行されている場合などにアクセスできることを確認します。また、スクリプトにアクセスしているときに、スクリプトのアクセス許可を再確認します。

于 2010-08-17T19:52:21.423 に答える
1

サーバーでsshを実行したときに存在する/usr/ local / binディレクトリは、スクリプトが提供されてブラウザからアクセスされたときの/ usr / local/binとは異なることがわかりました。このCGIスクリプトを通じて、どの通訳者が利用できるかを知りました。

#!/bin/sh
echo "Content type: text/html\r\n\r\n"
echo "ls /usr/local/bin"

このスクリプトをブラウザーで実行すると、mzschemeがリストされていることがわかりましたが、guileはリストされていません。だから、問題は解決しました、私はmzschemeを使用しています。

ありがとう、カール。

于 2010-08-19T14:19:23.480 に答える