PHP GD 库无法处理 post 上传的图片

发布于 2022-09-01 17:29:55 字数 4009 浏览 37 评论 0

代码如图:

<?php
    $target=imagecreatefrompng($_FILES['test']['tmp_name']);
    header("Content-type: image/png;");
    imagepng($target); 
    imagedestroy($target);

运行环境:

Win64-apache2.4.9-php5.5.12
Ubuntu64-apache2.4.7-php5.5.9

我百度/Google 查了很多,可以确定:

  • GD库已经开启(成功处理验证码并输出)

  • 文件夹权限正常(读写文件成功)

  • <?php 前没有内容

尝试过这些:

  • 直接输出上传的文件,失败

<?php
    $target=imagecreatefrompng($_FILES['test']['tmp_name']);
    header("Content-type: image/png;");
    imagepng($target); 
    imagedestroy($target);
  • 读取服务端文件并输出,成功

<?php
    $target=imagecreatefrompng('./interface/render_pic_v1/templates/bitcard/front.png');
    header("Content-type: image/png;");
    imagepng($target); 
    imagedestroy($target);
  • 重命名上传的文件并输出,失败

<?php
    $target_path=$_FILES['test']['tmp_name'].'.png';
    move_uploaded_file($_FILES['test']['tmp_name'],$target_path);
    $target=imagecreatefrompng($target_path);
    header("Content-type: image/png;");
    imagepng($target); 
    imagedestroy($target);
  • 读取上次会话上传的文件并输出,成功

<?php
//    $target_path=$_FILES['test']['tmp_name'].'.png';
    $target_path="C:\\Program Files (x42)\\WampServer\\tmp\\phpB808.tmp.png";
//    move_uploaded_file($_FILES['test']['tmp_name'],$target_path);
    $target=imagecreatefrompng($target_path);
    header("Content-type: image/png;");
    imagepng($target); 
    imagedestroy($target);

测试工具是 Chrome 的 Postman:

  • 成功截图:

clipboard.png

-失败截图:

clipboard.png

折腾过的全部代码:

<?php
//    header("Content-type: text/html; charset=utf-8");
//    $x=$interface_path.'/templates/bitcard/front.png';
//    $interface_path='./interface/render_pic_v1';
//    $x='./interface/render_pic_v1/templates/bitcard/front.png';
//    $target=imagecreatefrompng($x);
//    require $interface_path.'/functions_lib/image_process.php';

//    copy($_FILES['test']['tmp_name'],'./interface/render_pic_v1/result/test.png');
//    rename($_FILES['test']['tmp_name'],$_FILES['test']['tmp_name'].'.png');
//    $target_path='./interface/render_pic_v1/result/'.md5_file($_FILES['test']['tmp_name']).'-'.time().'-'.$_FILES['test']['name'];
//    move_uploaded_file($_FILES['test']['tmp_name'],$target_path);
//    $target=imagecreatefrompng($target_path);
//    $target=imagecreatefrompng($_FILES['test']['tmp_name'].'.png');
//    $target=imagecreatefrompng($_FILES['test']['tmp_name']);
//    if($target=fopen($_FILES['test']['tmp_name'])){echo "string2";}
//    $source=imagecreatefrompng('C:\\Program Files (x42)\\WampServer\\tmp\\phpE925.tmp.png');
//    $source=imagecreatefrompng('/var/www/html/bit_if/temp/phpniambi.png');
//    $target=imagecreatefrompng('./interface/render_pic_v1/result/test.png');
//    $target=imagecreatefrompng('./interface/render_pic_v1/result/test');
//    var_dump($_FILES['test']['tmp_name']);
//    var_dump($_FILES['test']['tmp_name'].'.png');
//    $position_target=array('x'=>330,'y'=>339);
//    $position_source=array('x'=>0,'y'=>0,'w'=>288,'h'=>402);
//    setPicture($target, $source, $position_target, $position_source);

//    header("Content-type: image/png; charset=utf-8");
//    header("Content-type: image/png;");
//    imagepng($target); 
//    imagedestroy($target);
    
//    $target=imagecreatefrompng($_FILES['test']['tmp_name']);
//    var_dump($_FILES);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

澉约 2022-09-08 17:29:55

问题基本就是$_FILES的路径和绝对路径有区别,建议你可以把$_files打印出来看看

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文