PHP $ _FILES数组操作

时间:2013-01-10 23:13:00

标签: php image file crop jcrop

我正在使用表单上传图片。上传图片后,我们将能够看到上传的图片。然后我使用JCrophttp://deepliquid.com/content/Jcrop.html)来允许裁剪此图片。我们假设我只关心JPEG图像。然后我准备提交表格。

在表单提交后,我将执行一些图像处理并裁剪图像。但是,我想将此裁剪图像的信息放回$_FILES数组中(这是必须的)。我将如何在PHP脚本中操作此$_FILES数组?

这是我尝试过的,但不起作用。

$upload_dir = '/Users/user/Sites/tmp/';

$file_name = $_FILES['image']['name'];
$file_name = "cropped_".$file_name;
$tmp_name = $_FILES['image']['tmp_name'];
$file_size = $_FILES['image']['size'];

$src_file = imagecreatefromjpeg($tmp_name);

list($width,$height) = getimagesize($tmp_name);

// Creates cropped image
$tmp = imagecreatetruecolor($_POST['w'], $_POST['h']);
imagecopyresampled($tmp, $src_file, 0, 0, $_POST['x'], $_POST['y'], $_POST['w'], $_POST['h'], $_POST['w'], $_POST['h']);
$small_pic_file_path = $upload_dir.$file_name;

imagejpeg($tmp,$small_pic_file_path,85);
$message = "<img src='http://localhost/~user/tmp/".$file_name."'>";

$_FILES['image']['name'] = $file_name;
$_FILES['image']['type'] = "image/jpeg";
// unlink($tmp_name);
// if(!move_uploaded_file($upload_dir.$file_name, $tmp_name)) echo "Failure Moving Image";
$_FILES['image']['tmp_name'] = $upload_dir.$file_name;
$_FILES['image']['error'] = 0;
$sizes = getimagesize($upload_dir.$file_name);
$_FILES['image']['size'] = ($sizes['0'] * $sizes['1']);

允许更改此$_FILES数组吗?

2 个答案:

答案 0 :(得分:2)

仅在全局数组中更改将不起作用。您只是说$_FILES['image']['tmp_name']将是新创建的。但是tmp位置具有相同的旧文件。

但您必须更新/tmp文件夹中的图片。

获取tmp路径和copy图片。

有点copy($newImage, /tmp) - 从php.ini

获取您的tmp文件夹路径

答案 1 :(得分:0)

改变一个超级全局并不是一个好主意,你最好把它复制到另一个变量中,然后再做你想做的事。