如果多次打开php://temp(或php://memory)文件,句柄是否指向同一个文件?或者每个句柄都是独特的吗?
我在php文档中找不到答案,所以我要编写一个测试脚本来查找.我认为值得在这里询问,以便其他人可以轻松找到答案.
每个句柄指向一个独立的流.例:
$a = fopen('php://memory', 'w+');
$b = fopen('php://memory', 'w+');
fwrite($a, 'foo');
fwrite($b, 'bar');
rewind($a);
rewind($b);
$a_text = stream_get_contents($a); //=> "foo"
$b_text = stream_get_contents($b); //=> "bar"
fclose($a);
fclose($b);
Run Code Online (Sandbox Code Playgroud)
这没有在任何地方明确记录,但它隐含在流和包装器的文档中.
从流上的官方php文档来看,很明显,对于流的标准情况,每个文件句柄都与它自己的独立流相关联.
在IO流包装器的文档中,它列出了可能的包装器,注意到它们发生时的异常.前三个列出了一个例外(stdin,stdout,stderr):
php:// stdin,php:// stdout和php:// stderr允许直接访问PHP进程的相应输入或输出流.流引用了重复的文件描述符,因此如果打开php:// stdin并稍后关闭它,则只关闭描述符的副本 - STDIN引用的实际流不受影响.
但是没有列出这样的例外php://temp或php://memory.因此,它们可以像普通的独立流一样工作.
此外,这些页面上还有一些评论进一步暗示了这些流的独立性.