Извлечь части архива .deb с помощью PHP - PullRequest
1 голос
/ 16 марта 2019

Я хочу извлечь 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 ), поэтому я предполагаю, что права верны.

Есть ли способ узнать больше об ошибке или включить более глубокое ведение журнала, чтобы исправить эту ошибку?

...