escaflowne
10.06.2004, 17:50:06
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
10.06.2004, 18:29:05
Najpierw bzread, potem explode względem znaku końca linii.
Bakus
10.06.2004, 18:34:29
http://www.php.net/manual/pl/ref.bzip2.php
bzopen.... i postępujesz jak ze zwykłym plikiem...
escaflowne
10.06.2004, 22:34:36
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
10.06.2004, 23:10:03
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
11.06.2004, 08:20:57
Jeśli wszystko inne zawiedzie, przeczytaj manual

.
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.