构建TAR文件在PHP没有EXEC /中继

问题描述:

所以我有一个客户端谁是当前主机不允许我通过EXEC()/中继()/ ECT使用焦油,我需要备份网站定期对与programmaticly等等有没有解决方案?构建TAR文件在PHP没有EXEC /中继

这是一个linux服务器。

+0

似乎是一个奇怪的限制。 – 2008-12-02 05:36:56

+0

但并非完全常见,许多主机只是完全禁止使用,而不是chjail'ing用户。 – UnkwnTech 2008-12-02 05:49:16

http://pear.php.net/package/Archive_Tar可以donload 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扩展可能是另一种选择。

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'); 
?> 

我需要一个解决方案,将在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('m-d-Y H:i:s').".zip"; // name of the returned file 
$zip->Flush(TBSZIP_DOWNLOAD, $archiveName); // flush the result as an HTTP download 

而这里的整个article on my blog