Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: bzread() jak file()?
Forum PHP.pl > Forum > PHP
escaflowne
Witam!
Mam problem (znowu). Mam plik tekstowy, który jest skompresowany programem bzip2. W php jest funkcja bzread(), która pozwala wczytać zawartość skompresowanego pliku do zmiennej. Tyle, że zmiennej typu string. A ja potrzebowałbym czegoś, co zdekompresoany plik wstawiałoby do tablicy, tak jak to robi funkcja file(). Ma ktoś pomysł, jak to zrobić?
hawk
Najpierw bzread, potem explode względem znaku końca linii.
Bakus
http://www.php.net/manual/pl/ref.bzip2.php
bzopen.... i postępujesz jak ze zwykłym plikiem...
escaflowne
Zrobiłem coś takiego:
[php:1:482f0ac145]<?php
$bz = bzopen("/var/pliki/manual.1.bz2", "r");
$dane = bzread($bz, filesize("/var/pliki/manual.1.bz2"));
$plik = explode("n", $dane);
?>[/php:1:482f0ac145]
I teoretycznie wszystko działa. Ale... kiedy wywołuję ostatni element tablicy:
[php:1:482f0ac145]<?php
$end = array_pop($plik);
echo 'OSTATNI: '. $end;
?>[/php:1:482f0ac145]
Jako wynik dostaję jedną z linijek mniej więcej ze środka dokumentu.
Kiedy rozpakuję plik i otworzę go w ten sposób:
[php:1:482f0ac145]<?php
$plik = file("/var/pliki/manual.1");
?>[/php:1:482f0ac145]
to po użyciu array_pop() dostaję prawidłowo ostanią linijkę pliku.
Co może powodować taką sytuację? :?
escaflowne
Dobra. Mała inspekcja wykazała, że problem leży po stronie wartości zwracanej przez:
[php:1:f5910060e2]<?php
filesize("/var/pliki/manual.1.bz2");
?>[/php:1:f5910060e2]
Zwraca wielkość spakowanego pliku. Co mam zrobić, żeby plik był czytany przez bzread() w całości? Ustawić jakiś bardzo wysoki limit w wywołaniu funkcji czy jak? :?
hawk
Jeśli wszystko inne zawiedzie, przeczytaj manual biggrin.gif.
Cytat
[php:1:b74768f538]<?php

$file = "/tmp/foo.bz2";
$bz = bzopen($file", "r") or die("Couldn't open $file");

$decompressed_file = '';
while (!feof($bz)) {
   $decompressed_file .= bzread($bz, 4096);
}
bzclose($bz);

echo "The contents of /tmp/foo.bz2 are: <br />n";
echo $decompressed_file;

?>[/php:1:b74768f538]

Czyli czytasz w pętli aż do EOF.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.