GD库裁剪图像不起作用

时间:2013-10-08 19:52:14

标签: javascript php gd

我正在尝试使用以下脚本裁剪JPG文件:

if (isset($_POST['crop_attempt'])) {

    echo($_POST['path']);

    $source_img = imagecreatefromjpeg($_POST['path']);
    $dest_img = imagecreatetruecolor($_POST['crop_w'], $_POST['crop_h']);

    imagecopy(

        $dest_img,
        $source_img,
        0,
        0,
        $_POST['crop_l'],
        $_POST['crop_t'],
        $_POST['crop_w'],
        $_POST['crop_h']

    );

    imagejpeg($dest_img, $_POST['path']);

    imagedestroy($dest_img);

    imagedestroy($source_img);
}

我通过ajax发送以下Javascript对象中的$ _POST变量:

var db_data = {
        left        :   db.offset().left - img_pos.left * ratio,
        top         :   db.offset().top - img_pos.top * ratio,
        width       :   db.width() * ratio,
        height      :   db.height() * ratio,
        crop_attempt:   true,
        path        :   $('._jsImageToCrop').attr('src')
    };

值已全部通过,我已经在PHP脚本中回显了它们,我认为这个问题与imagecreatefromjpeg()函数有关,任何对GD库有更多经验的人都可以提供任何帮助

感谢。

1 个答案:

答案 0 :(得分:0)

考虑PHP将从AJAX调用中获取什么 - 客户端元素的src属性,类似/some/subdir/on/your/site/kittens.jpg。您将该值直接发送到imagecreatefromjpeg(),这将在您的服务器上查找/some/subdir/....,这不存在...因为它缺少您网站的DOCUMENT_ROOT,这将使实际路径{{1 }}

在这样的文件系统操作中,切勿使用外部数据。虽然您只是将它传递给imagecreatefromjpeg(),但它仍然不安全,因为您允许用户直接提供完整路径,这意味着他们可以在您的服务器上加载任何图像,无论他们知道路径。