php-将文件内容传递给';What’需要一个文件名

php-将文件内容传递给';What’需要一个文件名,php,Php,我有一个字符串文件的内容。我需要将这个文件传递给一个函数,函数希望参数是文件名,而不是内容。要做到这一点,最明显也是最简单的方法是将内容写入临时文件,然后将该文件名传递给函数,并在完成后取消该文件的链接 但是,我正在寻找一种解决方案,它不涉及将文件写入文件系统,然后再将其读入。我在很多情况下都需要这样做,所以我不是在寻找一个特定函数的变通方法,而是一个更通用的方法,它适用于任何需要文件名的函数(例如file\u get\u contents()) 以下是一些想法,但还不确定如何实现这些想法:

我有一个字符串文件的内容。我需要将这个文件传递给一个函数,函数希望参数是文件名,而不是内容。要做到这一点,最明显也是最简单的方法是将内容写入临时文件,然后将该文件名传递给函数,并在完成后取消该文件的链接

但是,我正在寻找一种解决方案,它不涉及将文件写入文件系统,然后再将其读入。我在很多情况下都需要这样做,所以我不是在寻找一个特定函数的变通方法,而是一个更通用的方法,它适用于任何需要文件名的函数(例如
file\u get\u contents()

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

  • 是否可以将内容写入内存中的某个位置,然后 将其作为文件名传递给函数?也许是使用
    php://memory
  • 是否可以将内容写入管道,然后传递 管道到功能
我用
php://memory
如下所示,但运气不佳:

$data = "This is some file data.\n";
file_put_contents( 'php://memory', $data );
echo file_get_contents( 'php://memory' );

我想知道解决这个问题的好方法。谷歌还没有为我找到任何东西。

为什么不使用/tmp/目录中的文件呢?像这样:

<?php

$filename = '/tmp/mytmpfile';
$data = "This is some file.\n";
file_put_contents($filename, $data);
$result = file_get_contents($filename);
var_dump($result);

为什么不使用/tmp/目录中的文件?像这样:

<?php

$filename = '/tmp/mytmpfile';
$data = "This is some file.\n";
file_put_contents($filename, $data);
$result = file_get_contents($filename);
var_dump($result);

好吧,正如你说你不想使用文件一样,你不应该使用file\u get\u 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

好吧,正如你说你不想使用文件一样,你不应该使用file\u get\u 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

这主要取决于目标函数如何处理文件名。如果幸运的话,您可以:


这主要取决于目标函数如何处理文件名。如果幸运的话,您可以:


你避开了房间里的大象。你用的是什么功能?看来如果你打开php://memory 两次之后,它将是不同的内容。您可能可以使用,但这听起来有点像XY问题。我的意思是,如果你知道字符串的内容来自一个文件,为什么不直接使用该文件?@Andreas我不是在回避这个问题,我想说的是,我正在寻找一种通用的解决方案,它可以处理任何需要文件名的函数。在这个特定的例子中,我正在使用
curl\u file\u create()
,但我不确定这是否相关。@AlexHowansky“如果您知道字符串的内容来自文件”-在这个特定的例子中,文件的内容被接收到API中,因此磁盘上没有我可以访问的文件,仅将内容作为字符串显示。我想将这些数据传递给一个函数,该函数需要一个文件名,而不必首先将其写入磁盘(这似乎是一种资源浪费)。你用的是什么功能?看来如果你打开php://memory 两次之后,它将是不同的内容。您可能可以使用,但这听起来有点像XY问题。我的意思是,如果你知道字符串的内容来自一个文件,为什么不直接使用该文件?@Andreas我不是在回避这个问题,我想说的是,我正在寻找一种通用的解决方案,它可以处理任何需要文件名的函数。在这个特定的例子中,我正在使用
curl\u file\u create()
,但我不确定这是否相关。@AlexHowansky“如果您知道字符串的内容来自文件”-在这个特定的例子中,文件的内容被接收到API中,因此磁盘上没有我可以访问的文件,仅将内容作为字符串显示。我希望将此数据传递给需要文件名的函数,而不必首先将其写入磁盘(似乎是浪费资源)。正如问题中所述,我希望避免将数据写入文件系统,而只是将其重新读取。@NickCoons我添加了一个没有临时文件的解决方案。如问题中所述,我希望避免写入文件系统,而只是重新读取。@NickCoons我添加了一个没有临时文件的解决方案。在使用此方法时,我可以向需要文件名的函数(如
file\u get\u contents()
)传递什么值?在使用此方法时,我可以向函数传递什么值(如
file\u get\u contents()
)需要文件名吗?这看起来很有希望。以下是关于示例类外观的文档供参考:我只是使用示例编写了一个概念证明,并实现了一个基本的
stream\u stat()
函数(需要
file\u get\u contents()
)它工作得很好,谢谢!这看起来很有希望。作为参考,这里是关于示例类的文档:我刚刚用这个示例编写了一个概念证明,并实现了一个基本的
stream\u stat()
函数(file\u get\u contents()
所需),它工作得很好,谢谢!