Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Nie do końca poprawnie działający Zend Log
Forum PHP.pl > Forum > PHP > Frameworki
orideith
Witam Was mam taki dosyć dziwny problem.
Chciałem sobie rozszeżyć klasę logera na dodatkowe opcje więc przerobiłem ją tak
  1. <?php
  2. class logger extends Zend_Log_Writer_Stream {
  3. private $_file;
  4. public function __construct($filename) {
  5. $path = APPLICATION_PATH . '/log/' . $filename . '.txt';
  6. if (!file_exists($path)) {
  7. fopen($path, 'w+');
  8. chmod($path, '755');
  9. }
  10. $this->_file = fopen($path, 'a', false);
  11. }
  12.  
  13. public function info($mess, $prior = 1) {
  14. $log = new Zend_Log(new Zend_Log_Writer_Stream($this->_file));
  15. $log->log($mess, $prior);
  16. }
  17. }
  18. ?>



Wywołanie w skócie wygląda tak
  1. require_once '../library/Logger.php';
  2. class models_jakastabela extends Zend_Db_Table_Abstract {
  3. private $_logger;
  4. public function __construct() {
  5. parent::__construct();
  6. $logger = new logger('db');
  7. $this->_logger = $logger;
  8. }
  9.  
  10. public function addSettings($data) {
  11. $data = array(
  12. 'idproducts' => $data['idproducts'],
  13. 'idatribute' => $data['idatribute'],
  14. 'column' => $data['column']
  15. );
  16. try {
  17. $this->insert($data);
  18. return 1;
  19. } catch (Zend_Db_Exception $e) {
  20. $this->_logger->info('Add atrib: ' . $e->getMessage());
  21. return 0;
  22. }
  23. }

I niestety to skutkuje takim błędem o ile wyjątek się wykona "Resource id #xx" cannot be opened with mode "a",

Wszystko stoi na windowsie, dodam jeszcze bo to ważne, że dane w pliku w tym przypadku db.txt zapisują się. Więc nie wiem czemu tak się dzieje?

Będe wdzięczny za pomoc i uwagi co do samej klasy, bo nie jestm pewien czy nie można jej ładnej napisać.

Pozdrawiam
Oskar


irmidjusz
Może chodzi o to, że najpierw otwierasz plik w trybie "w+" i od razu (bez zamknięcia pliku) otwierasz po raz drugi w trybie "a"? Strzelam.
orideith
Nawet bardzo strzelasz, ponieważ w +w otwierany jest tylko jeśli nie istnieje.
irmidjusz
hehe no a co z tym właśnie przypadkiem? nie istnieje, jest otworzony w "w+" a następnie w "a"? nie ma problemu z tym?
YaQzi
ja też obstawiam to co irmidjusz. Brakuje fclose

pierwsza próba logowania wywali Ci błąd. kolejne już będa zapisywać normalnie do pliku, bo plik będzie istniał.
Pilsener
Bo trzeba było dać exit po linijce błędu i oczywiście upewnić się, czy wyświetlanie błędów jest włączone. No i jak się używa takich funkcji to warto sprawdzić, czy poprawnie się wykonały, czy mamy dostęp itp. itd. Nie polecam też tworzyć plików przez fopen bo spotkałem się z problemami - lepsze jest touch.
orideith
z touch sproboje, exit nie chce dawac, mam wlasne komunikaty na błedy a same bledy nie chce by zakłucały pracę aplikacji. Wole informowac dokladnie uzytkownika co sie stało oczywiscie o ile nie koliduje to z bezpieczeńtwem.

Pozdrawiam
Pilsener
Ale tylko na chwilę przecież ten exit dasz by przeanalizować ten fragment kodu wink.gif
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.