Распакуйте большие файлы с gzip в PHP

После чтения Вашего разъяснения, @Ates ответ Goral обеспечивает, как выполнить ту же операцию, которую Вы делаете в C# в JavaScript.

ответ @Gumbo обеспечивает лучший способ проверить на пустой указатель; однако, важно отметить различие в == по сравнению с === в JavaScript особенно когда дело доходит до проблем проверки undefined и/или null.

существует действительно хорошая статья о различии в двух условиях здесь . В основном поймите, что, если Вы используете == вместо ===, JavaScript попытается объединить значения, которые Вы сравниваете и возвращаете что результат сравнения после эта коалесценция.

12
задан Lukas 4 August 2009 в 19:53
поделиться

3 ответа

gzfile () - удобный метод, который вызывает gzopen, gzread и gzclose.

Итак, да, вы можете вручную выполнить gzopen и gzread файл по частям.

Это распакует файл по фрагментам по 4 КБ:

function uncompress($srcName, $dstName) {
    $sfp = gzopen($srcName, "rb");
    $fp = fopen($dstName, "w");

    while (!gzeof($sfp)) {
        $string = gzread($sfp, 4096);
        fwrite($fp, $string, strlen($string));
    }
    gzclose($sfp);
    fclose($fp);
}
43
ответ дан 2 December 2019 в 03:22
поделиться

попытаться с

function uncompress($srcName, $dstName) {
    $fp = fopen($dstName, "w");
    fwrite($fp, implode("", gzfile($srcName)));
    fclose($fp);
}

Параметр $ length является необязательным.

1
ответ дан 2 December 2019 в 03:22
поделиться

Если вы находитесь на хосте Linux, имеете необходимые привилегии для запуска команд и установлена ​​команда gzip, вы можете попробовать вызвать ее с помощью чего-то вроде shell_exec

SOmething a примерно так, я полагаю, подойдет:

shell_exec('gzip -d your_file.gz');

Таким образом, файл не будет распакован PHP.


В качестве примечания:

  • Позаботьтесь о том, откуда запускается команда (не используйте переключатель для скажите «распаковать в этот каталог»)
  • Вы можете также взглянуть на escapeshellarg ; -)
1
ответ дан 2 December 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: