2012-02-23 28 views
23

Tôi làm cách nào để gỡ bỏ một tệp trong php mà không cần sử dụng exec('tar') hoặc bất kỳ lệnh nào khác, sử dụng PHP thuần túy?PHP Untar-gz mà không có exec()?

Sự cố của tôi như sau; Tôi có một tập tin tar.gz 26mb mà cần phải được tải lên máy chủ của tôi và trích xuất. Tôi đã thử sử dụng net2ftp để giải nén nó, nhưng nó không hỗ trợ tar.gz uncompressing sau khi tải lên.

Tôi đang sử dụng máy chủ web miễn phí, vì vậy, chúng không cho phép bất kỳ lệnh exec() nào và chúng không cho phép truy cập lời nhắc. Vì vậy, làm thế nào tôi sẽ đi về untaring này?

PHP có lệnh tích hợp không?

Trả lời

37

Vì PHP 5.3.0 bạn không cần sử dụng Archive_Tar.

Có lớp mới để làm việc trên kho lưu trữ tar: The PharData class.

Để trích xuất một kho lưu trữ (sử dụng PharData::extractTo() mà làm việc như ZipArchive::extractTo()):

try { 
    $phar = new PharData('myphar.tar'); 
    $phar->extractTo('/full/path'); // extract all files 
} catch (Exception $e) { 
    // handle errors 
} 

Và nếu bạn có một kho lưu trữ tar.gz, chỉ cần giải nén nó trước khi giải nén (sử dụng PharData::decompress()):

// decompress from gz 
$p = new PharData('/path/to/my.tar.gz'); 
$p->decompress(); // creates /path/to/my.tar 

// unarchive from the tar 
$phar = new PharData('/path/to/my.tar'); 
$phar->extractTo('/full/path'); 
+1

Vì một số lý do PharData :: extractTo không hoạt động trong PHP 5.4.0 trên Windows. Không thể tìm ra lý do tại sao – TinyGrasshopper

+0

Tôi thấy [câu hỏi của bạn] (http://stackoverflow.com/q/13870800/569101) nhưng tôi không có Windows với 5,4.0 để kiểm tra, xin lỗi. – j0k

+0

Nó cũng trái với tài liệu, dường như không lấy các thư mục làm đối số thứ hai. –

3

PEAR cung cấp Archive_Tar class, hỗ trợ cả nén Gzip và BZ2, miễn là bạn đã tải tiện ích zlib và bz2 tương ứng.

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