Я хочу извлечь control.tar.gz
файла .deb
в каталог с PHP.
Должно быть возможно с File_Archive::extract
.
Это текущий код, который у меня есть:
$tmp = 'testdebs';
foreach (glob("../debs/*.deb") as $t1) {
//$t1 correct
echo "current deb: " . $t1 . "\n";
$fname = ($t1);
$md5 = md5_file($t1);
$sha1 = sha1_file($t1);
$sha256 = hash_file('sha256', $t1);
$sha512 = hash_file('sha512', $t1);
$size = filesize($t1);
echo "size: " . $size . "\n";
//Also tried:
// File_Archive::extract(File_Archive::read($t1 . '/control.tar.gz/'), File_Archive::toFiles("/var/www/some_directory/manage/testdebs/"));
// and:
// File_Archive::extract(File_Archive::read($t1 . '/control.tar.gz/'), File_Archive::toFiles($tmp));
File_Archive::extract(File_Archive::read($t1 . '/control.tar.gz/'), File_Archive::toFiles("/var/www/some_directory/manage/testdebs"));
$aLinesFile = file("testdebs/control", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
echo "aLinesFile: " . $aLinesFile . "\n";
$pack = end(preg_grep('/^Package\:.*$/i', $aLinesFile));
echo $pack . "\n";
}
Запуск этого кода буквально ничего не делает. $t1
всегда имеет правильное значение для .deb
(что означает, что .deb
находится в каталоге). Я также получаю правильный filesize
для файла .deb
.
Мои testdeb
директивы остаются пустыми, поэтому, наверное, произошла ошибка с File_Archive::extract
. В журнале ошибок я вижу только следующее предупреждение:
Предупреждение PHP: end () ожидает, что параметр 1 будет массивом, значение NULL указано в /var/www/some_directory/manage/generate.php в строке 78
строка 78 - $pack = end(preg_grep('/^Package\:.*$/i', $aLinesFile));
в примере кода.
Каталог testdeb имеет значение 775 и принадлежит пользователю ( www-data ), поэтому я предполагаю, что права верны.
Есть ли способ узнать больше об ошибке или включить более глубокое ведение журнала, чтобы исправить эту ошибку?