Prázdný výstup, pád v error_logu (apache)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
repli2dev
Člen | 57
+
0
-

Měl jsem problém a zastaralejší Nette, po updatu jsem měl problémy dva, jejichž projev je téměř stejný:

1. (Po updatu) místo stránky na které mám v kódu formulář, které mu přidávám pravidlo pomocí addRule(…) vidím jen prázdnou stránku, výstup není žádný – v logu apache pak najdu
[Tue Mar 24 15:42:54 2009] [notice] child pid 19291 exit signal Segmentation fault (11)

Tento problém jsem vyřešil rekompilací php navíc s USEflagy posix calendar cgi ctype curl date hash json mysqli pdo postrgres simplexml xsl xmlwriter – přesněji nevím, chvilku to trvá.

2. (Po i před updatem) místo stránky která má vyhodit výjimku autotentifikace při zadání špatných údajů (dle příkladu Akrobat.forms) se zobrazí prázdná stránka (stejná chyba u apache jako v předchozím případě), přihlášení se správnými údaji proběhne OK.

Zkoušel jsem web nasadit na klenot.cz, tam se však chyba vůbec neprojeví. Vše funguje jak očekávám.

Nenapadá někoho, kde by mohl být problém?
Apache 2.2.11 a PHP 5.2.8-r2 (zkoušel jsem i php 5.2.6-r7 – stejný výsledek).

Editoval repli2dev (24. 3. 2009 15:59)

David Grudl
Nette Core | 8228
+
0
-

Máš možnost kód krokovat? Tohle vypadá na chybu mimo jazyk PHP (tedy v PHP samotném nebo nějaké knihovně) a dost těžko se dohledává.

repli2dev
Člen | 57
+
0
-

No Aptana nějakou podporu má, ale nedaří se mi ji zprovoznit při mé konfiguraci.

repli2dev
Člen | 57
+
0
-

Přeci jen se mi podařilo něco vydolovat:
( ! ) Fatal error: Class 'SignalException' not found in /home/mamka/www/libs/Nette/Application/AppForm.php on line 122 (po přidání parametru xdebug do url.

Zcestné, vzniklo chybou v url.

Tak akrobat.forms už funguje, zkoušel jsem metodou copy paste vykoumat který kód to shodí v mém projektu a je to vyhazování podmínek v autentizační třídě:

<?php
/**
 * Users authenticator.
 */
class Users extends Object implements IAuthenticator{

	protected  $connection;

	public function __construct(){
		dibi::connect(Environment::getConfig('database'));
		$this->connection = dibi::getConnection();
		//print_r($this->connection);
	}
	public function authenticate(array $credentials){
		$username = strtolower($credentials[self::USERNAME]);
		$password = $credentials[self::PASSWORD];

		$row = $this->connection->select('*')->from('users')->where('username=%s', $username)->fetch();

		if (!$row) {
			throw new AuthenticationException("User '$username' not found.", self::IDENTITY_NOT_FOUND);
		} else
		if ($row->password !== sha1($credentials[self::PASSWORD])) {
			throw new AuthenticationException("Invalid password.", self::INVALID_CREDENTIAL);
		}

		unset($row->password);
		return new Identity($row->username, NULL, $row);
	}

}

Voláno z

<?php
/**
 * Default presenter - showing entries from db table chosen by URL
 */
class UsersPresenter extends BasePresenter
{
    protected $model;

	protected function startup(){
		//new model
		$this->model = new EntriesModel;
    }

	protected function beforeRender(){
		// fetching menu data
		$this->template->rows = $this->model->getMenu();
		// user info
		$user = Environment::getUser();
		$this->template->user = $user->isAuthenticated() ? $user->getIdentity() : NULL;
	}
    public function renderDefault(){
		$user = Environment::getUser();
		if (!$user->isAuthenticated()){
			$this->redirect('Users:Login');
		}

    }
	public function actionLogin(){
		$form = new AppForm($this, 'noteForm');
		$form->addText('username', 'Uživatelské jméno:')
			->addRule(Form::FILLED, 'Vyplňte prosím uživatelské jméno.');
		$form->addPassword('password', 'Heslo:')
			->addRule(Form::FILLED, 'Vyplňte prosím heslo.');
		$form->addSubmit('send', 'Přihlásit');
		$form->onSubmit[] = array($this,'formSubmitted');
		$form->addProtection('Prosím odešlete tento formulář znovu (bezpečnostní kód vypršel).');
		$this->template->form = $form;
	}
	public function formSubmitted($form){
			try{
				$user = Environment::getUser();
				$user->authenticate($form['username']->getValue(), $form['password']->getValue());
				$this->redirect('Users:');
			} catch (AuthenticationException $e) {
				$form->addError($e->getMessage());
			}
	}
	public function renderLogout(){
		$user = Environment::getUser();
		$user->signOut();
		$this->redirect('Users:');
	}

}

Edit: Tak akrobat sice vyhodí výjimku, ale stejně jako moje autorizace shodí apache na SIGSEGV

Editoval repli2dev (24. 3. 2009 18:47)

repli2dev
Člen | 57
+
0
-

Tak jsem zkompiloval php s useflagem debug (tedy mám debug build phpčka) a funguje to, apache dokonce ani nepadá. Jen si neumím vysvětlit proč to na klenot.cz funguje ačkoliv tam debug build nemají.