Как распаковать файл tar.gz с низким использованием памяти [php 7]? - PullRequest
0 голосов
/ 06 августа 2020

У меня есть файл tar.gz размером 4 ГБ, который я хочу распаковать в файл tar. Я использовал

$p = new PharData('/path/to/file/name');
$p->decompress();

, чтобы попытаться сделать это. Однако я получаю сообщение об ошибке «PHP Неустранимая ошибка: допустимый размер памяти 8589934592 байта исчерпан (попытался выделить 36864 байта)»

Вещи, которые я пробовал:

(1) ini_set ( 'memory_limit', '-1'); Результат: Generi c Сообщение об ошибке «Убито»

(2) ini_set ('memory_limit', '6000M'); Результат: «PHP Неустранимая ошибка: допустимый размер памяти 8589934592 байта исчерпан (попытался выделить 36864 байта)» сообщение об ошибке

Я также зашел в файл php .ini, чтобы внести те же изменения . Как мне распаковать файл tar.gz в файл tar?

1 Ответ

0 голосов
/ 07 августа 2020

Очевидно, оболочка потока phar:// позволит вам читать содержимое файла CSV непосредственно из сжатого файла TAR.

$fh = fopen('phar://example.tar.gz/target_file.csv', 'r');

while( $row = fgetcsv($fh) ) {
    // code!
}

Это должно использовать качество потока PHP, чтобы чтение файл не требует более нескольких килобайт, фактически находящихся в памяти в данный момент.

Тем не менее, если вы начнете просто добавлять строки в массив в этом l oop, у вас будет такие же проблемы с памятью. Сделайте что-нибудь со строкой, а затем выбросьте ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...