【问题标题】:How can I copy a file content into a temporary file in PHP? [duplicate]如何将文件内容复制到 PHP 中的临时文件中? [复制]
【发布时间】:2014-05-13 14:13:59
【问题描述】:

我试过了:

$temp = tmpfile();
file_put_contents($temp,file_get_contents("$path/$filename"));

但我收到此错误:“警告:file_put_contents() 期望参数 1 为字符串,”

如果我尝试:

echo file_get_contents("$path/$filename");

它以长字符串形式返回屏幕文件内容。 我哪里错了?

【问题讨论】:

  • tmpfile — Creates a temporary file 并返回一个文件指针而不是字符串
  • 使用tempnam而不是tmpfile,它返回字符串文件名而不是资源。
  • 我在想参数列表是从零开始的

标签: php temporary-files


【解决方案1】:

在您给出的示例中,您需要tempnam() 而不是tmpfile()

  • tempnam() 创建一个临时文件并将其路径作为字符串返回。然后,您可以将该字符串传递到 file_put_contents。完成后,您必须记住手动删除临时文件。

  • tmpfile() 创建一个临时文件并返回一个文件资源/指针以用于fwrite() 和其他文件操作函数。另外,一旦脚本执行结束,tmpfile()创建的临时文件会被自动删除。


这是您使用 tempnam() 而不是 tmpfile() 的示例脚本:

$temp = tempnam(sys_get_temp_dir(), 'TMP_');

file_put_contents($temp, file_get_contents("$path/$filename"));

【讨论】:

  • 注意!在tempnam() 的情况下,您需要自己删除文件,以防您不再需要它,因为它不会自动完成。
  • @alkaponey 没错,使用简单的unlink($temp); 即可删除临时文件。
  • copy("$path/$filename", $temp) 会使用更少的 CPU 和内存资源。
【解决方案2】:

tmpfile() 在读写 (w+) 模式下创建一个具有唯一名称的临时文件,并返回一个文件句柄以与 fwrite 一起使用。

$temp = tmpfile();
fwrite($temp, file_get_contents("$path/$filename"));

文件在关闭时自动删除(例如,通过调用 fclose(),或者当没有对 tmpfile() 返回的文件句柄的剩余引用时),或者当脚本结束时。看看php ref

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2011-08-12
    • 1970-01-01
    • 2013-10-08
    • 2020-10-22
    • 2014-04-03
    相关资源
    最近更新 更多