1

私は検索して、私のものと非常によく似た質問をいくつか見つけましたが、それらの回答にはまだ何もうまくいきませんでした。

ファイルのアップロードを受け入れる perl CGI スクリプトがあります。ファイルを見て、その処理方法を決定し、2 つ目の非 CGI スクリプトを呼び出して実際の処理を行います。少なくとも、それが機能する方法です

これは、Apache 2.0.59 および ActiveState Perl 5.8.8 を使用する Windows で実行されています。upload.cgiファイルのアップロード部分は正常に動作しますが、実際の処理を行う 2 番目のスクリプトを実行するスクリプトを取得できないようです。2 番目のスクリプトは、ファイルを送信したユーザーと通信しません (完了時にメールを送信する以外は)。CGI スクリプトで 2 番目のスクリプトを (別のプロセスで) 実行してから、「立ち去る」ようにします。

execこれまでのところ、システム (最初のパラメーターとして 1 を渡す)、システム (最初のパラメーターとして 1 を使用せずに ' start' を呼び出す)、および Win32::Processを試しました。最初のパラメーターとして 1 を指定して system を使用すると、Apache ログにエラーが記録されました。

'1' は内部コマンドまたは外部コマンドとして認識されません。\r、リファラー: http://my.server.com/cgi-bin/upload.cgi

他にエラーが発生したことはありませんが、機能していないようです。2 番目のスクリプトは、最初に行うことの 1 つとして、メッセージを Windows イベント ログに記録します。ログエントリは作成されていません。

Omni Web サーバーの下のローカル マシンでは正常に動作しますが、Apache を実行している実際のサーバー マシンでは動作しません。これに影響を与える可能性のあるApache構成はありますか? upload.cgiスクリプトはd:\wwwroot\test\cgi-bindir にありますが、他のスクリプトは同じマシン ( )の別の場所にありd:\wwwroot\scriptsます。

4

1 に答える 1

1

セキュリティ関連の問題がある可能性がありますが、ログで明らかになるはずです。これはあなたの質問に正確に答えるものではありませんが、潜在的なセキュリティとパフォーマンスの問題に直面しない他の実装のアイデアを提供するかもしれません.

Web サーバー環境と system() 呼び出しを混在させるのはあまり好きではありません。代わりに、Web サーバーから関連するパラメーターを受け取り、ジョブを処理し、完了時に Web サーバーに通知するアプリケーション サーバー (通常はPOEを使用) を作成します。(まあ、通知の部分は簡単ではないかもしれませんが、それは別のトピックです。)

于 2012-10-22T22:31:20.920 に答える