在没有exec / passthru的情况下从PHP目录build立Tar文件

所以我有一个客户谁是当前主机不允许我使用通过exec()/ passthru()/ ect焦油,我需要定期备份和程序化网站,所以有解决scheme吗?

这是一个Linux服务器。

PHP 5.3提供了一个更简单的方法来解决这个问题。

看这里: http : //www.php.net/manual/en/phardata.buildfromdirectory.php

<?php $phar = new PharData('project.tar'); // add all files in the project $phar->buildFromDirectory(dirname(__FILE__) . '/project'); ?> 

http://pear.php.net/package/Archive_Tar上,你可以装载PEAR tar包,像这样使用它来创建存档:

 <?php require 'Archive/Tar.php'; $obj = new Archive_Tar('archive.tar'); $path = '/path/to/folder/'; $handle=opendir($path); $files = array(); while(false!==($file = readdir($handle))) { $files[] = $path . $file; } if ($obj->create($files)) { //Sucess } else { //Fail } ?> 

有Archive_Tar库。 如果由于某种原因无法使用, zip扩展可能是另一种选择。

我需要一个可以在Azure网站(IIS)上工作的解决方案,并且在使用其他答案的方法在服务器上创建新文件时遇到了麻烦。 我的解决方案是使用小的TbsZip库进行压缩,不需要在服务器的任何地方写入文件 – 它只是直接通过HTTP返回。

这个线程是旧的,但这种方法可能是一个更通用和完整的答案,所以我张贴的代码作为替代:

 // 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('mdY H:i:s').".zip"; // name of the returned file $zip->Flush(TBSZIP_DOWNLOAD, $archiveName); // flush the result as an HTTP download 

这里是我的博客上的整篇文章 。