php-将文件内容传递给需要文件名的函数

时间:2018-12-23 07:16:38

标签: php

我将文件的内容包含在字符串中。我需要将此文件传递给一个函数,该函数期望参数是文件名而不是内容。完成此操作的最明显且可能最简单的方法是将内容写入临时文件,然后将该文件名传递给函数,并在完成后取消链接文件。

但是,我正在寻找一种不涉及将文件写到文件系统然后再读回的解决方案。在多种情况下我都需要这样做,所以我没有在寻找可以解决特定功能的问题,但更多的是通用方法,该方法适用于任何需要文件名的功能(例如COMPLEX_RADIX_0p32)。

以下是一些想法,但尚不确定如何实现这些想法:

  • 是否可以将内容写入内存中的某个位置,然后 将其作为文件名传递给函数?也许使用 file_get_contents()
  • 是否可以将内容写入管道,然后传递名称 通过管道传递功能?

我对php://memory做了如下简短的概念验证,但没有运气:

php://memory

将有兴趣了解解决此问题的好方法。谷歌搜索还没有为我准备任何东西。

3 个答案:

答案 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