Exec / passthru olmadan PHP dizininde Tar dosyasını oluşturmak

4 Cevap php

Yani şimdiki ev sahibi beni exec () / Geçiş () / vb yoluyla tar kullanmak için izin vermez olan bir müşterim var ve ben bu yüzden bir çözümü var periodicly ve programmaticly yedekleme sitesi gerekiyor?

Bu bir linux sunucu.

4 Cevap

At http://pear.php.net/package/Archive_Tar Eğer PEAR tar paketi donload ve arşiv oluşturmak için bu gibi kullanabilirsiniz:

<?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, bu sorunu çözmek için çok daha kolay bir yol sunar.

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

Archive_Tar kütüphanesi var. Bu herhangi bir nedenle kullanılamaz ise, zip uzantısı başka seçenek olabilir.

Ben Azure web siteleri (IIS) üzerinde çalışmak ve diğer cevaplardan yöntemleri kullanarak sunucu üzerinde yeni dosyalar oluşturma ile sorun vardı edecek bir çözüm gerekir. Benim için çalıştı çözüm her yerde sunucuya dosya yazmak gerekmez sıkıştırma, küçük TbsZip kütüphane kullanımı - bu sadece HTTP üzerinden doğrudan döndü.

Bu konu eski, ancak bu yaklaşım biraz daha genel ve tam bir cevap olabilir, bu yüzden alternatif olarak kod sonrası:

// 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

Ve işte bütün bu article on my blog.