2012-02-15 4 views
1

私たちはCGI.pmを使用して、私たちのウェブサイトや私たちのAPIである& iPhone Appsで使用されるAPIを使ってファイルをアップロードするのを手伝います。私たちは最近、CGI.pmが私たちのiPhone App経由でアップロードされているファイルのほぼ50%のパラメータを返さないように見えることに気付きました。ウェブサイトからアップロードされたファイルについても同様の問題は発生していません。難解な問題を扱うファイルをPerlでアップロードする

テストで問題を再現することはできませんが、本番環境ではCGI.pmのcgi_error()メソッドはCGI.pmパラメータがない場合のエラーを報告しません。私たちはアップロードのためにファイルを投稿するとき、iPhone Appが常に正しいパラメータを含んでいることを確認しました。

セットアップのクイックバックグラウンド。 Amazon Elastic Load Balancerを使用して負荷分散されているAmazon EC2サーバーでは、アプリケーションが削除されています。 $ CGI :: POST_MAX =(1024 * 100000)もあります。 POSTの最大サイズは100MBに設定されており、すべてのアップロードがこの制限を下回っていることを確認しました。

次はどこに行くのかわかりません。どのような問題であろうとどのように解決するかについてのアイデアは大変ありがたいです。また、トラブルシューティングを開始できるように、問題の根本を特定する方法に関するアイデアも参考になります。

ご協力いただきありがとうございます。

+0

CGI.pmがアップロードされたファイルの50%に対してparamsを返さないと言ったときに、あなたの意味を明確にすることはできますか?ファイルデータ以外のparamsが見つからないか、CGI.pmに利用可能なデータがまったくないことはありますか?エラーログにこれらの要求に間違って表示されますか? – kbenson

+0

すべてのパラメータがiPhone Appによって正しく送信されていることを確認したにもかかわらず、CGI.pmによって返されるパラメータは絶対にありません。エラーログには何も報告されていませんし、どちらもcgi_error()メソッドではありません。 –

+0

マルチパートMIMEエンコードの前または後に100MBですか? – daxim

答えて

1

エラーが記録されていないparamsの損失は、CGIモジュールがPOSTデータを処理する際にエラーを起こしたという現象です。たとえば、POSTが$ CGI :: POST_MAXを超えています。関数モードでCGI.pmを使用していますか?param()、または$ cgi-> param()を呼び出すオブジェクト指向モードを呼び出していますか? cgi_error()に関して、perldoc CGIは次のように警告します。関数指向のインタフェースを使用する場合、エラーは初めてparam()を呼び出すときにのみ発生します。これに備える!あなたが見ることがCGIオブジェクトのダンプ内

use Data::Dumper; 
my $cgi = CGI->new(); 
warn Dumper($cgi); 

:あなたはCGI.pmは何かを行う前にCGIオブジェクトを見てみてください、あなたからのエラーをマスキングされた疑いがある場合、デバッグ用として

、 '.cgi_error' => '413リクエストエンティティが大きすぎます - これはPOST_MAXに対してcgi_error()が返すものです。

また、Modperlを使用している場合、CGIは異なるアプリケーションへのリクエスト間で$ CGI :: POST_MAXなどの値に古いことがあることに注意してください。 (あなたのPOST_MAXを指定しているので、あなたの問題ではないと思われます。)

0

この問題はCGI.pmでも見られますが、問題はIEだけに限られていました。 $CGI::POST_MAX=5000000を追加して解決しました。それは50kファイルだけが戻って渡されているので、それを殺す。