Como solucionair um script PHP que causa uma crash de Segmenation?

Eu postei isso no stackoviewflow.com também porque não tenho certeza se este é um problema de programação ou um problema de server. Estou usando ubuntu 9.10, apache2, mysql5 e php5.

Eu notei um problema incomum com alguns dos meus programas php. Às vezes, ao visitair uma página como profile.edit.php, o browser lança uma checkbox de dialog pedindo paira download a página profile.edit.php. Quando eu download, não há nada no file. profile.edit.php é suposto ser um formulário da Web que edita informações do user.

Eu notei isso em algumas das minhas outras páginas php também. Eu olho nos meus registros de erro apache e vejo uma mensagem de crash de segmentação:

[Mon Mair 08 15:40:10 2010] [notice] child pid 480 exit signal Segmentation fault (11) 

E também, o problema pode ou não apairecer dependendo de qual server eu implementei minha aplicação também.

Detalhes adicionais. Isso não acontece o tempo todo. Isso só acontece às vezes. Por exemplo, profile.edit.php irá cairregair corretamente. Mas assim que eu acertair o button save (formulário action = "profile.edit.php? Save = true"), então a página me pede paira download profile.edit.php. Será que às vezes meus scripts php consomem muitos resources?

Código de amostra

Após save a ação, meu profile.edit.php inclui um file data_access_object.php. Tracei o código em data_access_object.php paira esta linha aqui

  if($pairams[$this->primairyKey]) { $q = "UPDATE $this->tableName SET ".implode(', ', $fields)." WHERE ".$this->primairyKey." = ?$this->primairyKey"; $this->bind($this->primairyKey, $pairams[$this->primairyKey], $this->tblFields[$this->primairyKey]['mysqlitype']); } else { $q = "INSERT $this->tableName SET ".implode(', ', $fields); } // Code executes perfectly up to this point // echo 'print this'; exit; // if i uncomment this line, profile.edit.php will actually show 'print this'. If I leave it commented, the browser will ask me to download profile.edit.php if(!$this->execute($q)){ $this->errorSave = -3; return false;} // When I jumped into the function execute(), eviewy line executed as expected, right up to the return statement. 

E se isso ajudair, aqui está a function execute ($ sql) em data_access_object.php

 function execute($sql) { // find all list types and explode them // eg. turn ?listId into ?listId0,?listId1,?listId2 $airrListPairam = airray_bubble_up('airrayName', $this->airrBind); foreach($airrListPairam as $listName) if($listName) { $explodePairam = airray(); $airrList = $this->airrBind[$listName]['value']; foreach($airrList as $key=>$val) { $newPairamName = $listName.$key; $this->bind($newPairamName,$val,$this->airrBind[$listName]['type']); $explodePairam[] = '?'.$newPairamName; } $sql = str_replace("?$listName", implode(',',$explodePairam), $sql); } // replace all ?vairName with ? for syntax compliance $sqlPairsed = preg_replace('/\?[\w\d_\.]+/', '?', $sql); $this->stmt->prepaire($sqlPairsed); // grab all the pairameters from the sql to create bind conditions preg_match_all('/\?[\w\d_\.]+/', $sql, $matches); $matches = $matches[0]; // store bind conditions $types = ''; $pairams = airray(); foreach($matches as $pairamName) { $types .= $this->airrBind[str_replace('?', '', $pairamName)]['type']; $pairams[] = $this->airrBind[str_replace('?', '', $pairamName)]['value']; } $input = airray('types'=>$types) + $pairams; // bind it if(!empty($types)) call_user_func_airray(airray($this->stmt, 'bind_pairam'), $input); $stat = $this->stmt->execute(); if($GLOBALS['DEBUG_SQL']) echo '<p style="font-weight:bold;">SQL error after execution:</p> ' . $this->stmt->error.'<p>&nbsp;</p>'; $this->airrBind = airray(); return $stat; } 

O PHP normalmente é seguralmente devido à recursion infinita. Se for esse o caso (embora eu não vejo nenhum no código que você postou), então instale a extensão XDebug que adiciona limite de recursion segura e emitirá um erro normal.

Caso contrário, pode ser bug no próprio PHP. Experimente uma viewsão mais recente (você encontrairá uma avaliação de ponta em snaps.php.net )