【问题标题】:PHP $_FILES Array ManipulationPHP $_FILES 数组操作
【发布时间】:2012-12-25 11:51:33
【问题描述】:

我正在使用表单上传图片。图片上传后,我们将能够看到上传的图片。然后我使用JCrop (http://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数组可以更改吗?

【问题讨论】:

  • 我不明白为什么不会。但是你可以随时复制它然后做你想做的事。

标签: php image file crop jcrop


【解决方案1】:

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

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

在此处获取您的tmp 路径和copy 图像。

类似于copy($newImage, /tmp) - 从php.ini 获取您的 tmp 文件夹路径

【讨论】:

  • 谢谢!这是我一直在寻找的解决方案。我以前使用move_uploaded_file,而我应该使用renamecopymove_uploaded_file只能应用于通过POST方式上传的文件。
【解决方案2】:

更改超全局变量不是一个好主意,您最好将其复制到另一个变量中,然后做任何您想做的事情。

【讨论】:

  • 详细说明@Genesor,_FILES 数组是根据您的文件生成的。您最好构建自己的变量: $size = $sizes[0] * $sizes[1];
  • 我知道这可能不是最好的方法,但我肯定想编辑 FILES 数组如果可能。这是因为稍后的某些函数将处理 FILES 数组,而不是我创建的任何其他变量。我想看看是否可以以这种方式解决它,否则我将不得不弄清楚这个其他功能在哪里/如何工作。
  • 没有什么能阻止你,如果你不修改 $_FILES 就不能做你想做的事,那就试着修改它。
猜你喜欢
  • 1970-01-01
  • 2017-12-23
  • 2014-03-23
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
相关资源
最近更新 更多