2008-12-02 29 views
9

Vì vậy, tôi có một máy khách hiện tại không cho phép tôi sử dụng tar qua exec()/passthru()/ect và tôi cần sao lưu trang web định kỳ và theo chương trình có giải pháp nào không?Tạo tệp Tar từ thư mục trong PHP mà không cần exec/passthru

Đây là máy chủ Linux.

+0

Dường như một giới hạn kỳ lạ. –

+0

Nhưng không hoàn toàn phổ biến, nhiều máy chủ chỉ chặn sử dụng hoàn toàn thay vì người dùng chjail'ing. – UnkwnTech

+0

Đúng, nhưng nó là ngớ ngẩn, do sức mạnh của PHP để tương tác với hệ thống tập tin. –

Trả lời

8

Tại http://pear.php.net/package/Archive_Tar bạn có thể donload gói tar PEAR và sử dụng nó như thế này để tạo ra các kho lưu trữ:

<?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 
} 
?> 
4

Có thư viện Archive_Tar. Nếu điều đó không thể được sử dụng vì một lý do nào đó, thì tiện ích mở rộng zip có thể là một tùy chọn khác.

+0

Bạn đã đăng trong khi tôi đang nhập nhưng tôi sẽ giữ cho tôi ở đây vì nó có mã. – UnkwnTech

0

Tôi cần một giải pháp mà có thể làm việc trên các trang web Azure (IIS) và gặp khó khăn với việc tạo tập tin mới trên máy chủ sử dụng phương pháp từ câu trả lời khác. Các giải pháp mà làm việc cho tôi là sử dụng thư viện TbsZip nhỏ để nén, mà không yêu cầu phải viết tập tin bất cứ nơi nào trong máy chủ - nó chỉ trả lại trực tiếp thông qua HTTP.

chủ đề này là cũ, nhưng cách tiếp cận này có thể là nhiều hơn một chút câu trả lời chung chung và đầy đủ, vì vậy tôi đăng các mã như thay thế:

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

Và đây là toàn bộ article on my blog.

Các vấn đề liên quan