Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: str_replace na ladowanym pliku gz
Forum PHP.pl > Forum > PHP
calebos
Czesc.


Mam plik ktory bedzie szedl do bazy danych, ale najpierw musze w nim pozamieniac zespoly znakow '/|' ,'\|' etc.
Poniewaz separatorem pol w pliku jest '|'. Nie do konca czaje jak zrobic zeby rozumial ze ten bufor to string. Bufor wolalbym miec bo plik ma 67 w gz, a po rozpakowaniu 80mb.


Walnalem cos takiego
CODE

function unpackarch ($src,$dst)
{

$in_file = gzopen($src,"rb");
$out_file = fopen ($dst,"wb");

while (!gzeof ($in_file))

{

$buffer = gzread ($in_file,4096);
$bugz=array("\|","/|");
$buffer= implode("\n",$buffer);
$buffer = str_replace($bugz,"|",$buffer);
fwrite($out_file,$buffer,4096);
}
gzclose($in_file);
fclose($out_file);

}

unpack pliku dziala , ale str_replace nie.
nevt
Umieść kod w odpowiednichz znacznikach BBcode.

Zamiast gzread() spróbuj zastosować gzgets() ... i wyrzuć linijkę z implode() ...
calebos
Dzieki za odpowiedz.

Poprawilem kod i teraz dziala. Mam problem z '/|' kombinuje na wszystkie sposoby i usuwa mi jedynie '\|' z tego pliku.

Zmienialem double quote na single itp odracalem kolejnosc i nadal sa /|.


Thx za pomoc.


PS. Jeszcze male pytanko dt buforu tzn jak wczyta 'fragment' to jest mozliwe zeby rozdzielil w momencie kiedy pojawia sie '/' a w nastepnym fragmencie pojawia sie '|' i wtedy str_replace nie zadziala bo nie ma occurency of '/|' ?
Nie jestem pewny na jakiej zasadzie skrypt czyta ten bufor czy z binarki czy ze stringa ?
Moze to jest idiotoodporne ale chcialbym wiedziec jak to dziala tongue.gif
nevt
Cytat
PS. Jeszcze male pytanko dt buforu tzn jak wczyta 'fragment' to jest mozliwe zeby rozdzielil w momencie kiedy pojawia sie '/' a w nastepnym fragmencie pojawia sie '|' i wtedy str_replace nie zadziala bo nie ma occurency of '/|' ?

Bardzo trafne spostrzeżenie... Sprawdzaj ostani znak w buforze, i jeżeli jest to '/' doczytuj do bufora jeszcze jeden znak... powinno pomóc smile.gif
calebos
Jakis hint dlaczego nie wychwytuje mi /| ?
nevt
chyba powinno być tak:
  1. <?php
  2. $bugz = array('|', '/|');
  3. $ok = array('|', '|'); 
  4. $buffer = str_replace($bugz, $ok, $buffer);
  5. ?>
calebos
Hey

Niestety nadal mi nie lapie /| . Nawet jak wywale bufor to i tak to nie dziala.
Usuwa \| poprawnie.

CODE




function unpackarch ($src,$dst)
{ print ("Attempting to unpack and fix '$src' file......");
$in_file = gzopen($src,"r"); $out_file = fopen ($dst,"wb");
while (!gzeof ($in_file))
{
$buffer = gzgets ($in_file,4096);
$last= $buffer[strlen($buffer)-1];
print ("$last");
$bugz=array('/|','\|');
$fixes=array('|','|');
$buffer = str_replace($bugz,$fixes,$buffer);
fwrite($out_file,$buffer,4096);
}
gzclose($in_file);
fclose($out_file);
}



nevt
a możesz gdzieś wystawić przykładowy (kilka wpisów) plik źródłowy i wynikowy...? coś mi się zdaje, że to co chcesz usunąć nie jest kombinacją znaków '/|' tylko tak wygląda w pliku wynikowym...
calebos
Kurde niestety nie wzialem sobie zrzutu z tyrki wiec nie zapodam.
Myslisz zeby podejrzec jakims hexem czy czegos tam nie ma ?

Byloby to dziwne ale ludzie dziwne rzeczy wpisuja do custom fieldow ohmy.gif.

W hex jest 2F 7C wiec nie ma tam nic pomiedzy.

Jak mam wstawic ten txt .. ma 70mb.
nevt
nie wstawić (na forum) tylko wystawić (gdzieś w sieci do pobrania) i nie cały plik (70 MB) tylko jego kawałek (np. 10-100 kB). Wtedy będę mógł dokładnie sprawdzić co jest grane, bo u mnie na przykładowych danych "wklepanych" do skryptu ten str_replace() działa jak trzeba...

i jeszcze pytanie pomocnicze.. czy plik, który obrabiasz (z danymi) i plik skryptu PHP (z str_replace) mają tą samą strone kodową questionmark.gif
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.