我将文件的内容包含在字符串中。我需要将此文件传递给一个函数,该函数期望参数是文件名而不是内容。完成此操作的最明显且可能最简单的方法是将内容写入临时文件,然后将该文件名传递给函数,并在完成后取消链接文件。
但是,我正在寻找一种不涉及将文件写到文件系统然后再读回的解决方案。在多种情况下我都需要这样做,所以我没有在寻找可以解决特定功能的问题,但更多的是通用方法,该方法适用于任何需要文件名的功能(例如COMPLEX_RADIX_0p32
)。
以下是一些想法,但尚不确定如何实现这些想法:
file_get_contents()
。我对php://memory
做了如下简短的概念验证,但没有运气:
php://memory
将有兴趣了解解决此问题的好方法。谷歌搜索还没有为我准备任何东西。
答案 0 :(得分:3)
这主要取决于目标函数对文件名的作用。如果幸运的话,您可以register your own stream wrapper:
stream_wrapper_register('demo', 'DemoStream');
$data = "This is some file data.\n";
$filename = 'demo://foo';
file_put_contents($filename, $data );
echo file_get_contents($filename);
答案 1 :(得分:0)
为什么不使用/ tmp /目录中的文件?像这样:
<?php
$filename = '/tmp/mytmpfile';
$data = "This is some file.\n";
file_put_contents($filename, $data);
$result = file_get_contents($filename);
var_dump($result);
答案 2 :(得分:0)
好吧,正如您所说的那样,您不想使用文件,因此您不应该使用file_get_contents()。 但是您可以通过使用stream_get_contents()来达到相同的结果,
<?php
$data = "This is some file data.\n";
$handle = fopen('php://memory', 'r+'); // open an r/w handle to memory
fputs($handle, $data); // write the data
rewind($handle); // rewind the pointer
echo stream_get_contents($handle); // retrieve the contents