php:// memory&php:// temp; 在后续句柄创建时保留流数据

Dan*_*ugg 1 php memory temporary stream handle

这个问题与我关于这个问题的新发现密切相关.

有没有什么办法来保存的数据流中的数据php://memoryphp://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
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,无论如何,在创建新句柄时,是否还要强制现有数据保持在流中?

(后者调用fpassthru()当然会转储,hello world因为这是可能的)

Kin*_*nch 6

打开其中一个伪流php://tempphp://memory始终打开一个新流,这意味着,您以这种方式打开的每个流都是唯一的.因此,您无法读取先前写入另一个流的内容.

  • 问题(*如果你指的是链接问题*)是`zip_open()`需要一个有效的URI(*方案似乎并不重要,但我不是那么远*)而不是包含原始二进制数据的句柄/变量.我试图"欺骗"它来读取`php:// memory`流,它将包含自包含,编译暂停的归档数据的原始二进制转储. (3认同)