2011-12-20 24 views
1

私はいくつかのファイル(たとえば、PDF)をダウンロードする必要があります。何が長くなります。ファイルをPHP経由で直接ダウンロードしていますか?

  • は(PHPの助けを借りずに)それをダウンロードするためのパブリックリンクを
  • 、(特定のヘッダを持つ)PHPで、このファイルを送信またはhttpパブリックフォルダに入れて、ユーザーを取得しますか?

第一の場合には、元のファイルは、プライベートゾーンである可能性があります。 しかし、私はこのファイルをPHPで送るのに時間がかかると思っています。

だから私はPHPでファイルを送信し、それがどのくらいのメモリを消費することが可能に時間を費やして測定することができますか?

P.S. PHPがヘッダーを送信し、ブラウザ(pdfプラグインがインストールされている場合)がブラウザ内で開こうとすると、PHPがまだ動作しているか、またはすぐに送信された後にファイル全体をプッシュします。プラグインがインストールされておらず、ブラウザに「名前を付けて保存」ダイアログが表示されたら、PHPはまだ動作していますか?

+2

これらのいずれかにPHPが費やす時間はごくわずかです。違いを生むのは、あなたとクライアントのネットワーク接続です。つまり、時間を測定する必要はありません。ただ1つのソリューションを実装するだけです。 – Gordon

+0

PHPがファイルを送信し、ユーザが「名前を付けて保存」ダイアログを見て何をするかを決める場合、PHPはユーザの回答を待つでしょうか?メモリが使用されますか?ユーザーが保存をクリックするかキャンセルするかを決定するまで – user1016265

答えて

2

ダウンロード速度が心配な場合は、その中にはほとんどありません。

私はあなたが持っていることを期待どのように多くのダウンロード、それがダウンしてあなたのファイルはどのようにビッグになると思いますし、あなたの文書は、クライアントのダウンロード速度公にアクセス可能である必要があります。

+0

ここでの主な関心事はメモリ使用量です。 私は、ApacheがApache + PHPよりも少ないメモリを食べると考えています。 PHPは、ユーザが「名前を付けて保存」ダイアログで何をすべきか考えても、メモリを使い続けているようです。どう思いますか ? – user1016265

+0

はい、PHPがより多くのメモリを使用する可能性があります。ファイルを静的なファイルとして扱うことは、私が個人的に考えている限り最も効果的で、実装が簡単です。 –

1
PHPであなたの主な問題は、それが消費するメモリである

- 各リンクは多分8Mになり、新しいプロセス、作成されます - あなたは、フレームワークを使用するかどうか、あなたのスクリプトが何をするかに応じて、20Mをなど

のうち、興味を持って、ダウンロードを提供するためのsymfonyアプリケーションを作成し、並行処理制限、帯域幅制限などの作業を行いました。コードを調べることに興味があればhereです。 (私はそれ自体のライセンスはしていませんが、好きな場合はGPL3にするのがうれしいです)。

+0

これは私の心配です。 1K人がそれぞれのファイルを開こうとすればどうなるでしょうか? Apache単独でファイルを送信する場合は、メモリ使用量が少なくなるようです。 – user1016265

+0

正しい。一般的には、並行処理の制限のようなやり方をしたい場合(また、適切なオプションのモジュールを使用する場合はApacheでも可能です)、スクリプト化されたプロセスのみを使用してください。パスワード/セッションベースのセキュリティを提供したいだけの場合は、(おそらくハッシュを含む)疑わしいディレクトリ構造を作成し、その構造内からWebツリーの外の実際のファイルへのシンボリックリンクを作成することができます。期限切れのフォルダを削除するには、cron-jobを使用できます。 – halfer

+0

注:PHPプロセスに16Mがかかる場合、1000人の同時ユーザーが約16GのRAMを使用します。独自のサーバーをお持ちの場合は問題ありません。しかし、もちろん、忙しい時に余分なユーザーへのリクエストを拒否するようにシステムを制限することもできます。最後に、合理的に入手できるリクエストのレベルを確認するためにいくつかの調査を行う価値があります。サイトの人気の予測は過大評価されています。 – halfer

関連する問題