10

だから私は現在のホストがexec()/ passthru()/ ectを介してtarを使用することを許可していないクライアントを持っています、そして私は定期的かつプログラム的にサイトをバックアップする必要があるので解決策はありますか?

これはLinuxサーバーです。

4

4 に答える 4

19

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');
?>
于 2011-07-06T19:35:23.160 に答える
8

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
 }
?>
于 2008-12-02T05:37:18.640 に答える
4

Archive_Tarライブラリがあります。何らかの理由でそれを使用できない場合は、zip拡張機能が別のオプションである可能性があります。

于 2008-12-02T05:34:39.457 に答える
0

Azure Web サイト (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

そして、これが私のブログの記事全体です。

于 2013-04-22T20:52:50.867 に答える