Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么时候发生php://temp 是否多次打开?_Php_File - Fatal编程技术网

什么时候发生php://temp 是否多次打开?

什么时候发生php://temp 是否多次打开?,php,file,Php,File,如果php://temp(或php://memory)文件被多次打开,句柄是否指向同一个文件?或者每个句柄都是唯一的 我在php文档中找不到答案,所以我将继续。我觉得在这里询问是值得的,这样其他人就可以很容易地找到答案。每个句柄都指向一个独立的流。例如: $a = fopen('php://memory', 'w+'); $b = fopen('php://memory', 'w+'); fwrite($a, 'foo'); fwrite($b, 'bar'); rewind($a); re

如果
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);
这在任何地方都没有明确的文档记录,但在流和包装器的文档中是隐式的

一般来说,对于流的标准情况,每个文件句柄都与它自己的独立流相关联

在中,它列出了可能的包装器,在异常发生时记录它们。前三个(stdin、stdout、stderr)列出了一个例外情况:

php://stdin, php://stdout 及php://stderr 允许直接访问 PHP进程的相应输入或输出流。小溪 引用重复的文件描述符,因此如果打开php://stdin 和 稍后关闭它,您将只关闭描述符的副本 STDIN引用的流不受影响

php://temp
php://memory
。因此,它们将像正常的独立流一样工作

此外,这些页面上的一些注释进一步暗示了这些流的独立性。

我的测试代码:

$f1 = fopen('php://temp', 'rw');
$f2 = fopen('php://temp', 'rw');

fputs($f1, "File One");
fputs($f2, "File Two");

rewind($f1);
echo "First line from F1: ";
echo fgets($f1) . PHP_EOL;
echo "Second line from F1: ";
echo fgets($f1) . PHP_EOL;
fclose($f1);

rewind($f2);
echo "First line from F2: ";
echo fgets($f2) . PHP_EOL;
echo "Second line from F2: ";
echo fgets($f2) . PHP_EOL;
fclose($f2);
结果:

First line from F1: File One
Second line from F1: 
First line from F2: File Two
Second line from F2: 

的确刚刚测试并发现-有任何指向某个地方记录的链接吗?至少没有说任何其他内容,但因为这不是你的答案,好吧,你需要检查:)@hakre是的,这似乎是它应该做的-但我认为它应该记录在某个地方。@TimLytle,它是记录的。我会用相关的文档更新我的帖子。@BenLee谢谢你的解释。你认为文件句柄是用来做什么的?@hakre但是如果我打开
/data/test.txt
两次,我会使用同一个文件-对吗?它也没有文档记录,对吗?;)@hakre在大多数其他情况下,这似乎是显而易见的——文件系统中的文件将是相同的数据,
php://output
将是同一个流,在这种情况下,它似乎应该是不同的(每个“开放”都是唯一的),但由于它是不同的,我认为这不是显而易见的。我不介意测试,但我想如果其他人对同样的事情感到好奇,这会很好。我想可以问一下,很高兴看到你的反馈:)