需要用到两个文件index.html与upload.php。
文件:index.html
<head>
<title>无刷新上传文件</title>
<meta Content-type="text/html" charset="utf-8" />
<script type="text/javascript">
function startUpload() {
document.getElementById('processing').innerHTML = 'loding...';
return true;
}
function stopUpload(rel){
var msg;
switch (rel) {
case 0:
msg = "上传成功";
break;
case 1:
msg = "上传的文件超过限制";
break;
case 2:
msg = "只能上传图片文件";
break;
default:
msg = "上传文件失败";
}
document.getElementById('processing').innerHTML = msg;
}
</script>
</head>
<body>
<div >
<div id="processing"></div>
<form action="/blog_article/upload.html" method="post" enctype="multipart/form-data" target="form-target" onsubmit="startUpload();">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
<input type="file" name="myfile" />
<input type="submit" name="sub" value="upload" />
</form>
<iframe name="form-target"></iframe>
</div>
</body>
</html>
文件: upload.php
<?php
sleep(2);
$fileTypes = array('jpg','png','gif','bmp');
$result = null;
$uploadDir = './upfiles';
$maxSize = 1 * pow(2,20);
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset()($_POST['sub'])) {
$myfile = $_FILES['myfile'];
$myfileType = substr($myfile['name'], strrpos($myfile['name'], ".") + 1);
if ($myfile['size'] > $maxSize) {
$result = 1;
} else if (!in_array($myfileType, $fileTypes)) {
$result = 2;
} elseif (is_uploaded_file($myfile['tmp_name'])) {
$toFile = $uploadDir . '/' . $myfile['name'];
if (@move_uploaded_file($myfile['tmp_name'], $toFile)) {
$result = 0;
} else {
$result = -1;
}
} else {
$result = 1;
}
}
?>
<script type="text/javascript">
window.top.window.stopUpload(<?php echo $result; ?>);
</script>
一、设置post_max_size和upload_max_filesize
php上传文件限制涉及很多方面,大致归纳一下,有如下几个:
1、memory_limit内存设置限制
2、max_execution_time程序执行时间限制
3、post_max_size最大POST数据限制
4、upload_max_filesize最大上传文件大小限制
当然有这几个也不是绝对就限定了上传文件大小,理论上也只是限制最大可能的上传文件大小,因为内存设置还受限于当前可用内存数,程序执行时间受限于当前系统繁忙状态,POST数据大小还受限于POST冗余头或多断上传数,等等,这些因素都会在某个时机会影响到上传文件结果。
所以从逻辑顺序上:
memory_limit>post_max_size>upload_max_filesize,再加上一个前提max_execution_time许可时间足够长。
归纳一下,假设上传限制100M字节,则参考设置如下:
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)
; Maximum size of POST data that PHP will accept.
post_max_size = 105M
; Maximum allowed size for uploaded files.
upload_max_filesize = 100M
一般来讲,上传文件时,首先需要保证上传内存,查看PHP.INI默认配置,memory_limit默认是128M,对一次脚本执行可消耗的内存量。如果上传限制100M,那么这么大的内存量而言足够了(还是一般来讲,比如多文件同时上传可能就会不够)。
二、调整执行时间set_time_limit
max_execution_time默认设置为30秒,对于上传100M文件而言,目前的网络情况来看,30秒要上传100M文件几乎是不可能的,10M带宽完全对称速率,一秒一兆也需要一分半钟。所以这个设置即使调整也难以估算实际执行时间,而且调整太长对APACHE不太友善。
所以建议不要调整max_execution_time,而只是在PHP程序中使用:set_time_limit(0);
进行临时调整。设置0表示没有时间限制。当然从程序执行角度,设置0是解决了超时问题,但其实并非好的解决办法,如果程序支持断点续传,那么设置600秒或3600秒也似乎是个更好的思路,超时时自动断点续传即可。
三、重启APACHE服务器
service httpd restart
您可能感兴趣的文章:
突破php上传文件大小限制的配置方法
PHP增加文件上传大小的限制
如何取消php文件上传不能大于2M的限制
突破php文件上传大小限制的方法
修改php文件上传大小的限制的方法
php文件上传代码。
##author :Androidyue
##sina @androidyue
##Blog http://blog.csdn.net/BossDarcy
##源码具体讲解 http://blog.csdn.net/BossDarcy/archive/2010/12/20/6086082.aspx
//判断临时文件存放路径是否包含用户上传的文件
if(is_uploaded_file($_FILES["uploadfile"]["tmp_name"])){
//为了更高效,将信息存放在变量中
$upfile=$_FILES["uploadfile"];//用一个数组类型的字符串存放上传文件的信息
//print_r($upfile);//如果打印则输出类似这样的信息Array ( [name] => m.jpg [type] => image/jpeg [tmp_name] => C:\WINDOWS\Temp\php1A.tmp [error] => 0 [size] => 44905 )
$name=$upfile["name"];//便于以后转移文件时命名
$type=$upfile["type"];//上传文件的类型
$size=$upfile["size"];//上传文件的大小
$tmp_name=$upfile["tmp_name"];//用户上传文件的临时名称
$error=$upfile["error"];//上传过程中的错误信息
//echo $name;
//对文件类型进行判断,判断是否要转移文件,如果符合要求则设置$ok=1即可以转移
switch($type){
case "image/jpg": $ok=1;
break;
case "image/jpeg": $ok=1;
break;
case "image/gif" : $ok=1;
break;
default:$ok=0;
break;
}
//如果文件符合要求并且上传过程中没有错误
if($ok&&$error=='0'){
//调用move_uploaded_file()函数,进行文件转移
move_uploaded_file($tmp_name,'up/'.$name);
//操作成功后,提示成功
echo "<script language=\"javascript\">alert('succeed')</script>";
}else{
//如果文件不符合类型或者上传过程中有错误,提示失败
echo "<script language=\"javascript\">alert('failed')</script>";
}
}
?>
Html页面中提交上传的form表单的内容:
<form enctype="multipart/form-data" method="post" name="uploadform">
<input type="file" name="uploadfile" value="Upload File">
<input type="submit" name="submit" value="Upload">
</form>
您可能感兴趣的文章:
php 文件上传简单示例
php 文件上传简单实例
php 多文件上传的简单例子(入门)
php 多图片上传的简单例子(图文)
php普通表单多文件上传的代码
php简单文件上传的例子
一个php上传文件的函数