preg_match_all

Programovacie jazyky, rady, poradňa...
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

preg_match_all

Príspevok od používateľa Snacker »

Zdravim,

Mam jeden prokletej problem a neviem, kde presne je chyba

Mam subor test2.php. Najdte ho na adrese http://book.knizka.org/test2.php

Kod v nom je tento:

Kód: Vybrať všetko

<?php

$book = "books/".$_GET['book'];

$fh = fopen($book, 'r');
$string = fread($fh, filesize($book));
fclose($fh);


$matches = array(); 
preg_match_all('/<chapter>(.*?)<\/chapter>/is', $string, $matches); 


var_dump($matches[1]);

?>
Kod spravi to, ze ovori XML subor a vyberie z neho kapitoly a a ich do pola.

Vo vsetkych knihach mi to funguje: napr.

cambel-samo_pochybenie_txt.xml
hurban-jozef-miloslav_zivotopis-b-p-cervenaka_txt.xml
kukucin-martin_rysava-jalovica_txt.xml
kuzmany-pavol_stroskotanie-fregaty-meduzy_txt.xml
sladkovic-andrej_marina_txt.xml
sladkovic-andrej_vlastenecke-basne-z-druhej-polovice-sestdesiatych-rokov_txt.xml
vansova-terezia_z-nasej-dediny_txt.xml

(vyskusateto tak ze ten subor date ako GET hodnotu prmennej book, cize napr. http://book.knizka.org/test2.php?book=c ... ie_txt.xml )

Okrem jednej knihy:

holuby-jozef-ludovit_z-mojich-ziackych-casov-presporskych_txt.xml

Neviem,kde presne je chyba, skusal som vela veci ale nic nepomohlo.
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Re: preg_match_all

Príspevok od používateľa Snacker »

Ok, dajme tomu, ze som mal prvy riadok vynechany... ale aj tak to nejde. Tu nejde anitak o to cito je XML ale o to, ze mi to nechce rozparsovat cez preg_match_all. Ja nepouzivam ziadne XML funkcie, ten subor moze mat kludne inu koncovku
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: preg_match_all

Príspevok od používateľa chrono »

Problém je, že ten text je príliš dlhý, takže ti to fungovať nebude (v tomto konkrétnom prípade s ungreedy modifikátorom).

Čiže to budeš musieť urobiť inak. Ak nechceš použiť funkcie na spracovávanie XML, tak to budeš musieť rozdeliť pomocou <chapter> a potom v každom úseku pohľadáš </chapter> (a ak ho tam nájdeš, tak tú časť použiješ). Prípadne budeš opakovane hľadať <chapter> a potom od nasledujúceho znaku </chapter> (možností je asi ešte viac).

PS: Mohol by si zväčšiť backtrack_limit (v tvojom prípade by mala stačiť dvojnásobná hodnota štandardnej hodnoty), ale môže sa stať, že budeš mať súbor, ktorý bude ešte väčší...
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Re: preg_match_all

Príspevok od používateľa Snacker »

Si neskutocny macher! Diki moc! Dal som na zaciatok

Kód: Vybrať všetko

ini_set("pcre.backtrack_limit", 1000000);

a vsetko fici, to urcite bude stacit, je to 10x tolko a toto bola jedna z najvacsich kapitol. S tymto som sa este nesretol... K+
Napísať odpoveď