在读取/写入php://临时流时遇到问题

Hor*_*Kol 22 php stream

php://temp在PHP 5.3.2中读取和编写流时遇到了麻烦

我基本上有:

file_put_contents('php://temp/test', 'test');
var_dump(file_get_contents('php://temp/test'));
Run Code Online (Sandbox Code Playgroud)

我得到的唯一输出是 string(0) ""

我不应该回到我的'测试'吗?

dec*_*eze 21

php://temp它不是文件路径,它是一种伪协议,在使用时始终会创建一个新的随机临时文件.在/test实际上被完全忽略.php://temp包装器接受的唯一额外"参数" 是/maxmemory:n.您需要将文件句柄保持在打开的临时流中,否则它将被丢弃:

$tmp = fopen('php://temp', 'r+');
fwrite($tmp, 'test');
rewind($tmp);
fpassthru($tmp);
fclose($tmp);
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/wrappers.php.php#refsect1-wrappers.php-examples


OZ_*_*OZ_ 9

每次,当你使用fopen来获取处理程序时,php:// temp的内容都会被刷新.使用rewind()和stream_get_contents()来获取内容.或者,使用普通的cachers,如APC或memcache :)

  • 作为旁注,您可以使用 `stream_get_contents($stream, -1, 0)` 隐式地`rewind`。这将从头开始读取整个流。 (3认同)