【发布时间】:2010-09-12 01:22:19
【问题描述】:
有没有办法在内存中处理创建的图像(使用 GD 库中的ImagePNG())可以这么说而不需要将临时文件保存到磁盘?我想要实现的基本上是发布创建的图像,并希望尽可能避免创建临时文件。 PHP 只会从服务器输出该 POST 的响应。
谢谢
【问题讨论】:
标签: php
有没有办法在内存中处理创建的图像(使用 GD 库中的ImagePNG())可以这么说而不需要将临时文件保存到磁盘?我想要实现的基本上是发布创建的图像,并希望尽可能避免创建临时文件。 PHP 只会从服务器输出该 POST 的响应。
谢谢
【问题讨论】:
标签: php
那么你需要curl。
来自文档: PHP 支持由 Daniel Stenberg 创建的库 libcurl,它允许您使用许多不同类型的协议连接和通信到许多不同类型的服务器。 libcurl 目前支持 http、https、ftp、gopher、telnet、dict、file 和 ldap 协议。 libcurl 还支持 HTTPS 证书、HTTP POST、HTTP PUT、FTP 上传(这也可以通过 PHP 的 ftp 扩展完成)、基于 HTTP 表单的上传、代理、cookie 和用户+密码身份验证。
在内存中捕获图像并在您可以尝试输出缓冲后使用 curl 发送:
<?php
ob_start();
header('Content-type: image/jpeg');
ImageJpg(...);
$myImage = ob_get_contents();
ob_clean ();
?>
类似的东西?
【讨论】:
ImagePNG()和curl_init()之间的代码,不知道能不能形容得更好。
我尝试了输出缓冲,但在两个小时后放弃了。这对我有用:
首先创建一个临时文件,然后将其传递给 ImagePNG()。之后只需使用文件读取例程读取文件内容并将结果存储在变量中并删除创建的临时文件 (unlink($tmp); )
$tmpfile = tempnam("/tmpdir", "img");
//your name will not clash with another request
imagepng($my_img,$tmpfile);
$handle = fopen($tmpfile, "rb");
$img_file_contents = fread($handle, filesize($tmpfile));
fclose($handle);
unlink($tmpfile); //no accumulation of image files
//now send the $img_file_contents via cURL
【讨论】: