Ich brauche eine Lösung, die auf Azure-Websites (IIS) und hatte Probleme bei der Erstellung neue Dateien auf dem Server unter Verwendung von Methoden aus anderen Antworten funktionieren würde. Die Lösung, die für mich funktionierte, war die Verwendung einer kleinen Bibliothek TbsZip für die Komprimierung, bei der keine Datei irgendwo auf dem Server geschrieben werden muss - sie wird einfach direkt über HTTP zurückgegeben.
Dieser Thread ist alt, aber dieser Ansatz könnte ein bisschen mehr Generika und vollständige Antwort sein, so poste ich den Code als Alternative:
// Compress all files in current directory and return via HTTP as a ZIP file
// by buli, 2013 (http://buli.waw.pl)
// requires TbsZip library from http://www.tinybutstrong.com
include_once('tbszip.php'); // load the TbsZip library
$zip = new clsTbsZip(); // instantiate the class
$zip->CreateNew(); // create a virtual new zip archive
// iterate through files, skipping directories
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'));
foreach($objects as $name => $object)
{
$n = str_replace("/", "\\", substr($name, 2)); // path format
$zip->FileAdd($n, $n, TBSZIP_FILE); // add fileto zip archive
}
$archiveName = "backup_".date('m-d-Y H:i:s').".zip"; // name of the returned file
$zip->Flush(TBSZIP_DOWNLOAD, $archiveName); // flush the result as an HTTP download
Und hier ist die ganze article on my blog.
Scheint wie eine seltsame Einschränkung. –
Aber nicht ganz auf dem üblichen, blockieren viele Hosts die Verwendung vollständig statt chjail'ing Benutzer. – UnkwnTech
Richtig, aber es ist dumm, angesichts der Macht von PHP, mit dem Dateisystem zu interagieren. –