2013-08-26 6 views
9

アップロードのために私のコードに$input = fopen('php://input', 'r');という行があります。php://入力を切り捨てるのはなぜですか?

アップロードが完了したら、$_SERVER['CONTENT_LENGTH']をチェックして、すべてが期待どおりに送信されたことを確認します。最近、CONTENT_LENGTHとアップロードファイルのサイズがランダムに一致し始めました(20分ごとに1回、非常に頻繁にアップロードされる人との間で)。

ミスマッチを記録して保存しましたが、一部のファイルがダウンロードできず、一部が開かれていないことが判明しました。私がPhotoshopで開いた人でも、文書が壊れていると警告した。

変更が必要なサーバーの設定はありますか?

ブラウザのタブやその性質のものをシャットダウンすることで複製を試みましたが、それでもエラーは複製されませんでした。

私たちはAJAX POST経由でアップロードしています。本文はPOSTです。アップロード元です。

+0

アップロードは気楽なことですが、ファイルをどのように保存していますか?それらをデータベースに書き込んでいますか?またはファイルをフォルダに格納し、データベース内のパスを参照する/ –

+0

不正なコピーがフォルダに保存されていて、ログに記録して確認します –

+1

実際にサーバーにPOST要求を行うコードを理解していないと把握することは不可能です。データはどのように送信されますか?フラッシュ、Javascript、HTMLフォームなど。私は前にこのような問題に遭遇しましたが、チャンクを構築してSTDINに送信するのは、通常、数学的なエラーでした。 – phpisuber01

答えて

-3

post_max_sizeupload_max_filesizeディレクティブがphp.iniにあります。その値が切り詰められたファイルのサイズと比較され、その理由がわかります。

+0

これがそうであればそれは得られず、50MBのファイルを簡単にアップロードすることができます。時々メグよりも小さい。 –

1

負荷/ネットワーキングの問題のように聞こえます。ユーザーがアップロードしようとしているサーバーが応答していない場合、レイテンシの問題/タイムアウトの問題が発生しています。

通常、サーバー(多分PHPでなくても)は、AJAXであるとは限りません。私はパケットがサーバーに来るいくつかの場所にドロップがあると思う。これは、データセンター(例:帯域制限付き)またはサーバー自体の制限に制限されます。

次の設定を使用してサーバーを最適化します。これは任意のLinuxディストリビューションで動作するはずです:

/etc/sysctl.confファイルを編集してください。最後に次の行を追加します。

net.ipv4.tcp_wmem= 10240 87380 12582912 
net.ipv4.tcp_rmem= 10240 87380 12582912 
net.core.rmem_max=12582912 
net.core.wmem_max=12582912 
net.ipv4.tcp_max_syn_backlog=100000 

はどのようにチューンナップあなたのLinuxへのあなたがよりよく理解するためにIBMから、次のマニュアルを使用することができます。私はログです。また http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf

をクライアントのブラウザのバージョン。サーバーに送信される形式は、AJAXがブラウザによって異なることに依存します。あなたがAJAXコードを指定していないので、ファイルをアップロードするためにAJAXが何をしているのかを仮定することは難しいです。

+0

ありがとう!明日のオフィスでは、これらの設定の意味をより詳しく調べることができます。問題はすべてのブラウザにあります。私はそれが何年も完璧に働いて以来、それがAJAXだとは思わない。私たちはサーバーを変更しましたが、アップロードに影響するものは何もありません...問題を引き起こしているサーバーとは異なるサーバーのセット全体でした。それは非常に奇妙で、私は偶然のタイミングを疑う。 –

+0

戻ってこないのは申し訳ありません!この問題を解決する可能性があること、またはこの問題を修正してサイトを壊す可能性があるという回答でした。そのため、当社の担当者はその変更を心配していました。 –