1

フォーム入力xと(整数)を受け取り、プログラムが2つの値の合計をテキストファイルに書き込むyC++実行可能ファイルに渡すpython CGIスクリプトがあります。subprocess

コードはローカル マシンで正常に動作します。しかし、多くのテストを行った結果、サーバー上でこのプログラムを実行し/var/wwwてファイルに書き込もうとすると、「内部サーバー エラー」ページが表示されるため、何らかのエラーが発生することがわかりました。

サーバーは私のものではないため、実際にはsudo権限がありません。しかし、パテから実行可能ファイルを手動で実行すると、実際にファイルが書き込まれます。

私の推測では、Python スクリプトから何らかの権限で実行可能ファイルを実行する必要があると思いますが、よくわかりません。提案をいただければ幸いです。

編集:
@gnibbler: 興味深いことに、ファイルを /tmp ディレクトリに問題なく書き込むことができました。

したがって、あなたの提案は正しいと思います。サーバーは、ブラウザーからスクリプトを呼び出すときに書き込みを許可しません。

また、エラー ログがあるディレクトリにアクセスできないため、そのためのアクセス許可を取得する必要があります。

4

3 に答える 3

1

環境が異なるか (間違ったディレクトリに書き込もうとしている可能性があります)、ログインしているのと同じユーザーとして cgi が実行されていない可能性があります。

たとえば、CGI スクリプトが「nobody」や「www」などとして実行されることはかなり一般的です。

cgi にファイルを に書き込んでみることができます/tmp。それは少なくともcgiが実行されているユーザーを確認する必要があります

于 2012-05-11T12:05:34.477 に答える
0

他の人が言っているように、おそらくアクセス許可の問題が発生しています。しかし、エラー ログを見ない限り、何が起こっているのかを確実に知ることはできません。通常、内部サーバー エラーは実際のエラーを覆い隠します。

実際のエラーが何であるかを把握するには、次の 2 つの方法のいずれかを実行できます。あなたは CGI をやっていると言ったので、cgitbテスト中に調べてみることをお勧めします。ブラウザに Python のトレースバックが表示されます (ただし、サブプロセスのシナリオでは役に立たない場合があります)。

それ以外の場合は、Python のトレースバックが含まれている可能性がある Web サーバーのエラー ログを調べて、何が起こっているかを示してください。これらが保管される典型的な場所は/var/log/httpd. アクセスできない場合、またはそこにログが見つからない場合は、サーバー管理者に場所を尋ねてください。

于 2012-05-11T12:11:07.527 に答える
0

試してください それでもchmod 0666 filethatyouarewritingto.txt うまくいかない場合は、C++ ファイルがグループ 'others' で実行権限を持っていることを確認してくださいchmod 0755 yourprogram

ソース

于 2013-05-09T17:45:10.733 に答える