【发布时间】:2014-01-03 22:55:50
【问题描述】:
我用来上传图片的以下代码由于某种原因失败了... 这是 HTML
<form id="image_upload" enctype="multipart/form-data" action="uploadImage.php" method="post" name="prof_picture">
<input id="image1" style="display:none;" name="image" accept="image/jpeg" type="file">
<input id="image2" value="Submit" type="submit" style="display:none;">
</form>
PHP (uploadImage.php)
include('../sqlconnection.php');
define ("MAX_SIZE","1000");
function getExtension($str)
{
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
$valid_formats = array("jpg", "png", "gif", "bmp","jpeg");
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
{
$uploaddir = "profile/uploads"; //Image upload directory
$filename = stripslashes($_FILES['image']['name'][0]);
echo $filename;
$size=filesize($_FILES['image']['tmp_name'][0]);
echo $filename;
//Convert extension into a lower case format
$ext = getExtension($filename);
$ext = strtolower($ext);
//File extension check
if(in_array($ext,$valid_formats))
{
//File size check
if ($size < (MAX_SIZE*1024))
{
$image_name=time().$filename;
echo "<img src='".$uploaddir.$image_name."' class='imgList'>";
$newname=$uploaddir.$image_name;
//Moving file to uploads folder
if (move_uploaded_file($_FILES['image']['tmp_name'][0], $newname))
{
$time=time();
//Insert upload image files names into user_uploads table
mysql_query("UPDATE table SET image='$image_name' WHERE id='$user_id'");
}
else
{
echo '<span class="imgList">failed</span>'; }
}
else
{
echo '<span class="imgList">failed</span>';
}
}
else
{
echo '<span class="imgList">failed</span>';
}
}
JS
$('#image1').on('change', function() {
$("#image").attr('src',"profile/loading.gif");
$("#image_upload").ajaxForm({
target: '#image'
}).submit();
});
我所知道的肯定:
1º php 脚本正在正确实现,因为我故意使部分代码失败并获得有关内部 php 错误的错误消息。
2º 查询正在正确完成(或至少通过其语法)。
3º与#image相关的javascript函数也正在运行。
我只想上传用户选择的一张图片(即使他选择了 100 个其他项目)。但正如我所说,我什至没有在日志上收到错误消息......关于这个有什么想法吗?非常感谢!
编辑
我稍微改了一下代码
$ext = strtolower($ext);
if(in_array($ext,$valid_formats)){
if ($size < (MAX_SIZE*1024)){
$image_name=time().$user_id."--pfi-".$filename;
$newname=$uploaddir.$image_name;
if (move_uploaded_file($_FILES['image']['tmp_name'], $newname)){
mysql_query("UPDATE table SET image='$image_name' WHERE id='$user_id'");
}else echo '<span class="imgList">This message appears </span>';
}else echo '<span class="imgList">You have exceeded the size limit!</span>';
}else echo '<span class="imgList">Unknown extension!</span>';
由于某种原因,它现在停在if(move_uploaded_file($_FILES['image']['tmp_name'], $newname))。我已经对此进行了 var_dump,它确实是“错误的”,但我无法理解为什么。这里是 var_dump($_FILES):
array(1) { ["image"]=> array(5) { ["name"]=> string(21) "060424_hubble_big.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/phpZYaDkm" ["error"]=> int(0) ["size"]=> int(35641) } }
编辑 2
警告: move_uploaded_file(profile/uploads/1388794617.png): 无法打开流:中没有这样的文件或目录 profile/uploadProfilePicture.php 在第 37 行 警告:move_uploaded_file():无法将“/tmp/phppFfoL4”移动到 '配置文件/上传/1388794617.png' 在 profile/uploadProfilePicture.php 第 37 行
我应该如何指定 $uploaddir 甚至 $newname?
【问题讨论】:
-
试试
$uploaddir = "profile/uploads/"; -
如果 isset($_POST) 指出任何表单提交。考虑到这是指向此脚本的唯一形式,所以不会有任何其他问题(当然这并不像应有的那样安全,感谢您指出这一点),这不是什么大问题。 && 你对此也是正确的,但我猜想并且当时我想到了。
-
最后添加
/,正如保罗所说。很可能是问题所在。我以前见过这种情况,它不会显示错误消息,但也没有上传任何内容。 -
@Paul 刚刚尝试过,但实际上并非如此。这可能是尝试调试时的早期缺陷。
-
很抱歉,我删除了我的评论,认为它没有任何区别。不过不客气。
标签: javascript php jquery ajax