Справочник выглядит примерно так:
home/
file1.html
file2.html
Another_Dir/
file8.html
Sub_Dir/
file19.html
Я использую тот же класс PHP Zip, что и в PHPMyAdmin http://trac.seagullproject.org/browser/branches/0.6-bugfix/lib/other/Zip.php . Я не уверен, как заархивировать каталог, а не просто файл. Вот что у меня есть на данный момент:
$aFiles = $this->da->getDirTree($target);
/* $aFiles is something like, path => filetime
Array
(
[home] =>
[home/file1.html] => 1251280379
[home/file2.html] => 1251280377
etc...
)
*/
$zip = & new Zip();
foreach( $aFiles as $fileLocation => $time ){
$file = $target . "/" . $fileLocation;
if ( is_file($file) ){
$buffer = file_get_contents($file);
$zip->addFile($buffer, $fileLocation);
}
}
THEN_SOME_PHP_CLASS::toDownloadData($zip); // this bit works ok
но когда я пытаюсь распаковать соответствующий загруженный zip-файл, я получаю сообщение «операция не разрешена»
Эта ошибка возникает только тогда, когда я пытаюсь распаковать на своем Mac, когда я распаковываю через командную строку, файл распаковывается нормально. Нужно ли мне при загрузке отправлять контент определенного типа, в настоящее время «application / zip»
Ответы:
Вот простая функция, которая может рекурсивно сжимать любой файл или каталог, требуется только загрузить расширение zip.
Назовите это так:
источник
file_get_contents
и добавляются строки. zip не поддерживает добавление файлов напрямую?'/'
с ,DIRECTORY_SEPARATOR
чтобы заставить его работать на Windows, конечно. В противном случае вы получите полный путь (включая имя диска) в вашем ZIP-архиве, напримерC:\Users\...
.//
на,\
поскольку это фактически нарушает foreach в окнах. Если вы используете встроенный по назначениюDIRECTORY_SEPARATOR
, в замене нет необходимости. Жесткое кодирование/
- это то, что вызывало у некоторых пользователей проблемы. Я немного смутился, почему я получаю пустой архив. Моя версия будет нормально работать под * nix и Windows.Еще одно рекурсивное архивирование дерева каталогов, реализованное как расширение ZipArchive. В качестве бонуса добавлена вспомогательная функция сжатия дерева с одним оператором. Поддерживается необязательное локальное имя, как и в других функциях ZipArchive. Будет добавлен код обработки ошибок ...
источник
Я отредактировал ответ Аликс Аксель , чтобы принять третий аргумент, при установке этого третьего аргумента на
true
все файлы будут добавлены в основной каталог, а не непосредственно в zip-папку.Если zip-файл существует, он также будет удален.
Пример:
Третья структура
true
zip-архива:Третий аргумент
false
или отсутствует структура почтового индекса:Отредактированный код:
источник
$maindir
предпочтительное имя.ИСПОЛЬЗОВАНИЕ: thisfile.php? Dir =. / Path / to / folder (после архивирования он тоже начинает загрузку :)
источник
Попробуйте эту ссылку <- БОЛЬШЕ ИСХОДНОГО КОДА ЗДЕСЬ
источник
Вот мой код для Zip папок и их подпапок и их файлов и сделать его загружаемым в формате zip
Если возникнут проблемы с кодом, сообщите мне.
источник
Мне нужно было запустить эту функцию Zip в Mac OSX
так что я всегда буду архивировать этот надоедливый .DS_Store.
Я адаптировал https://stackoverflow.com/users/2019515/user2019515 , включив дополнительные файлы игнорирования.
ТАК, чтобы игнорировать .DS_Store из zip, вы запускаете
zipIt ('/ путь / к / папке', '/path/to/compressed.zip', false, array ('. DS_Store'));
источник
Отличное решение, но для моей Windows мне нужно внести изменения. Ниже кода изменения
источник
Этот код работает как для Windows, так и для Linux.
источник
Вот моя база версий на Alix, работает в Windows и, надеюсь, на * nix:
источник
Вот простая, легко читаемая и очень хорошо работающая рекурсивная функция:
источник
После ответа @ user2019515 мне нужно было обработать исключения в моем архиве. вот получившаяся функция с примером.
Функция почтового индекса:
Как это использовать :
источник