【问题标题】:PHP further process result of ImagePNG() without saving to disk?PHP 进一步处理 ImagePNG() 的结果而不保存到磁盘?
【发布时间】:2010-09-12 01:22:19
【问题描述】:

有没有办法在内存中处理创建的图像(使用 GD 库中的ImagePNG()可以这么说而不需要将临时文件保存到磁盘?我想要实现的基本上是发布创建的图像,并希望尽可能避免创建临时文件。 PHP 只会从服务器输出该 POST 的响应。

谢谢

【问题讨论】:

    标签: php


    【解决方案1】:

    那么你需要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 ();
    
    ?>
    

    类似的东西?

    【讨论】:

    • 谢谢,我知道如何将其输出回屏幕(到浏览器),但我需要将创建的图像发布到 POST(通过表单上传到不同的服务器)并输出该 POST 的响应。脚本将通过 PHP-CLI (cronjob) 运行,因此不会与 Web 浏览器交互。
    • @Andrew 使用 curl 编辑了我的答案。
    • 再次感谢。我知道如何使用卷曲。问题不在于 POST 本身,而是如何将图片放入变量以与 cURL 一起使用,而无需将其存储在磁盘上。也就是ImagePNG()curl_init()之间的代码,不知道能不能形容得更好。
    • @Andrew 如何使用输出缓冲(ob_start 等)在变量中捕获您的输出,然后连接到另一台服务器并将文件提供给它?
    【解决方案2】:

    我尝试了输出缓冲,但在两个小时后放弃了。这对我有用:

    首先创建一个临时文件,然后将其传递给 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
    

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 2013-01-17
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 2015-05-16
      相关资源
      最近更新 更多