![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
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.
|
|
|
![]()
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 :)
![]() |
|
|
![]()
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 |
|
|
![]()
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 |
|
|
![]()
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
![]() 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. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:15 |