I use a php file to created zip archive of all jpg files in a folder and make it available for download.
Here is the script:
<?php $zip = new ZipArchive; $download = 'FileName.zip'; $zip->open($download, ZipArchive::CREATE); foreach (glob("*.jpg") as $file) { /* Add appropriate path to read content of zip */ $zip->addFile($file); } $zip->close(); header('Content-Type: application/zip'); header("Content-Disposition: attachment; filename = $download"); header('Content-Length: ' . filesize($download)); header("Location: $download"); ?>
I was wondering if it is possible to use part of url as archive name? My URLS look like this:
https://www.example.com/data/pictures/album/
I want the archive name to be Pictures-Album-CustomText.zip
Advertisement
Answer
You have a couple of options:
Option 1: Using a combination of $_SERVER['PHP_SELF']
, substr()
, and str_replace()
.
Option 2: Using a combination of $_SERVER['PHP_SELF']
, rtrim()
, explode()
, and count()
.
1st option, broken down:
$url = $_SERVER['PHP_SELF']; // the current full url strrpos($url, "pictures/") // finds "pictures/" in the $url variable substr($url, strrpos($url, "pictures/")) // extracts everything from "pictures/" onwards str_replace("/","-", $name_pre); // replaces "/" with "-"
<?php $url = $_SERVER['PHP_SELF']; $name_pre = substr($url, strrpos($url, "pictures/")); $name_pre = str_replace("/","-", $name_pre); $zip = new ZipArchive; $download = $name_pre . 'FileName.zip'; $zip->open($download, ZipArchive::CREATE); foreach (glob("*.jpg") as $file) { $zip->addFile($file); } $zip->close(); header('Content-Type: application/zip'); header("Content-Disposition: attachment; filename = $download"); header('Content-Length: ' . filesize($download)); header("Location: $download"); ?>
2nd option, broken down:
$url = rtrim($_SERVER['PHP_SELF'], "/"); // get url and remove trailing "/" $url_pieces = explode('/', $url); // break string into pieces based on "/" $url_pieces_count = count($url_pieces); // count the number of pieces $name_pre = $url_pieces[($url_pieces_count - 2)] . "-" . $url_pieces[($url_pieces_count - 1)] . "-"; // construct the filename preface
<?php $url = rtrim("https://www.example.com/data/pictures/album/", "/"); $url_pieces = explode('/', $url); $url_pieces_count = count($url_pieces); $name_pre = $url_pieces[($url_pieces_count - 2)] . "-" . $url_pieces[($url_pieces_count - 1)] . "-"; $zip = new ZipArchive; $download = $name_pre . 'FileName.zip'; $zip->open($download, ZipArchive::CREATE); foreach (glob("*.jpg") as $file) { $zip->addFile($file); } $zip->close(); header('Content-Type: application/zip'); header("Content-Disposition: attachment; filename = $download"); header('Content-Length: ' . filesize($download)); header("Location: $download"); ?>