X-Git-Url: http://positon.org/gitweb/?p=bizou.git;a=blobdiff_plain;f=plugins%2F_disabled%2Ftar%2Ftar.php;fp=plugins%2F_disabled%2Ftar%2Ftar.php;h=9d3a46ffa15f0346bf0035a3c011ee94e213d8ec;hp=0000000000000000000000000000000000000000;hb=4a74e0085e76653319bfa9da56e6abf394fe8729;hpb=6b66fbdda7970103a5286e2dbce92816d763aca9 diff --git a/plugins/_disabled/tar/tar.php b/plugins/_disabled/tar/tar.php new file mode 100644 index 0000000..9d3a46f --- /dev/null +++ b/plugins/_disabled/tar/tar.php @@ -0,0 +1,73 @@ +. +*/ + +# do not enable recursive tars by default +$TAR_FLAGS = "--no-recursion"; + +# send content length for browsers to display the progress bar +# note : won't work if the http server uses Chunked transfer encoding (http://en.wikipedia.org/wiki/Chunked_transfer_encoding) +# probably the case with gzip content-encoding. +# For this we need to tar files to /dev/null before the real tar +$SEND_CONTENT_LENGTH = true; + +######################## +$bizouRootFromHere = '../..'; +require "$bizouRootFromHere/config.php"; + +if (isset($_SERVER["PATH_INFO"])) { + $simplePath = $_SERVER["PATH_INFO"]; +} else { + $simplePath = '/'; +} + +if (strpos($simplePath, '..') !== false) die(".. found in url"); + +$realDir = "$bizouRootFromHere/".IMAGES_DIR.$simplePath; + +if ( ! is_dir($realDir) ) { + header("HTTP/1.1 404 Not Found"); + die("Directory Not Found"); +} + +# change to the parent directory +chdir(dirname($realDir)); + +$filesarg = basename($realDir); +# same as escapeshellarg function but this supports utf8 regardless of locale +$filesarg = "'".str_replace("'", "'\\''", $filesarg)."'"; +$filesarg = "$filesarg/*"; + +# compute and send content-length header +if ($SEND_CONTENT_LENGTH) { + $out = exec("tar $TAR_FLAGS --totals -cf /dev/null $filesarg 2>&1", $output, $ret); + preg_match('/^Total bytes written: ([0-9]+) /', $out, $matches); + $totalsize = $matches[1]; + + ($totalsize > 1000 and $ret === 0) or die("Could not tar: $filesarg. Try checking permissions."); + + header("Content-Length: $totalsize"); +} + +# final step : stream the directory content via tar +header('Content-Type: application/x-tar'); +header('Content-Disposition: attachment; filename="'.basename($realDir).'.tar"'); + +passthru("tar $TAR_FLAGS -c $filesarg"); + +?>