2012-03-29 5 views
0

私はこのジレンマを何度も持っています。私は一度、すべてのことについて私の頭の中で答えを調整したいと思います。ディスクへphp - ストリーミングVSのPROとCON。書き込み/キャッシング

  • 書き込み:

    PHPでファイルを作成するときに、* .zipファイル、* PDFまたは他の同じように、PHPはあなたに2つの動作オプションを提供します。

  • ストリームを直接ダウンロードするストリーム。考慮すべき

ものがあります:

  • セキュリティ(通常)
  • CPUおよびファイル
  • ファイルの整合性
  • ファイルの更新
  • のための時間を提供し、他の対価そのIリストしなかった。

実用例:

Let'sは私が画像を詰めたzipファイルをダウンロードするためのウェブサイトを持っていると言います。

ジップをストリームすると、明らかにCPU(および時間)がかかります。

は私がディスクに書き込む場合 - それは私がディスクに書き込む場合は

(誰かが「クロール」サイトは、ZIPフォルダまたは何らかの形ファイル、およびすべての一括ダウンロードを見つけることができると仮定して)セキュリティ上の問題となる可能性があり、私は意志zip内のファイルを更新するかどうかをチェックする必要があります。さらに、ファイルの整合性を確認する必要があります。

とにかく - どちらの状況でどのような状況で推奨される方法であるか、これに対するベストプラクティスは何か、その他の洞察力については人々が何を言いたいのか聞きたい。

答えて

1

セキュリティが問題にならない場合は、を正しく実行してください。パブリックWebルート内にファイルを保存しないでください。そうしないと、Webサーバーがこれらのファイルを直接提供しないように構成してください。

途中で、それはあなたが望むものに依存します。同じzipを何度も何度も提供する必要がある場合は、もちろんそれを一度圧縮してディスクに書き込んでください。次回からZipを提供します。これは単純なキャッシュの戦略です。
最新バージョンのzipを持っていることを確認する必要がある場合は、コンテンツのハッシュをいくつかの方法で作成します。たとえば、次の$hash.zipはすでに

  • は、典型的なキャッシュ戦略だ$hash.zip
  • を果たし、それを作成し、存在しない場合(foo.txt, bar.jpg, baz.doc)

  • メイクハッシュ$hash = md5(foo.txt, bar.jpg, baz.doc)
  • を圧縮するファイルの

    1. リスト高価な操作を何度も繰り返さないようにします。

  • +0

    あなたは - すでに何かを学んでいます - 私はCPUを原価計算するたびにファイルを開く必要がある内部CRCを使用するのに馬鹿でした。ファイル名に追加するためにハッシュを使用すると、より経済的になるでしょう。セキュリティに関する「正しいことをやる」ということについてもう少し詳しく説明できますか?どのような配慮が必要ですか? –

    +1

    ファイルに一般にアクセスできないようにしてください。あなたがディスクにそれを書いているからといって誰もそれをダウンロードできるわけではありません。公的にアクセス可能なWebroot *内のディスク*に書き込む場合にのみ当てはまります。 Webroot以外のディスクに書き込んで問題を解決できます。 – deceze

    +0

    これは、適切なアクセス権を持つすべての人が自由にすべてのファイルをダウンロードできるという条件の下で真です。ファイルごとにダウンロードを制限する必要がある場合はどうすればよいですか?許可なしでONEリンクを提供するだけでは、この問題は解決しません(何かが紛失していない限り)。 –

    1

    同じzipファイルを複数回ダウンロードする場合は、それを(ディスクやその他の永続的なストレージに)キャッシュするのが理にかなっています。 zipの内容のハッシュをファイル名の一部(またはその下にデータをキャッシュする識別子)に含めると、キャッシュされた値があなたが提供するものと一致するかどうかはわかりません。

    任意のzipファイルが1回だけダウンロードされる場合は、それを直接ストリーミングする方が理にかなっています。

    +0

    でも、ファイルが同じで、別の名前(ユーザー名や日付の追加など)しか必要ない場合は、「ワンタイムダウンロード」と見なされますか?キャッシング中のセキュリティはどうですか? –

    関連する問題