Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF][ZendFramework] Dziwny Internal Server Error
Forum PHP.pl > Forum > PHP > Frameworki
Piotrbaz
Witajcie, mam mały problem z aplikacją w Zend 1.12.

URL: http://pbazyl.webd.pl/speedwaystats/public/
Mianowicie w przeglądarce wszystko chodzi bez błędów, ale podczas próby walidacji natrafiłem na 500 Internal Server Error.
Chodzi o kod w Bootstrapie związany z translacją.

Bootstrap.php
  1. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
  2.  
  3. function _initSetTranslations() {
  4.  
  5. $this->bootstrap('layout');
  6. $layout = $this->getResource('layout');
  7. $view = $layout->getView();
  8.  
  9. $translate = new Zend_Translate('array', APPLICATION_PATH . '/langs', null, array('scan' => Zend_Translate::LOCALE_FILENAME));
  10.  
  11. $session = new Zend_Session_Namespace('language');
  12.  
  13. $locale = new Zend_Locale();
  14.  
  15. if (isset($session->language)) {
  16.  
  17. $requestedLang = $session->language;
  18. $locale->setLocale($requestedLang);
  19. } else {
  20. $locale->setLocale(Zend_Locale::BROWSER);
  21. $requestedLang = key($locale->getBrowser());
  22. }
  23.  
  24.  
  25. if (in_array($requestedLang, $translate->getList())) {
  26. $lang = $requestedLang;
  27. } else {
  28. $lang = 'pl';
  29. }
  30.  
  31. $translate->setLocale($lang);
  32. $view->translate = $translate;
  33.  
  34. Zend_Registry::set('Zend_Translate', $translate);
  35. }
  36.  
  37. }


Sprawdzam czy w sesji jest ustawiony język (zmienna sesji ustawiana jest w akcji kontrolera). Jeżeli nie, to pobieram pierwszy w kolejności z ustawień przeglądarki. Sprawdzam czy język jest w folderze /application/langs, jeżeli nie, ładuję polski.
Problem w tym, że coś tutaj powoduje error 500 mad.gif

Logi apache:
  1. [Fri Aug 02 23:33:43 2013] [warn] [client 66.220.152.115] mod_fcgid: stderr: PHP Fatal error: Uncaught exception 'Zend_Locale_Exception' with message 'Autodetection of Locale has been failed!' in /home/pbazyl/public_html/speedwaystats/library/Zend/Locale.php:1045
  2. [Fri Aug 02 23:33:43 2013] [warn] [client 66.220.152.115] mod_fcgid: stderr: #0 /home/pbazyl/public_html/speedwaystats/library/Zend/Locale.php(486): Zend_Locale::_prepareLocale('browser')
  3. [Fri Aug 02 23:33:43 2013] [warn] [client 66.220.152.115] mod_fcgid: stderr: #1 /home/pbazyl/public_html/speedwaystats/application/Bootstrap.php(24): Zend_Locale->setLocale('browser')
  4. [Fri Aug 02 23:33:43 2013] [warn] [client 66.220.152.115] mod_fcgid: stderr: #2 /home/pbazyl/public_html/speedwaystats/library/Zend/Application/Bootstrap/BootstrapAbstract.php(669): Bootstrap->_initSetTranslations()
  5. [Fri Aug 02 23:33:43 2013] [warn] [client 66.220.152.115] mod_fcgid: stderr: #3 /home/pbazyl/public_html/speedwaystats/library/Zend/Application/Bootstrap/BootstrapAbstract.php(622): Zend_Application_Bootstrap_BootstrapAbstract->_executeResource('settranslations')
  6. [Fri Aug 02 23:33:43 2013] [warn] [client 66.220.152.115] mod_fcgid: stderr: #4 /home/pbazyl/public_html/speedwaystats/library/Zend/Application/Bootstrap/BootstrapAbstract.php(586): Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap(NULL)
  7. [Fri Aug 02 23:33:43 2013] [warn] [client 66.220.152.115] mod_fcgid: stderr: #5 /home/pbazyl/public_html/speedwaystats/library/Zend/Application.php(355): Zend_Application_Bootstrap_BootstrapAbstract->bootst in /home/pbazyl/public_html/speedwaystats/library/Zend/Locale.php on line 1045



Help
Spawnm
Sprawdź na innej wersji php czy dzieje się to samo, obstawiam buga php.
Piotrbaz
Niestety, to samo.

Sprawdziłem na 5.2.13 i 5.3.6.
redeemer
Fragment kodu, który rzuca ten wyjątek to:
  1. ...
  2. // This can only happen when someone extends Zend_Locale and erases the default
  3. if ($locale === null) {
  4. require_once 'Zend/Locale/Exception.php';
  5. throw new Zend_Locale_Exception('Autodetection of Locale has been failed!');
  6. }
  7. ...
Zostawiając komentarz, to debuguj co się dzieje ze zmienną $locale w tej klasie. Ewentualnie spróbój może w konstruktorze od razu podać 'pl'.
Piotrbaz
Cytat(redeemer @ 3.08.2013, 21:37:55 ) *
Ewentualnie spróbój może w konstruktorze od razu podać 'pl'.


Podobną sugestię znalazłem gdzieś w google, ale to niestety również nie to.
Przeżywam drobne problemy z xdebugiem, ale walczę dalej.

EDIT:


Jest pewien przełom. Problem jest na pewno z tym fragmentem:

  1. $locale->setLocale(Zend_Locale::BROWSER);
  2. $requestedLang = key($locale->getBrowser());
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.