加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何通过PHP获取图像/ png内容

发布时间:2020-12-13 17:10:57 所属栏目:PHP教程 来源:网络整理
导读:这是我的第一篇Stack Overflow帖子,如果我使用了不正确的格式或约定,请原谅我.我正在尝试编写一个测试场景,它从网页POST(multipart / form-data)接收png图像,剥离已发布的图像并将其作为Content-Type:image / png转发给第三方. 我有一个php文件(catcher.php
这是我的第一篇Stack Overflow帖子,如果我使用了不正确的格式或约定,请原谅我.我正在尝试编写一个测试场景,它从网页POST(multipart / form-data)接收png图像,剥离已发布的图像并将其作为Content-Type:image / png转发给第三方.

我有一个php文件(catcher.php),它是转发图像的收件人. Post.php,将上传的图像发布到catcher.php的php文件如下:

<?php
    $img = imagecreatefrompng($_FILES['myfile']['tmp_name']);
    imagepng($img);
    $opts = array(
        'http'=>array(
            'method'=>"POST",'content'=>$img,'header'=>"Content-Type: image/pngrn"               
        )
    );

    $context = stream_context_create($opts);
    file_get_contents( "http://localhost/catcher.php",false,$context);
?>

Post.php从发布为multipart / form-data的网页上获取文件很好,但是我不确定如何访问catcher.php中的image / png内容.

我的问题是,在catcher.php中,我如何访问图像内容?我尝试过$_POST [‘content’]并获得以下错误:“Undefined index:content”.所以我知道我不是在寻找正确的数据.是否有一个特定的超全局变量,如$_POST或$_REQUEST,我可以使用它来访问已发布的图像内容,还是有其他解决方案?

解析度
我能够使用以下catcher.php代码找到我要查找的结果:
????

$input = fopen("php://input","+r");
$destination = fopen($target_path,'w');

stream_copy_to_stream($input,$destination);

fclose($input);
fclose($destination);
?>

感谢Marc和Brenden的快速回复!

解决方法

imagepng($img)立即输出包含PNG的二进制垃圾.它没有被捕获到变量中.你实际发布的是一个字符串,可能是“GD Resource#7”或类似内容.

整个imagepng()位无论如何都是无用的 – 您将PNG解码为内存中表示,然后再次尝试重新编码为PNG.毫无意义的内存浪费,因为文件已经存在于磁盘上.你可以完成以下任务:

<?php
if ($_FILES['myfile']['error'] !== UPLOAD_ERR_OK) {
   die("Upload failed with error code " . $_FILES['myfile']['error']);
}

$opts = array(
    'http'=>array(
        'method'=>"POST",'content'=> file_get_contents($_FILES['myfile']['tmp_name']),'header'=>"Content-Type: image/pngrn"               
    )
);

$context = stream_context_create($opts);
file_get_contents( "http://localhost/catcher.php",$context);

请注意添加检查上传成功 – 假设上传成功将导致您感到悲伤.

话虽这么说,你也没有做正确的POST文件上传.为了实现这一点,您必须使用< input type =“file”>实际模拟完整的HTML表单. present,和enctype =“multipart / form-data”等等.您所做的只是将原始PNG发送到服务器.

您可以通过在catcher脚本中读取php://输入来检索它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读