PHP がファイルを受信するときのいくつかの問題 (高い同時実行性を考慮)

WBOY
リリース: 2016-06-23 13:41:04
オリジナル
923 人が閲覧しました

最近、MFC で書かれた大きなファイルをアップロードするためのツールを作成していますが、PHP 側でいくつかの問題が発生しました。私のアイデアは、MFC で大きなファイルを切り取り、HTTP 経由で小さなファイルを PHP 側に連続的にアップロードするというものです。その後、PHP はこれらのファイルを結合しましたが、いくつかの問題が発生しました。
1. PHP はファイルをファイルの末尾に追加して結合するため、2 人が同じ名前のファイルをアップロードすると、ファイルがブロックされているかどうかが不明瞭になります。アップロードされたばかりの恥ずかしさは誰のものです。 (個人的には競合を避けるためにロックを使用することを検討していますが、一方がアップロードしているときに、もう一方が自分のアップロードを待ってからアップロードすることはできません。)
2. ユーザーが途中でアップロード共有を閉じた場合、一時ファイルが作成されます。このゴミをクリーンアップするには別の常駐プログラムを作成する必要がありますか?
アドバイスをお願いします。


ディスカッションへの返信 (解決策)

アイデア: ファイル データの各小さな部分の前に複数の識別子を追加して、それらを同じファイルとして識別できます。固定長にして uuid を生成するのが最善です。

断片化されたファイル名は 1 つだけですか??。

たとえば、フォーマット
uid: ファイルの一意の ID??
num: このファイルのフラグメントの量
curr: 前のフラグメントの順序

uid_num_curr

例: 10000_10_01

ははは解決してください2人 同じ名前のファイルをアップロードする場合、今アップロードしたファイルブロックが誰のものか分からないという恥ずかしさがあります。 質問?明らかに違います!

チャンクアップロードとチャンクダウンロードの原理は同じです。データ ソースは、ファイル名、ファイル長、各ブロックの順序、識別、長さ、検証情報、およびデータの整合性とアセンブリのチェックに関連するその他のデータ ブロックを含むレコードを提供する必要があります。通常、受信側はそれをファイルの形式で保存し、使用します。
ブロックを識別する情報も、チャンクで送信されるデータ ブロックの前に追加する必要があります。受信者が情報を分離し、情報ファイルと比較した後、データ ファイルを組み立てることができます

さらに、結合されたファイルの末尾にファイルが追加されています。実装形式も間違っています
http のステートレスな性質により、順番に送信された一連のファイルが順番に受信されることは保証できません

結合されたファイル読み取り/書き込みモード (rb+) で開かれたファイル内にある必要があります。指定されたオフセットから書き込みます

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート