PHP Partial Zip allows you to download files located within remote ZIP files.
Based on planetbeing/partial-zip.
composer require stnvh/php-partialzip 0.2.x
Class init method
$p = new Partial('http://some.site.com/cats.zip');
Returns a list of all the files in the remote directory
/*...*/
$list = $p->index(); # = ('cat.png', 'cat2.png', 'cat3.png')
Returns a parsed file object for use when fetching the remote file
/*...*/
# Search and return other file objects
if($file = $p->find('cat2.png')) {
# You can call methods here to fetch ZIP header information too
# The full list of file header properties can be found in CDFile.php
$size = $file->size(); # size in bytes
$fullName = $file->name(); # full file name in zip, including path
}
Returns, or outputs the file fetched from the remote ZIP.
Note: You should ensure no content is outputted before echo-ing ->get()
as this will cause the file download to contain invalid data.
Hint: put ob_start()
at the start of your script, then run ob_clean()
before output.
/*...*/
if($file = $p->find('cat3.png')) {
$fileData = $p->get($file);
}
<?php
require 'vendor/autoload.php';
use Stnvh\Partial\Zip as Partial;
ob_start(); # will capture all output
$p = new Partial('http://some.site.com/cats.zip');
# Get file object
if($file = $p->find('cat.png')) {
# removes everything from current output to ensure file downloads correctly
ob_clean();
# Set appropriate headers and output to browser:
header(sprintf('Content-Disposition: attachment; filename="%s"', $file->filename));
header(sprintf('Content-Length: %d', $file->size));
echo $p->get($file);
}