我想从PHP代码中拆分多个部分的大文件(具体来说,tar.gz文件).这样做的主要原因是,php的2gb限制在32bit系统上.
所以我想分割多个部分的大文件并单独处理每个部分.
这可能吗?如果有,怎么样?
我的评论被投了两次,所以也许我的猜测是:P
如果在unix环境中,试试这个......
exec('split -d -b 2048m file.tar.gz pieces');
Run Code Online (Sandbox Code Playgroud)
你的作品应该是pieces1
,pieces2
等
您可以通过stat()
在PHP中使用来获取文件大小,然后进行简单的数学运算(int) ($stat['size'] / 2048*1024*1024)
(我认为),从而轻松获得生成的数量.
一个简单的方法(如果使用基于Linux的服务器)是使用该exec
命令并运行split
命令:
exec('split Large.tar.gz -b 4096k SmallParts'); // 4MB parts
/* | | | | |
| | |______| |
App | | |_____________
The source file | |
The split size Out Filename
*/
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参见此处:http://www.computerhope.com/unix/usplit.htm
或者您可以使用:http://www.computerhope.com/unix/ucsplit.htm
exec('csplit -k -s -f part_ -n 3 LargeFile.tar.gz');
Run Code Online (Sandbox Code Playgroud)
PHP在单个线程中运行,增加此线程数的唯一方法是使用fork
命令创建子进程.
这不是资源友好的.我建议的是研究一种能够快速有效地完成这项工作的语言.我建议使用node.js.
只需在服务器上安装节点,然后创建一个小脚本,node_split
例如,可以为您自己完成工作.
但我强烈建议您不要将PHP用于此作业,而是使用exec来允许主机操作系统执行此操作.
归档时间: |
|
查看次数: |
18521 次 |
最近记录: |