如何通过PHP获取图像/ png内容
这是我的第一篇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,我可以使用它来访问已发布的图像内容,还是有其他解决方案? 解析度 $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://输入来检索它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |