Проблема распаковки zip-архива с паролем
Добрый вечер!
Подскажите, может кто сталкивался.
Не могу распаковать запароленный zip-архив по задаче в cron.
Сначала сделал просто сниппетом на определенной странице сайта. В этом случае по обновлению страницы файл распаковывается, все норм.
Код сниппета (сокращенно):
А вот если делать скрипт отдельным файлом, обращаясь к API MODX, как тут писал Василий, то архив не распаковывается.
Код скрипта, который запускается по задаче в cron (сокращенно):
Получается, что файл архива открывается, "$zip->open" возвращает true. А вот на этапе установки пароля "$zip->setPassword" скрипт умирает. Файл не распаковывается. В лог ничего не попадает. Как понять чего не хватает?
А самое важное — если архив был создан без пароля и в коде не использовать «setPassword», то он нормально распаковывается.
Как мне кажется, при обращении напрямую к API MODX снаружи для полноценной работы с zip нужно подгрузить какой-то модуль на этапе инициализации. Вопрос — какой? Что я упускаю?
Подскажите, может кто сталкивался.
Не могу распаковать запароленный zip-архив по задаче в cron.
Сначала сделал просто сниппетом на определенной странице сайта. В этом случае по обновлению страницы файл распаковывается, все норм.
Код сниппета (сокращенно):
<?php
$local_dir = 'assets/docs/temp/';
$local_arch = 'datafile.zip';
$zip = new ZipArchive;
if ( $zip->open($local_dir . $local_arch) ) {
if ($zip->setPassword("password")){
if ($zip->extractTo($local_dir)) {
$modx->log(modX::LOG_LEVEL_ERROR, 'Распаковали');
}
}
$zip->close();
}
А вот если делать скрипт отдельным файлом, обращаясь к API MODX, как тут писал Василий, то архив не распаковывается.
Код скрипта, который запускается по задаче в cron (сокращенно):
<?php
define('MODX_API_MODE', true);
require_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '/index.php';
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
$local_dir = MODX_ASSETS_PATH . 'docs/temp/';
$local_arch = 'datafile.zip';
$zip = new ZipArchive;
if ( $zip->open($local_dir . $local_arch) ) {
if ($zip->setPassword("password")){
if ($zip->extractTo($local_dir)) {
$modx->log(modX::LOG_LEVEL_ERROR, 'Распаковали');
}
}
$zip->close();
}
Получается, что файл архива открывается, "$zip->open" возвращает true. А вот на этапе установки пароля "$zip->setPassword" скрипт умирает. Файл не распаковывается. В лог ничего не попадает. Как понять чего не хватает?
А самое важное — если архив был создан без пароля и в коде не использовать «setPassword», то он нормально распаковывается.
Как мне кажется, при обращении напрямую к API MODX снаружи для полноценной работы с zip нужно подгрузить какой-то модуль на этапе инициализации. Вопрос — какой? Что я упускаю?