一开始使用php调用命令行来执行压缩,后来发现php有ziparchive类库实现了文件的压缩与解压缩 //递归移动文件到当前目录public function moveZipFiles($path,$aimpath) //把path里的所有文件夹里的文件都移动到path层{//rename(/tmp/tmp_file.txt, /home/user
一开始使用php调用命令行来执行压缩,后来发现php有ziparchive类库实现了文件的压缩与解压缩
//递归移动文件到当前目录
public function moveZipFiles($path,$aimpath) //把path里的所有文件夹里的文件都移动到path层
{
//rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
$handler = opendir($path);
while (($filename = readdir($handler)) !== false)
{
if($filename != "." && $filename != "..") //务必使用!==,防止目录下出现类似文件名“0”等情况
{
if(is_dir($path.'/'.$filename)) //如果是目录,递归移动
{
$this->moveZipFiles($path.'/'.$filename,$aimpath); //yii的php递归需要加上$this
}
else //如果是文件,则移动到aimpath
{
rename($path.'/'.$filename, $aimpath.'/'.$filename);
}
}
}
closedir($handler);
}
//解压上传的bin文件的压缩包
public function unZip($zipPath,$path)
{
$f =new func();
$zip = new ZipArchive;
if($zip->open($zipPath)===TRUE){
$zip->extractTo($path);//假设解压缩到在当前路径下images文件夹内
$zip->close();//关闭处理的zip文件
}
//解压缩完毕删除压缩包
unlink($zipPath);
$f->moveZipFiles($path,$path);
}而压缩文件,ZipArchive也提供了足够的简单的接口
public function generateTaskZip($prj_id , $ver_id , $task_id )
{
$f = new func();
$zip = new ZipArchive;
$task_dir = Yii::getPathOfAlias('webroot').'/projects/'.$prj_id .'/'.$ver_id .'/'.$task_id ;
$root_dir = Yii::getPathOfAlias('webroot');
$generatefile_dir = Yii::getPathOfAlias('webroot').'/projects/'.$prj_id .'/'.$ver_id .'/base';
if($zip->open($task_dir.'/output.zip',ZipArchive::OVERWRITE)===TRUE){
$zip->addEmptyDir("CC_Log_GUI");
$zip->addFile($root_dir.'/UI.exe', 'Tools_GUI.exe');
$zip->addFile($root_dir.'/irst.reg', 'first.reg');
$zip->addFile($root_dir.'/API.dll', 'API.dll');
$zip->addFile($root_dir.'/n.dll', 'In.dll');
//把生成的jumpbyList.json打包到zip
if(!is_dir($generatefile_dir))
{
return;
}
$handler1 = opendir($generatefile_dir);
while (($filename = readdir($handler1)) !== false)
{//务必使用!==,防止目录下出现类似文件名“0”等情况
if($filename != "." && $filename != "..")
{
$len = strlen($filename);
if(!substr_compare($filename,'st_',0,19,FALSE)) //把base的文件夹下所有的st_*.json文件都打包到zip包里
{
$zip->addFile($generatefile_dir.'/'.$filename,basename($filename));
}
}
}
closedir($handler1);
//把flf文件打包到zip包
if(!is_dir($task_dir))
{
return;
}
$handler2 = opendir($task_dir);
while (($filename = readdir($handler2)) !== false)
{
if($filename != "." && $filename != "..") //务必使用!==,防止目录下出现类似文件名“0”等情况
{
$len = strlen($filename);
if(!substr_compare($filename,'.flf',$len-4,4,FALSE)) //如果是flf文件,则需要打包到两个地方,一个是当前目录,另外是CC_Log_GUI/目录
{
$file_name = basename($filename);
$zip->addFile($task_dir.'/'.$filename,'UI/'.$file_name);
$zip->addFile($task_dir.'/'.$filename,$file_name);
}
}
}
closedir($handler2);
$zip->close();
}
}现在存在一个问题,如果使用zipArchive压缩文件,怎么能确定它已经把所有文件都压缩好了呢?如果刚开始执行压缩就点击下载zip包,这样zip包里的文件是不完整的,怎么才能提供让zipArchive生成完整的zip文件再提供下载呢
ectouch多通道支付插件可以为ectouch网站提供相应的在线支付功能。安装步骤:一、备份原ectouch网站源文件;二、下载以上“ectouch支付插件”附件;三、解压缩后上传“payment”目录至“ectouch”目录下的“plugins”目录中,覆盖原文件。四、安装完成
0
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号