我正在尝试使用以下脚本裁剪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库有更多经验的人都可以提供任何帮助
感谢。
答案 0 :(得分:0)
考虑PHP将从AJAX调用中获取什么 - 客户端元素的src
属性,类似/some/subdir/on/your/site/kittens.jpg
。您将该值直接发送到imagecreatefromjpeg()
,这将在您的服务器上查找/some/subdir/....
,这不存在...因为它缺少您网站的DOCUMENT_ROOT,这将使实际路径{{1 }}
在这样的文件系统操作中,切勿使用外部数据。虽然您只是将它传递给imagecreatefromjpeg(),但它仍然不安全,因为您允许用户直接提供完整路径,这意味着他们可以在您的服务器上加载任何图像,无论他们知道路径。