php apc扩展模块大文件上传实例

发布时间:2020-10-15编辑:脚本学堂
本文介绍了php apc扩展模块实现大文件上传的方法,php大文件上传实例代码,带进度条的文件上传代码,需要的朋友参考下。

一、apc模块的安装与配置
windows环境,下载php_apc. dll文件,并把php_apc.dll放到php/ext中,并在php.ini中添加:
 

extension = php_apc.dll
apc.rfc1867 = 1
apc.max_file_size = 200M

另外,由于需要上传大文件,所以,在php.ini中,以下选项也需要更改:
 

upload_max_filesize = 1000M
post_max_size = 1000M
max_execution_time = 600 ;每个php页面运行的最大时间值(秒),默认30秒
max_input_time = 600 ;每个php页面接收数据所需的最大时间,默认60秒
memory_limit = 128m ;每个php页面所吃掉的最大内存,默认8m

php大文件上传设置方法 
php上传大文件问题解析 

二、获取进度条代码
getprogress.php
 

复制代码 代码示例:
<?php
session_start();
if(isset($_GET['progress_key'])) {
$status = apc_fetch('upload_'.$_GET['progress_key']);
if($status['total']!=0 && !empty($status['total'])) {
echo json_encode($status);
}
else {
echo (0);
}
} // www.jb200.com
?>

用到了json,传数据非常方便。
$status对象是拥有以下字段的数组:
total: 文件总大小
current: 到目前为止收到的文件数
rate: 上传速度(以字节/秒为单位),不过要在上传完成之后才能有。
filename: 文件名
name: 变量名
temp_filename: php 保存文件的临时副本的位置
cancel_upload: 上传已取消(1),还是未取消(0)
done: 上传已完成(1),还是尚未完成(0)
这里使用json全部传到页面,方便后面利用。

三、主文件 upload.php
 

复制代码 代码示例:
<?php
$id = md5(uniqid(rand(), true));
?>
<html>
<head>
<title>php实现大文件上传-www.jb200.com</title></head>
<body>
<mce:script language="javascript">
<form enctype="multipart/form-data" id="upload_form"
action="target.php" method="POST">
<input type="hidden" name="APC_UPLOAD_PROGRESS"
id="progress_key" value="" />
<input type="file" id="upload_file" name="upload_file" />
<input onclick="window.startProgress(); return true;" type="submit" value="Upload!" />
</form>
<div id="progressouter" style="width: 500px; height: 20px; border: 1px solid black; display:none;">
<div id="progressinner" style="position: relative; height: 20px; background-color: gray; width: 0%; ">
</div>
</div>
<br />
<div id='showNum'>
<div id='showInfo'>
</body>
</html>

以下代码将收到的json字符串还原出来:
 

// 解析status,这样,获取对象就可以用json.something获得
var json = eval("(" + status + ")");
json_current = parseInt(json.current);
json_total = parseInt(json.total);

四、上传文件的接收与保存 target.php
 

复制代码 代码示例:
<?php
set_time_limit(600);
if($_server['request_method'] == 'post') {
move_uploaded_file($_files["upload_file"]["tmp_name"],
dirname($_server['script_filename'])."/uploadfiles/".$_files["upload_file"]["name"]);
echo "
File uploaded.
";
}
?>