<?php# vim:et:ts=3:sts=3:sw=3:fdm=marker:// WebSVN - Subversion repository viewing via the web using PHP// Copyright © 2004-2006 Tim Armes, Matt Sicker//// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//// --//// dl.php//// Create gz/tar files of the requested itemrequire_once("include/setup.inc");require_once("include/svnlook.inc");require_once("include/utils.inc");// Make sure that this operation is allowedif (!$rep->isDownloadAllowed($path))exit;$svnrep = new SVNRepository($rep);if ($path{0} != "/")$ppath = "/".$path;else$ppath = $path;// If there's no revision info, go to the lastest revision for this path$history = $svnrep->getLog($path, "", "", true);$youngest = $history->entries[0]->rev;if (empty($rev))$rev = $youngest;// Create a temporary directory. Here we have an unavoidable but highly// unlikely to occure race conditionif (count(glob("/tmp/wsvn-*"))<=40) // Omezeni na pocet soucasne stahovanych souboru{// Ošetření doběhnutí skriptu i když klient klikne jinam (smazání tmp)ignore_user_abort(true);$tmpname1 = tempnam("temp", "wsvn-");$tmpname = $tmpname1;$tmpname .= "dir";if (mkdir($tmpname)){// Get the name of the directory being archived$arcname = substr($path, 0, -1);$arcname = basename($arcname);if (empty($arcname))$arcname = $rep->name;$svnrep->exportDirectory($path, $tmpname.DIRECTORY_SEPARATOR.$arcname, $rev);// ZIP it upchdir($tmpname);if (! connection_aborted())exec("zip -r ".quote("$arcname")." .");$size = filesize("$arcname.zip");// Give the file to the browserif (!connection_aborted() && $fp = @fopen("$arcname.zip","rb")){header("Content-Type: application/zip");header("Content-Length: $size");header("Content-Disposition: attachment; filename=\"".$rep->name."-$arcname.zip\"");// Use a loop to transfer the data 4KB at a time.while(!feof($fp)){echo fread($fp, 4096);ob_flush();}}else{print "Unable to open file $arcname.zip";}fclose($fp);chdir("..");// Delete the directory. Why doesn't PHP have a generic recursive directory// deletion command? It's stupid.// if ($config->serverIsWindows)// {// $cmd = quoteCommand("rmdir /S /Q ".quote($tmpname), false);// }// else// {$cmd = quoteCommand("rm -fr ".quote($tmpname), false);// }@exec($cmd);}unlink($tmpname1); // Pomocny soubor smazeme az po smazani adresare}else{print "We are sorry. The server is overloaded...";}?>