[ NetworkAdmin @ 29.10.2004. 13:15 ] @
Evo sad me raspizdi PHP.

Vrsim persiranje HTML dokumenata i na svakih 1000 do 2000 desi se preg_replace da izazove Segmentation fault

Mije mi jasno sta bi mogao biti uzrok jeli neko ima ideju. Nije problem da zbog nevalidnog HTML recimo skripta nista ne matchuje ali mi je problem sto prekine rad skripte.
[ NetworkAdmin @ 29.10.2004. 16:54 ] @
nasao sam da mi php puca na fajlovima koji imaju ogromne stringove jedan 20kb u nizu base64 encoded ali ne i wrapped kao value za hidden polje pa kad preg_replace krene da skida html tags ima problem jer prekoraci stek
[ -zombie- @ 30.10.2004. 15:29 ] @
daj regex koji koristiš, da ga ispravimo..

sigurno može da se napravi bar da bude safe (da ne puca), a verovatno i da radi kako treba.. ;)

btw, ako koristiš samo za skidanje html tagova, onda bolje koristi neku specijalizovanu c funkciju za to (striptags, tidy, etc..)
[ Gojko Vujovic @ 30.10.2004. 16:10 ] @
Jesi li možda skoro prelazio na noviju verziju php-a? Probaj sa starijom a u međuvremenu daj regexp i neki primer pa da probamo da rešimo.
[ Not now, John! @ 30.10.2004. 19:42 ] @
Meni se isto to dešavalo, ali samo na Win platformi. Kombinacija je MySQL/PHP. Dešava se samo kada se regexp primjenjuje na dugačak tekst.
Koristim sljedeće:
Code:
  function make_URL($matches) {
    global $filename;
    if ($_GET['more']==1)
      $tmp="<a href=\"$filename?word=".urlencode($matches[1])."&more={$_GET['more']}\">{$matches[1]}</a>";
    else
      $tmp="<a href=\"$filename?word=".urlencode($matches[1])."\">{$matches[1]}</a>";
    return $tmp;
  }
  function BBdecode($text) {
    $text=str_replace("\n","<br>\n", $text);
    $text=preg_replace('/\[list=(a|1)\]((.|\n)*)\[\/list\]/U',"<ol type=\"\\1\">\\2</ol>",$text);
/* ne dozvoljava ugniježdene liste */
    $text=str_replace("[*]","<li>",$text);
    $text=str_replace("[b]","<span style=\"font-weight: bold\">",$text);
    $text=str_replace("[/b]","</span>",$text);
    $text=str_replace("[i]","<span style=\"font-style: italic\">",$text);
    $text=str_replace("[/i]","</span>",$text);
    $text=str_replace("[u]","<span style=\"text-decoration: underline\">",$text);
    $text=str_replace("[/u]","</span>",$text);
    $text=preg_replace('/\[color=(\#[0-9a-fA-F]{1,6})\]/',"<span style=\"color: \\1\">",$text);
    $text=str_replace('[/color]','</span>',$text);
    $text=preg_replace_callback("/\[see\](.*)\[\/see\]/U", "make_URL", $text);
    return $text;
  }

Nisam siguran da je do preg_replace_callback funkcije (dobijam samo Segmentation fault).
Iste funkcije na istom tekstu, na Linuxu ne prave ovu grešku. Na Win je PHP 4.3.2, a na Linuxu je PHP 4.3.6