1

この質問は、この質問に関する私の新しい発見と密接に関連しています。

php://memoryハンドル間またはハンドル間のストリーム内データを保持する方法はありphp://tempますか? 前述のストリームを後で開くと、既存のデータが消去されることを読みました(どこかで手に入れることはできません)。

$mem1 = fopen('php://memory', 'r+');
fwrite($mem1, 'hello world');
rewind($mem1);
fpassthru($mem1); // "hello world"

$mem2 = fopen('php://memory', 'r+');
rewind($mem2);
fpassthru($mem2); // empty

繰り返しになりますが、私の質問は、既存のデータへの新しいハンドルを作成するときに、既存のデータを強制的にストリームに保持する方法はありますか?

これが可能であれば、後者の呼び出しfpassthru()はもちろんダンプhello worldします)

4

3 に答える 3

6

疑似ストリームの1つを開くphp://tempか、php://memory常に新しいストリームを開きます。つまり、この方法で開くすべてのストリームは一意です。そのため、以前に別のストリームに書き込んだストリームのコンテンツを読み取ることはできません。

于 2011-08-02T19:18:36.147 に答える
0

If you need in-memory virtual stream that persists data you can use https://github.com/mikey179/vfsStream - although it's mainly used for testing I/O operations it should fulfill your requirements - it stores data within internal objects which are identified by virtual URLs so you can access same data in memory by accessing same URL.

于 2013-10-23T12:42:35.173 に答える
0

ハンドラーは一意であるため、ハンドラーを渡すか、(神は禁じられています) ハンドラーをグローバルに保つ必要があります

$GLOBALS['my_global_memory_stream']=fopen('php://memory','r+');

于 2015-09-24T15:08:00.477 に答える