我正在开发(本地,mac)图像(我知道,pdf文件不是图像)上传表单。我的测试用例有以下文件:
test.jpg
, 500x500px, 8kb, 绿色方块tester.jpg
, 6000x6000px, 426kb, 绿色方块Screen Shot 2013-09-23 at 12.12.29 .png
, 3360x2100px, 2.3MB, 截图P1020521.JPG
, 4000x3000px, 2.7MB, 来自小型相机的图片optimal web design.pdf
, 612×792, 46 页, 733kb, pdf 文件
表单的目的是上传图像,检查尺寸并(如有必要)将图像调整为最大宽度 1200 或最大高度 800 像素,重命名图像并保存文件。
当我尝试上传上述文件时,我得到以下结果:
test.jpg
以应有的方式处理(我在上传文件夹中找到了一个重命名的 1200x1200 文件)tester.jpg
,不显示任何输出和调整大小,但我在上传文件夹中找到了一个重命名的 6000x6000 文件Screen Shot 2013-09-23 at 12.12.29 .png
is_uploaded_file()
检查失败P1020521.JPG
is_uploaded_file()
检查失败optimal web design.pdf
以应有的方式处理(当然没有调整大小,php调整大小错误),我在我的上传文件夹中找到了一个重命名的pdf文件
为了调整我的图像大小,我使用了这个类,我以前用过这个类,它就像一个魅力。
我不明白为什么某些文件按应有的方式处理,而其他文件则未通过is_uploaded_file()
检查。我在这里缺少一些基本设置吗?
我已经搜索了这个站点并找到了一个可能的解决方案,if(is_uploaded_file(realpath($_FILES['file']['tmp_name']))){
但是那个没有解决。
它只是几行简单的代码,我不明白为什么它适用于某些文件,但在其他文件上却失败了。
这是我的表格:
<script>
$(document).ready(function(){
$('input:file').change(function(){
$('form').submit();
});
});
</script>
[..]
<form id="inline-upload-form" method="POST" action="process.image-upload.php" enctype="multipart/form-data">
<fieldset>
<legend id="main-form-legend">Instellingen
<div>
<input type="file" name="file" id="file" class="defaultInput">
</div>
</fieldset>
</form>
process.image-upload.php:
<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
$dir = '/path/to/uploads/';
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$filename = $_SESSION['user_id'].date("dmYHis").'.'.$extension;
$uploadfile = $dir.$filename;
if(is_uploaded_file(realpath($_FILES['file']['tmp_name']))){
if(move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)){
$resizeObj = new resize($uploadfile);
$resizeObj -> resizeImage(1200, 800, 'auto');
$resizeObj -> saveImage($uploadfile, 100);
echo($uploadfile.' uploaded');
}else{
echo('not moved');
}
}else{
echo('not uploaded');
}
}
?>