Проблема распаковки 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 нужно подгрузить какой-то модуль на этапе инициализации. Вопрос — какой? Что я упускаю?
exist17
03 мая 2018, 19:01
modx.pro
966
0

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0