exit signal Segmentation fault (11)
- venus
- Člen | 14
Dobrý den,
při vývoji aplikace jsem narazil na problém, že aplikace funguje
správně na lokálním serveru, ale nikoliv na produkčním.
Aplikace při spuštění vypíše do logu apache: child pid XXXXX exit signal
Segmentation fault (11).
Zdrojový kód:
class DefaultPresenter extends BasePresenter
{
protected $form;
public function actionDefault()
{
$this->form = new AppForm($this, 'login');
$this->form->addProtection("Neplatný přístup k aplikaci!", 900);
$this->form->addText('userName', 'Uživatelské jméno:')
->addRule(Form::FILLED, 'Uživatelské jméno musí být vyplněno.');
$this->form->addPassword('password', 'Přístupové heslo:')
->addRule(Form::FILLED, 'Přístupové heslo musí být vyplněno.');
//->addRule(Form::MIN_LENGTH, 'Heslo musí být minimálně %d znaků', 12);
$this->form->addSubmit('ok', 'Přihlásit')
->onClick[] = array($this, 'OkClicked');
$this->form->onSubmit[] = array($this, 'FormSubmitted');
$this->template->form = $this->form;
if (!isset($this->template->result)) {
$this->template->result = "";
}
$authenticator = $this->uzivatel->prepareUser();
$this->user->setAuthenticationHandler($authenticator);
}
// obslužné handlery:
function OkClicked(SubmitButton $button)
{
// submitted and valid
$formular = $this->form->getValues();
try {
$this->user->authenticate($formular['userName'], sha1($formular['password'])); // předáme přihlašovací jméno a heslo
} catch (Exception $e) {
$this->template->result = "Přihlášení nebylo úspěšné.";
}
$this->user->setExpiration(30*60, TRUE, TRUE);
if ($this->user->isAuthenticated()) { $this->redirect('redsys:');}
}
function FormSubmitted(Form $form)
{
// manual processing
}
}
Postupným hledáním chyby jsem zjistil, že chybu zřejmě způsobuje:
$this->template->form = $this->form;
Po zakomentování této řádky vše funguje jak má.
Verze Nette: Nette Framework 0.8 (revision 266 released on 2009/04/08
04:57:30)
Verze PHP: PHP Version 5.2.0–8+etch13
Předem děkuji za odpověď.
Editoval venus (8. 4. 2009 13:28)
- David Grudl
- Nette Core | 8228
Doporučuji upgradovat na novější verzi PHP. Verze 5.2.0 je velmi špatná. (rozhodně ne echtovní ;) )
- zdvori
- Člen | 10
Stejnou chybu pozoruji i pod PHP 5.2.9-r2 pod 64bit linuxem (gentoo)
s nette 283.
Chyba je nahodila, ale temer vzdy se mi ji podari vyvolat za pomoci vyjimek
okolo MySQL a AuthenticationHandleru. Navrat k PHP 5.2.8 nepomaha. Nezbyva nez
vyzkouset jeste PHP 5.3 ktere jeste neni v repozitarich.
Nesetkali jste se s chybou jeste nekdo?
Zkousel jsem jak apache, tak php kompliovat s DEBUG, ale zadne informace jsem neziskal, zatim nevim presne co chybu zpusobuje, takze nemuzu ani nahlasit jako BUG.
- svoon
- Člen | 2
ahoj,
spravuji webhostingove servery s PHP a bohuzel se mi na verzi 5.2.10 zacalo
obcas stavat, ze stranky psane v nette konci se segmentation fault – bohuzel
takhle nekonci vzdy, ale jen obcas – po reloadu apache /etc/init.d/apache2
reload se nekdy (jednou za den) stane, ze od te doby reloadu prestanou vsechny
weby s nette fungovat.
bohuzel nevim, jak zjistit presne misto v kodu kde se to deje, a nebo jak bug
vubec nahlasit.
ted tam zkousim vratit 5.2.9, tak uvidim jak se to bude chovat.
diky ondra
- svoon
- Člen | 2
tak po 5ti dnech mohu potvrdit, ze ve verzi PHP 5.2.9 se problem neobjevuje,
tzn. ze musi byt v te posledni 5.2.10 verzi.
Mohu vas poprosit o napad jak problematicke misto v kodu Nette nalezt? Bohuzel
v nette se vyznam hodne malo a nepodarilo se mi metodou ‚echo …‘ ani
nalezt problematicke volani, ktere to zpusobuje.
diky ondrej
- A.
- Člen | 87
Tento problem jsem take zaregistroval na debianu, php verze 5.2.0. Ano, bylo
to nekde v souvislosti s AuthenticationHandlerem
, jak tu nekdo
pise. Delalo mi to prave vzdy pri prihlasovani. Moc sem se v tom ale
nestoural.
zdvori napsal(a):
Stejnou chybu pozoruji i pod PHP 5.2.9-r2 pod 64bit linuxem (gentoo) s nette 283.
V produkcnim prostredi pouzivam gentoo php verze 5.2.9-pl2 a vse se zda byt v poradku. Kompilovany na 64bit gcc 4.3.2.