基于session.upload_progress 的文件上传进度显示
用PHP Session和Javascript实现文件上传进度条
php上传文件并显示上传进度的方法
undefined index: php session upload_progress
Undefined index: PHP_SESSION_UPLOAD_PROGRESS
屏蔽警告提醒
error_reporting(0);开启session.upload_progress
修改php.ini文件,开启session.upload_progress的支持
session.upload_progress.enabled = On
session.upload_progress.cleanup = On
session.upload_progress.prefix = "upload_progress_"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.freq = "1%"
session.upload_progress.min_freq = "1"修改php上传文件限制
upload_max_filesize = 500M; //上传文件的最大值,还可以调更大
post_max_size = 500M; //post方式传递过来数据最大值,还可以调更大
max_execution_time = 1800; //页面最大执行时间,已经设置为最大值
max_input_time = 1800; //解析传入数据最大执行时间,已经设置为最大值
memory_limit = 128M; //每个页面消耗的最大内存,已经设置为最大值上传表单
注意 别忘了在最开始加上session_start();
input标签的位置
name为session.upload_progress.name的input标签一定要放在文件input <input type="file" /> 的前面
<form action="file.php" class="ffurr" method="POST" id="upprrsss" name="upprrsss" enctype="multipart/form-data" target="hidden_iframe">
<input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="test" />
<p class="pb10">
<label for="file" style="font-size: 14px;"><i class="fi-photo"></i>请选择上传作品图片:</label>
<input type="file" name="file" id="file" /> </p>处理上传的文件
if(is_uploaded_file($_FILES['file']['tmp_name'])){
move_uploaded_file($_FILES['file']['tmp_name'], "./{$_FILES['file']['name']}");
}Ajax获取进度信息
建立一个 progress.php 文件,用来读取session中的进度信息
<?php
error_reporting(0);
session_start();
$i = ini_get('session.upload_progress.name');
$key = ini_get('session.upload_progress.prefix') . $_GET[$i];
//print_r($key);exit;
if (isset($_SESSION[$key])) {
$current = $_SESSION[$key]["bytes_processed"];
$total = $_SESSION[$key]["content_length"];
echo $current < $total ? ceil($current / $total * 100) : 100;
}else{
echo 100;
}function fetch_progress(){
$.get('progress.php',{ '<?php echo ini_get("session.upload_progress.name"); ?>' : 'test'}, function(data){
var progress = parseInt(data);
$('#progress .label').html(progress + '%');
$('#progress .label').css('width', progress + '%');
//$('#progress .bar').css('width', progress + '%');
if(progress < 100){
setTimeout('fetch_progress()', 100);
}else{
$('#zesscc').hide();
$('#progress .label').html('上传完成!');
setTimeout(function(){
location.href = '/sybyzt.php';
}, 1500);
}
}, 'html');
}
/*$('#upprrsss').submit(function(){
alert(321);
$('#progress').show();
setTimeout('fetch_progress()', 100);
});*/<iframe id="hidden_iframe" name="hidden_iframe" src="about:blank" style="display:none;"></iframe><div id="progress" class="progress" style="margin-bottom:15px;display:none;height: auto;">
<!--<div class="bar" style="width:0%;"></div>-->
<div class="label" style="width:0%;">0%</div>
</div>通过设置 $_SESSION[$key]['cancel_upload'] = true 可取消当次上传。但仅能取消正在上传的文件和尚未开始的文件。已经上传成功的文件不会被删除
setTimeout vs. setInterval
应该通过 setTimeout() 来调用 fetch_progress(),这样可以确保一次请求返回之后才开始下一次请求。如果使用 setInterval() 则不能保证这一点,有可能导致进度条出现'不进反退'
php里提供一个获取php.ini里的变量值的函数:ini_get()
参考
http://www.jb51.net/article/56305.htm
mysql like 多个值
MySQL数据库一个字段对应多个值得模糊查询
当一个字段想模糊查询出多个字段的时候,正常情况下一般会这么作
但是上面的情况只能对应少量的模糊查询值,过多之后再后台开发的时候会出现非常麻烦的sql语句拼接
这时我们可以采用正则表达式进行匹配
js 实现异步上传图片+预览
两种js实现方式,一种用原生的ajax;另一种用JQuery,例子比较简单,直接上代码。
注意:
1、用JQuery方式需要加两个参数 contentType: false 和processData: false,这两个参数是为了设置ajax对file文件对象进行序列化
2、两种方式在组织参数时都需要使用var form = new FormData()
便地去掉html中难看的文件上传按钮并实现图片预览功能
春夏尚新
淘宝天猫广告推广gif动画图标导航菜单