Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> przechwycenie wyjątku przy tworzeniu pliku, try catch fopen
damianooo
post
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Witam,

Mam problem z zapisem pliku w miejscu sieciowym na serwerze i chciałbym teraz poprzez przechwycenie wyjątku dowiedzieć się jaki jest problem, tzn. : czy jest problem z uprawnieniami , czy z błędną ścieżką czy może jeszcze coś innego ...

zrobiłem tak :

  1. try
  2. {
  3. $dane = "jakiś tam tekst\n";
  4. $file = "/zap/hurt/test.txt";
  5. $fp = fopen($file, "a");
  6. flock($fp, 2);
  7. fwrite($fp, $dane);
  8. flock($fp, 3);
  9. fclose($fp);
  10. }
  11. catch( Exception $e )
  12. {
  13. $danes = "Komunikat: ".$e->getMessage().". Plik: ".$e->getFile().". Wiersz: ".$e->getLine()."\r\n";
  14. $files = "info_log.txt";
  15. $fps = fopen($files, "a");
  16. flock($fps, 2);
  17. fwrite($fps, $danes);
  18. flock($fps, 3);
  19. fclose($fps);
  20. }


jednak nie uzyskuję żadnej informacji w pliku info_log.txt , a plik test.txt nie zostaje utworzony

Proszę o pomoc czy dobrze próbuję przechwycić wyjątek czy może powinienem to zrobić w inny sposób ...

dziękuję

Ten post edytował damianooo 29.11.2011, 09:52:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


No widzisz, niestety PHP od 7 lat (od czasu wprowadzenia wyjątków) nie doczekało się żadnych istotnych zmian w jego bibliotece standardowej i nadal jest na tym z poziomu roku 1999 (chyba). Nie pojawiła się też żadna wiodąca biblioteka zastępująca standardową, tak więc nadal jest się zdanym samym na siebie.

I tak, niestety będziesz musiał zrobić coś w stylu:
  1. $path = '...';
  2.  
  3. try {
  4. if (!file_exists($path)) {
  5. throw ...;
  6. }
  7.  
  8. if (!is_writable($path)) {
  9. throw ...;
  10. }
  11.  
  12. if (($fh = fopen(...)) === false) {
  13. throw ...;
  14. }
  15.  
  16. if (!fwrite(...)) {
  17. throw ...;
  18. }
  19.  
  20. if (!fclose(...)) {
  21. throw ...;
  22. }
  23. } catch (MyIOException $mioe) {
  24. ...
  25. }
Oczywiście jeżeli w wyjątkach chciałbyś przemycić coś więcej niż tylko "nie udało się zapisać", np. konkretny powód takiej niemożliwości, musiałbyś kombinować ze zmienną $php_errormsg, bo API funkcji f*() nie udostępnia żadnego normalnego sposobu do dobrania się do treści błędu - ewentualnie użyć error_handlera, ale to mocno ograniczające podejście.

Oczywiście radziłbym napisać jakąś nakładę na powyższy kod, bo coś Cię trafi, jeżeli będziesz za każdym razem pisać taką obsługę błędów - pomijając fakt, że przy takiej formie niewiele się z wyjątków zyskuje.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 18:22