PHP:是否可以从文件内容(字符串)创建SplFileObject对象?

6

例如:

$contents = file_get_contents(image.png);

可以从$contents创建SplFileObject对象吗?
谢谢!

1
也许你应该澄清一下为什么不想使用 new SplFileObject('image.png'); - goat
由于我只有文件内容,我知道finfo有file_buffer方法可以打开字符串,我想知道SplFileObject是否有类似的方法或如何将字符串转换为字符串缓冲区。 - Eathen Nutt
1个回答

17

PHP有一些特殊流包装器,可以让您重新使用各种文件系统功能。

$contents = 'i am a string';
$file = 'php://memory'; //full memory buffering mode
//$file = 'php://temp/maxmemory:1048576'; //partial memory buffering mode. Tries to use memory, but over 1MB will automatically page the excess to a file.
$o = new SplFileObject($file, 'w+');
$o->fwrite($contents);

你并不需要使用 SplFileObject 去使用那些包装器;相反,你可以使用 fopenfwrite


1
我曾试图将内容写入 php://temp,然后作为 SplFileObject 读取,但是您的代码显示了一个非常重要的问题:在 SplFileObject 中创建包装器后,需要先将内容写入该包装器。 - Benj
1
@Benj,您可以按其ID引用打开的文件描述符。例如 $fp = fopen('php://temp', 'w'); $id = (int) $fp; 然后使用 new SplFileObject("php://fd/$id", 'r') 可能有效进行读取。一些信息:http://php.net/manual/en/wrappers.php.php - goat
@goat 谢谢你提供的信息,也许将来会有用。 - Benj
@goat 我的一个依赖包以相同的方式保存文件并返回 $o,但是当我尝试使用该文件下载/保存时,得到的是空文件。你能帮我找出原因吗? - Mira Thakkar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接