Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> bzread() jak file()?
escaflowne
post 10.06.2004, 17:50:06
Post #1





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 20.02.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ć?


--------------------
Wieczność jest bardzo nudna, szczególnie pod koniec - Woody Allen
/home/env: Apache 2.2 | PHP 5.2 | MySQL 5.1 | FreeBSD 8.0 | NetBeans 6.8 | symfony 1.4
Go to the top of the page
+Quote Post
hawk
post 10.06.2004, 18:29:05
Post #2





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Najpierw bzread, potem explode względem znaku końca linii.
Go to the top of the page
+Quote Post
Bakus
post 10.06.2004, 18:34:29
Post #3


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


http://www.php.net/manual/pl/ref.bzip2.php
bzopen.... i postępujesz jak ze zwykłym plikiem...


--------------------
Powrót do przeszłości :)
Go to the top of the page
+Quote Post
escaflowne
post 10.06.2004, 22:34:36
Post #4





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 20.02.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ę? :?


--------------------
Wieczność jest bardzo nudna, szczególnie pod koniec - Woody Allen
/home/env: Apache 2.2 | PHP 5.2 | MySQL 5.1 | FreeBSD 8.0 | NetBeans 6.8 | symfony 1.4
Go to the top of the page
+Quote Post
escaflowne
post 10.06.2004, 23:10:03
Post #5





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 20.02.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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? :?


--------------------
Wieczność jest bardzo nudna, szczególnie pod koniec - Woody Allen
/home/env: Apache 2.2 | PHP 5.2 | MySQL 5.1 | FreeBSD 8.0 | NetBeans 6.8 | symfony 1.4
Go to the top of the page
+Quote Post
hawk
post 11.06.2004, 08:20:57
Post #6





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:15