构建TAR文件在PHP没有EXEC /中继
问题描述:
所以我有一个客户端谁是当前主机不允许我通过EXEC()/中继()/ ECT使用焦油,我需要备份网站定期对与programmaticly等等有没有解决方案?构建TAR文件在PHP没有EXEC /中继
这是一个linux服务器。
答
在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
}
?>
答
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。
似乎是一个奇怪的限制。 – 2008-12-02 05:36:56
但并非完全常见,许多主机只是完全禁止使用,而不是chjail'ing用户。 – UnkwnTech 2008-12-02 05:49:16