How can I add a file to a folder inside a zip开发者_如何学C file using PHP?
For example if I have the zip file:
myzip.zip
|-hello.doc
If I wanted to add the file "example.jpg" inside the "images" folder, the zip file would be:
myzip.zip
|-hello.doc
|-images
|-example.jpg
How can I achieve this?
Use PHP's ZipArchive class. Here's the documentation. So you'd do something like:
<?php
$z = new ZipArchive();
$z->open('/path/to/your/file.zip');
// Notice the second argument which specifies the local path in the archive
$z->addFile('/path/to/example.jpg', 'images/example.jpg');
$z->close();
?>
Now your archive has "images/example.jpg".
Zip function:
/* creates a compressed zip file */
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;
}
}
Function usage:
$files_to_zip = array(
'preload-images/1.jpg',
'preload-images/2.jpg',
'preload-images/5.jpg',
'kwicks/ringo.gif',
'rod.jpg',
'reddit.gif'
);
//if true, good; if false, zip creation failed
$result = create_zip($files_to_zip,'my-archive.zip');
Source: http://davidwalsh.name/create-zip-php
if ($zip->open('fileName.zip') === TRUE) {
$zip->addFile('example.jpg', '/images/example.jpg');
$zip->close();
}
I do believe this should work.
精彩评论