PHP上传大文件 分割文件上传
PHP上传大文件 分割文件上传
最近遇到这么个情况,需要将一些大的文件上传到服务器,我现在拥有的权限是只能在一个网页版的文件管理系统来进行操作,可以解压,可以压缩,当然也可以用它来在线编辑.php文件。
文件有40M左右,但是服务器的上传文件最大限制是20M。首先想到了使用ini_set函数将upload_max_filesize的值设置大一些,但是有注意到了这个值使用ini_set设置时无效的,所以放弃了该方法。
echo "Old upload max filesize is ";
//取得原始值
print(ini_get("upload_max_filesize"));
echo "<br>";
//设置新值
ini_set("upload_max_filesize","3M");
echo "New upload max filesize is ";
//查看当前值
print(ini_get("upload_max_filesize"));
echo "<br>";
echo "Now restore........";
echo "<br>";
//恢复原始值
ini_restore("upload_max_filesize");
echo "Old upload max filesize is ";
echo ini_get("upload_max_filesize");
echo "<br>";
上面这段PHP代码就能很好的证明一切。
后来想的是可否使用flash将本地文件先分割为一块一块的,然后再逐块上传到服务器,服务器那边使用php脚本再重新组合该文件。理论上是这样,但是查了相关资料,好像还是不可行的,原因还是因为flash上传文件也是只请求了一次php脚本程序。而且好像flex也是不可以分割文件上传的,这应该是flex设计之初的规则。
另外,还看到:
Flash Player 8可以支持100MB以下的大文件上传。目前,已经有许多网站利用Flash Player的这个特性来上传大文件了。例如著名的youtube,Box.net国内的G宝盘等等。在互联网上,很早我就找到了这个不错的开源swf上传组件:SWFUpload,但是由于它不太符合项目需求,并且没有帮助材料,我对它进行了一些修改。
可这个要求还是需要设置服务器的最大上传大小,我没有此操作权限,所以还是放弃了该方法。时间紧啊,没办法,最后想了一个笨方法,那就是现在本地使用程序吧文件分割一下,小于20M,上传到服务器上之后,再用php重新组合一下。以下附上分割和组合文件的代码。
/*
* 分割文件
* 默认大小 10M=10485760
*/
function file_split($file,$block_size=10485760)
{
$block_info=array();
$size=filesize($file);
$i=0;
while($size>0){
$block_info[]=array(
'size'=>($size>=$block_size?$block_size:$size),
'file'=>$file.'.'.($i++).'.esplit'
);
$size-=$block_size;
}
$fp = fopen($file,"rb");
foreach ($block_info as $bi) {
$handle = fopen($bi['file'],"wb");
fwrite($handle,fread($fp,$bi['size']));
fclose($handle);
unset($handle);
}
fclose ($fp);
unset($fp);
}
/*
* 合并文件
* 如果合并后的文件为 CPCUxcp111.flv.0.esplit
* 则 file=CPCUxcp111.flv,不包含.x.esplit后缀
* save_file为另存为的文件名
*/
function file_combine($file,$save_file=''){
$filename=basename($file);
$filepath=dirname($file).'/';
$block_info=array();
for($i=0;;$i++){
if(file_exists($file.'.'.$i.'.esplit') && filesize($file.'.'.$i.'.esplit')>0){
$block_info[]=$file.'.'.$i.'.esplit';
}else{
break;
}
}
if($save_file){
$fp = fopen($save_file,"wb");
}else{
$fp = fopen($file,"wb");
}
foreach ($block_info as $block_file) {
$handle = fopen($block_file,"rb");
fwrite($fp,fread($handle,filesize($block_file)));
fclose($handle);
unset($handle);
}
fclose ($fp);
unset($fp);
}
问题算是解决了,不过这方面有时间还应该研究一下。因为这个方法要是可以使用客户端这样分块发送过去的话,那么就是可行的了。
转载于:https://www.cnblogs.com/ericyuan/archive/2012/10/16/2726380.html
PHP上传大文件 分割文件上传相关推荐
- html限制视频上传大小,微信公众号怎么上传大视频?可以上传多大的视频?
原标题:微信公众号怎么上传大视频?可以上传多大的视频? 想在公众号文章中插入视频,但不知道公众号可以传多大的视频,这篇文章会给你答案,继续看下去吧~ 微信公众号视频大小限制多少 当写公众号文章时,我们 ...
- linux 读取zip文件内容,如何从linux服务器上的大(30Gb)zip文件中提取文件
1)从大型zip文件中提取 我想从linux服务器上的大型zip文件(30Gb)中提取文件.有足够的可用磁盘空间. 我试过jar xf dataset.zip.但是,按钮已满,出现错误,无法提取所有文 ...
- php上传文件到七牛云,如何使用php上传大文件到七牛云储?
按照官方文档写的简易上传, 上传大一点的文件或是中文名文件就会失败,如何解决? index.php index.php enctype="multipart/form-data"& ...
- php 直接上传到七牛云,七牛云存储-如何使用php上传大文件到七牛云储?
按照官方文档写的简易上传, 上传大一点的文件或是中文名文件就会失败,如何解决? index.php index.php upload.php upload.php Token(null); $putE ...
- 华为服务器上传文件,云服务器上传文件方式
云服务器上传文件方式 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装数据传 ...
- ftp服务器只能上传文件,ftp服务器上传文件不行
ftp服务器上传文件不行 内容精选 换一换 本文介绍如何在 Linux 系统的本地机器上使用 FTP 服务,将文件从本地上传到云服务器中.已在待上传文件的云服务器中搭建 FTP 服务.如果您的云服务器 ...
- ftp服务器批量上传文件,bat批量上传ftp文件到服务器
bat批量上传ftp文件到服务器 内容精选 换一换 CDM支持周期性自动将新增文件上传到OBS,不需要写代码,也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份.这里以CDM周期性备份F ...
- csplit 分割文件
csplit 按行分割,split 按大小分割. csplit命令是split的一个变体,split只能够根据文件大小或行数来分割,但csplit能够根据文件本身特点来分割文件. csplit命令用于 ...
- python 做个创越火线挂_一日一技:用Python做个能挂墙上的大钟表
今天给大家分享 1 个非常实用的 python 技能--用 Python 做个能挂墙上的大钟表,先上成果视频: 本项目用到的库主要有 pygame . math . datetime 等,另外还用到一 ...
最新文章
- Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像
- Android实例开发中如何创建第一个项目(android studio)
- python postmessage_解惑:Postmessage函数模拟鼠标单击指定坐标
- 第八篇、盒子模型和距中的设置方法
- xaml修改后台代码的值_Django定制后台和修改模型
- 苹果7plus元件分布图_苹果iphone7 plus手机拆解全过程评测 iphone7 plus拆机图解教程...
- day22 模块-collections,time,random,pickle,shelve等
- Docker完全自学手册
- php blog to explore
- Android深度探索(卷1)HAL与驱动开发 心得体会 第十章 嵌入式Linux的调用技术
- 舍选法抽样matlab,舍选抽样法.PPT
- Application_Start 不执行
- 机器学习—XGBoost实战与调参
- 游戏思考04补充:网络游戏同步算法的理解(参考网易雷火jerish的文章,未完待续7/23,参考文献附尾,物理同步已更新完)
- dsp2812 c语言数据类型长度,DSP2812代码长度超出RAM容量,有谁遇到过吗?
- android speex 音频采样率,speex进行音频去噪
- 关于信号发生器的功能和参数介绍(一)
- Java:javax.mail通过163服务器发送邮件
- java espresso车架,只爱钢架公路:Casati Espresso
- 若依前后端分离框架——初始化参数功能源码学习
热门文章
- 7位格雷码计算风向_七哥特刊|从二轮秀到队内得分王 格雷厄姆会新的蜂王吗?...
- python二级证书考试时间表_2019上半年计算机二级考试时间:3月30日至4月1日
- html根据菜单角色配置菜单代码,CSS设置列表样式和创建导航菜单实现代码
- 英文c语言笔试题,关于C语言模拟笔试题
- 如果一栋楼起火谁赔偿_太原一辆快递车起火!赶紧看看有你的包裹没?
- android弹窗设计,想印:UI设计中弹窗设计的五条基本原则
- 第一个JavaWeb项目——教室预约系统
- Hadoop系列之Aggregate用法
- 转:全卷积网络(FCN)与图像分割
- DCMTK DCMSCU例子