我正在开发(本地,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
按照应有的方式处理(我在uploads文件夹中找到一个重命名的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文件为了调整我的图像大小,我使用了this class,我之前使用过它,就像魅力一样。
我没有得到的是为什么某些文件以他们应该的方式处理,而其他文件未通过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');
}
}
?>