既存の Web ツールのデータ ファイルを解析するラッパーに取り組んでいます。ただし、大きなデータ ファイルを使用しているため、すべてをメモリにロードすることはできないため、小さなチャンクでロードする必要があります。既存の Web ツールは、SimpleXML に似たスタイルのデータを想定しています ($obj->parentnode->childnode->childnode は、文字列または何らかの種類のノード オブジェクトを返します)。ありがたいことに、構造は XML に似ていますが、構文は奇妙です。そして、酌量すべき事情のために、それをまともな形式に翻訳することはできません. そのため、その場でエミュレートする必要があります。
ファイルを見ていくとき、ツリー全体を解析する必要はなく、現在のノードのサブノード名だけを解析する必要があります。各サブノード名と関連するオフセットは、親ノードに格納されます。サブノードのコンテンツにアクセスする必要がある場合、親ノード オブジェクトが複製され、オフセット値が更新され、サブノード オブジェクトは、要求されたサブノードが見つかるまでコンテンツの解析を開始します。
私が持っている質問は次のとおりです。
- 親ノード オブジェクトのクローンを作成すると、子クローンにファイル ハンドルが与えられます。すべてのクローンが同じハンドルを使用し、必要に応じて fseek を使用してファイルをジャンプする必要がありますか (これは非常に大きな場合です)。
- ファイルを閉じる必要がありますか? それともスクリプト実行終了時のガベージコレクションで閉じるのでしょうか?そうしないと、どのような危険に直面しますか?
- クローンごとにハンドルを作成する必要がありますか、それとも 1 つを共有したままにする必要がありますか? その場合、上限はありますか?
- 複製されたオブジェクトが元のオブジェクトへの参照を保持する方法はありますか? オブジェクトのデストラクタでハンドルを閉じている場合、オブジェクトがクローンの場合はおそらく閉じないでください。そして、上向きにトレースできることは、おそらく便利になるかもしれません.