Error při přesunu na produkční server
- ezop
- Člen | 12
Ahoj, je to mé první použití Nette a moc se mi nedaří přesunout vytvořenou aplikaci na server (PHP 5.2.17). Původně jsem použil Nette 2 alpha 2 pro PHP 5.3, ale to jsem neznal ještě konfiguraci serveru a tak jsem stahl Nette pro PHP 5.2 s prefixy, přepsal aplikaci otestoval na localu (zde mám verzi 5.2.6) a zkusil jí na produkčním serveru, kde se v logu objevula hláška:
PHP Fatal error: Uncaught exception DibiDriverException with message '' in /.../libs/dibi/drivers/mysql.php:110 @ http://.../sign/in?do=signInForm-submit
Prosím o radu, kde bych měl hledat chybu (už nevím kde a co hledat :( ), jestli opravdu někde u dibi nebo ve své aplikaci, ale na localhostu mi vše šlape tak jak má, tak mám podezření, jestli není chyba například ve špatné verzi PHP na serveru.
Díky za odpověd.
- ezop
- Člen | 12
config.neon:
common:
php: # PHP configuration
date.timezone: Europe/Prague
# session.save_path: "%tempDir%/sessions"
# zlib.output_compression: yes
services:
model:
class: Model
arguments: [@database]
connection:
class = DibiConnection
option: ['%database%']
authenticator:
class: Authenticator
arguments: [@connection]
nastaveni:
strankovani:
ukoly: 5
database:
driver: mysql
host: localhost
charset: utf8
profiler: true
production < common:
database:
username: root
password:
database: msi
development < common:
database:
username: root
password:
database: msi
console < common:
ale stejnou chybu mi to hází i na localu pod php 5.2.1, na vyšší verzi to šlape, bohužel server na hostingu nemám možnost ovlivnit. Databázi samozřejmě vytvořenou mám.
Editoval ezop (22. 1. 2012 12:08)
- ezop
- Člen | 12
...
// Load configuration from config.neon file
$configurator = new NConfigurator;
$configurator->container->params += $params;
$configurator->container->params['tempDir'] = dirname(__FILE__) . '/../temp';
$container = $configurator->loadConfig(dirname(__FILE__) . '/config.neon');
$configurator->container->getService('robotLoader'); // force RobotLoader to be registered
//databaze
dibi::connect( $container->params['database'] );
...
- ezop
- Člen | 12
tak v bootstrap.php se mi nepodařilo tuhle proměnnou odchytit, házé mi to pořád chybu (i když by se to mělo vyřešit kodováním bez BOM, tak to nepomáha):
session_start(): session_start(): Cannot send session cache limiter - headers already sent (output started at C:\Users\Jana\Downloads\xampp-win32-1.6.0a\xampp\htdocs\msib\libs\Nette\Diagnostics\Debugger.php:586)
- ezop
- Člen | 12
pilec napsal(a):
zkus před ten dump
if ($container->session->exists()) { $container->session->start(); }
(Vypujčeno z aktuálního bootstrapu)
pomohlo to, dump $container->params[‚database‘] je zde:
array(7) {
username => "root" (4)
password => NULL
database => "msi" (3)
driver => "mysql" (5)
host => "localhost" (9)
charset => "utf8" (4)
profiler => TRUE
}
- ezop
- Člen | 12
pilec napsal(a):
Ok, doposud sicko v rychtiku. Chtělo by to vědět, jakou přesnou verzi máš Dibi\Connection.
Tak mě napadlo, máš vůbec propojené mysql a php?
používám Xampp pro windows, všechno by mělo být už nakonfigurované, ale jak jsem již psal, pokud nainstaluji novejší Xampp, samozřejmě s novější verzí php a mysql, tak vše šlape.
když záměrně zadám špatné přihlašovací údaje do databáze, tak se vypíše chyba v laděnce:
Access denied for user 'root'@'localhost' (using password: YES)
což podle mě naznačuje, že databáze je nějak připojena
ale tahle chyba se objevuje hned po spuštění, kdežto předtím, až při po odeslání přihlašovacího formuláře, tak jestli není chyba ještě v Athenticator.php:
class Authenticator extends NObject implements IAuthenticator
{
/**
* Performs an authentication
* @param array
* @return Nette\Security\Identity
* @throws Nette\Security\AuthenticationException
*/
public function __construct() {
}
public function authenticate(array $credentials)
{
list($nick, $heslo) = $credentials;
//$row = $this->users->where('username', $username)->fetch();
$row = dibi::fetch('
SELECT *
FROM [uzivatele]
WHERE [nick] = %s', $nick
);
if (!$row) {
throw new NAuthenticationException("Uživatel '$nick' nebyl nalezen.", self::IDENTITY_NOT_FOUND);
}
if ($row->heslo !== $this->calculateHash($heslo)) {
UzivateleModel::IncrementBadLogin($row->iduzivatele);
if ($row->neuspesne_prihlaseni > 5){
UzivateleModel::povolit($row->iduzivatele, false);
}
else
throw new NAuthenticationException("Neplatné heslo.", self::INVALID_CREDENTIAL);
}
if (!$row->povolen) {
throw new NAuthenticationException("Uživatel byl zablokován.", self::IDENTITY_NOT_FOUND);
}
UzivateleModel::ClearBadLogin($row->iduzivatele);
unset($row->heslo);
return new NIdentity($row->iduzivatele, $row->role, $row);
}
Editoval ezop (22. 1. 2012 15:08)
- Pavel Kouřil
- Člen | 128
Zkus změnit tu option u dibi connection na následující :)
connection:
class = DibiConnection
option: %database%
- Pavel Kouřil
- Člen | 128
Nevím jak teď, ale dřív fungovaly AFAIK obě..
A jsi si jistý, že jsi tam to [''] nepřidal při snaze to opravit? :)