2012-03-12 43 views
2
function create_zip($files = array(),$destination = '',$overwrite = false) { //if the zip file already exists and overwrite is false, return false 

if(file_exists($destination) && !$overwrite) { return false; } 

//vars 

$valid_files = array(); 

//if files were passed in... 

if(is_array($files)) { 

//cycle through each file 

foreach($files as $file) { 

//make sure the file exists 

    if(file_exists($file)) { 

    $valid_files[] = $file; 

    } 
} 

} 

//if we have good files... 

if(count($valid_files)) { 

//create the archive 

$zip = new ZipArchive(); 

if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) 

!== true) { 

    return false; 

} 

//add the files 

foreach($valid_files as $file) { 

    $zip->addFile($file,$file); 

} 

//debug 

//echo 'The zip archive contains ',$zip->numFiles,' files with a status of 

',$zip->status; 

//close the zip -- done! 

$zip->close(); 


//check to make sure the file exists 

return file_exists($destination); 

} 

else 

{ 

return false; 

} 

} 

// using function as 

include('functions.php'); 

$files_to_zip = array(

'database/350-001(3.1).examdb', 

'setup/ExaminationEngine.exe' 

); 

//if true, good; if false, zip creation failed 

$result = create_zip($files_to_zip,'my-archive.zip'); 

我正在使用此功能,使zip。使从不同的位置文件的zip文件在php

每件事情都很完美,但是在zip文件下创建的文件是通过完整路径创建的,我只希望我的两个文件位于my-archive.php中。但在我的档案.php datbase/350-001(3.1).examdbsetup/ExaminationEngine.exe数据库和安装文件夹被创建。

我该如何解决这个问题?

+0

你需要一些其他的功能做你想做的事情。那么你有什么想法? – hakre 2012-03-12 12:25:55

+0

你可以参考一些其他功能,工作完美,因为我需要? – user1138383 2012-03-12 12:30:21

+0

//将代码替换为以下代码 foreach($ valid_files as $ file){ $ zip-> addFile($ file,$ file); } //使用下面的代码 foreach($ valid_files as $ f){ $ filename_parts = explode('/',$ f); //将文件名分割为'/'字符 $ zip-> addFile($ f,end($ filename_parts))或死(“ERROR:Could not add file:$ f”); } – user1138383 2012-03-14 13:41:12

回答

0

我建议您准备一个临时文件夹,从那里的不同位置复制文件,将其压缩并删除临时文件夹。否则听起来很无聊。

+0

我该怎么做?任何帮助@jpic – user1138383 2012-03-12 12:30:00

+1

做什么? – jpic 2012-03-12 12:31:36

+0

是的PLZ修改我的脚本@jpic – user1138383 2012-03-12 12:33:50

2

尝试

//add the files 
foreach($valid_files as $file) { 
    $zip->addFile($file,basename($file)); 
} 

,而不是

//add the files 
foreach($valid_files as $file) { 
    $zip->addFile($file,$file); 
} 

addFile的第二个参数是“本地路径”,$文件的基本名称是你想传递给它什么(我假设现在你正在通过某种相对路径)

请记住,您将不得不手动声明您的文件名是唯一的。

看到

http://php.net/manual/en/ziparchive.addfile.php

http://php.net/manual/en/function.basename.php

+0

foreach($ valid_files as $ f){ $ filename_parts = explode('/',$ f); //将文件名分开'/'字符 $ zip-> addFile($ f,end($ filename_parts))或die(“ERROR:Could not add file:$ f”); } – user1138383 2012-03-14 13:07:46