尝试调用方法 imagerotate 时出现 500 内部服务器错误

Posted

技术标签:

【中文标题】尝试调用方法 imagerotate 时出现 500 内部服务器错误【英文标题】:500 Internal server error when trying to call method imagerotate 【发布时间】:2017-05-17 06:50:38 【问题描述】:

我有一个可以在我们当前的 VPS 中完美运行的 php 脚本。但是当我在我们的新 VPS(亚马逊)中运行相同的脚本时,它会出现内部服务器错误。

这个脚本的工作是水平旋转图像。但不确定为什么它会给出内部服务器错误。此外,它没有在 apache 错误日志中记录任何内容。日志记录在 Apache 中打开。所以,我不知道是什么原因造成的。

以下是脚本及其在"$rotated = @imagerotate($dst_img, $angle, 0);" 行的失败

<?php
function RotateJpg($filename = '',$angle = 0,$savename = false)
    header('Content-type: image/png');
    $original   =   @imagecreatefrompng($filename);
    $srcsize = @getimagesize($filename);
    $dest_x = 2000; 
    $dest_y = (2000 / $srcsize[0]) * $srcsize[1]; 
    $dst_img = @imagecreatetruecolor($dest_x, $dest_y);
    @imagecopyresampled($dst_img, $original, 0, 0, 0, 0,$dest_x, $dest_y, $srcsize[0], $srcsize[1]); 
    @imagedestroy($original);
    $rotated    =   @imagerotate($dst_img, $angle, 0);
    @imagedestroy($dst_img);
    if($savename == false) 
        header('Content-Type: image/png');
        @imagepng($rotated);
    
    else
        @imagepng($rotated,$savename);
            
    imagedestroy($rotated);



RotateJpg('source_file',90,'destination_file');
?>

非常感谢您的帮助。

问候,

已编辑

当我添加下面的代码时,它不会给我 500 内部服务器错误,而是给我 200 成功。但是它只是显示没有图像旋转的空白页面。

error_reporting(E_ALL);
ini_set('display_errors', 1);

我已验证服务器上启用了 GD。

【问题讨论】:

阅读您的错误日志。如果没有错误描述,您不会获得帮助。 只要你在每一个单独的函数调用中一直抑制错误,你就会毫无头绪...... 感谢您的回复@u_mulder。但是正如我在运行此脚本时所说的那样,错误没有记录在 apache error_log 中。但是,我已经检查了日志记录是否打开。请查看我编辑的问题。 @jeroen,您的意思是在我的代码中按 Thomas Dutrion 突出显示的 @ 抑制错误吗? 是的。您还应该确保除了图像文件之外没有任何输出发送到浏览器,因此您应该从删除结束 php 标记开始。您还应该删除函数顶部的 header 调用,因为使用第三个参数时不会输出图像。 【参考方案1】:

您绝对应该从代码中删除所有 @(它会禁用错误和警告)。

我的猜测是 GD 在服务器上没有激活。您应该尝试将 GD 添加到您的 php 中。

【讨论】:

我已经通过从代码中删除 @ 来测试它,但仍然是同样的问题。我还检查了服务器上是否启用了 GD。

以上是关于尝试调用方法 imagerotate 时出现 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试在组件内调用控制器方法时出现 Laravel 错误

尝试在另一台服务器上调用 EJB 方法时出现 Websphere 错误

调用共享 WebMethod 时出现未知 Web 方法异常

Android - 调用自定义 View 方法时出现空指针异常

VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决

从 C 调用汇编函数时出现分段错误错误