Intereting Posts
Могу ли я использовать зарезервированные имена PHP для своих функций и классов? Как разбить / разделить массив на 2, используя php? Ошибки при отправке формы (php и bootstrap) Отчет о финансовом году в Php, проблема с выбором соответствующего года Простое рекурсивное дерево в PHP / MySQL GLOBAL Array удаляется … – WP All Import function.php – json_encode создает неправильный JSON (с лишним скрытым характером) Вставка значений из нескольких флажков и текстовых полей Как отправить запрос SOAP из PHP Получение подстроки из базы данных Как создать ссылку для загрузки сгенерированных документов в symfony2? Повторение данных JSON в php PHP SQL выбирает, где в массиве идентификаторов и имеет одинаковое значение столбца переменной Устранение неполадок «Операция использования с не-составным именем … не влияет» Обнаруживать SSL, когда прокси * всегда * утверждает, что безопасное соединение

Создайте файл Tar из каталога на PHP без exec / passthru

Таким образом, у меня есть клиент, у которого текущий хост не позволяет мне использовать tar через exec () / passthru () / ect, и мне нужно периодически создавать резервные копии сайта и программно, так что есть ли решение?

Это сервер linux.

Solutions Collecting From Web of "Создайте файл Tar из каталога на PHP без exec / passthru"

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

В http://pear.php.net/package/Archive_Tar вы можете загрузить пакет tar PEAR и использовать его так, чтобы создать архив:

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

Существует библиотека Archive_Tar . Если по какой-то причине это не может быть использовано, расширение zip может быть другим вариантом.

Мне нужно решение, которое будет работать на сайтах 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('mdY H:i:s').".zip"; // name of the returned file $zip->Flush(TBSZIP_DOWNLOAD, $archiveName); // flush the result as an HTTP download 

И вот вся статья в моем блоге .