![]() |
![]() ![]() |
![]() |
![]()
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 :
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 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Standardowa biblioteka PHP praktycznie w ogóle nie wykorzystuje wyjątków. Będziesz musiał to samemu sprawdzić (is_writable itp.) i ręcznie rzucić wyjątek. Ewentualnie możesz poszukać jakieś biblioteki-nakładki na funkcje f*(), która robiłaby to już za Ciebie.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
ale to jak? proponujesz tak:
zrobiłem tak i tylko zauważyłem że długo się skrypt wykonywał, tak jakby próbował parę razy wykonać tą operację zapisu albo jakby nie mógł znaleźć ścieżki do zapisu .. czy czegoś mi tu brakuje ? bo myślałem że jakieś warningi dostanę czy coś ... ale nic ... |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 31 Dołączył: 14.12.2010 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
spróbuj utworzyć plik, i nadać mu uprawnienia readonly,wywołaj następnie sam zapis i zobaczysz jaki błąd dostaniesz.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
ok zrobiłem najpierw tak:
i dostałem tak: "Plik /zap/hurt/test.txt nie istnieje" następnie zrobiłem tak:
i otrzymałem tak: "The file is not writable" a więc wyraźnie widać że nie może znaleźć katalogu i nie może zapisać tam tego pliku ... wniosek ? nie mam uprawnień ? katalog na pewno istnieje ponieważ admin twierdzi że go utworzył ... skoro tak dużo się dowiedziałem ... można jeszcze coś wymyśleć aby sprawdzić dlaczego są problemy .? ... czy pewne że nie mam uprawnień (IMG:style_emoticons/default/questionmark.gif) ? proszę o propozycje dzięki Ten post edytował damianooo 29.11.2011, 10:26:55 |
|
|
![]()
Post
#6
|
|
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: 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. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
apropo tego co napisał CROZIN ... chyba szkoda zachodu .... zrobiłem tak jak wcześniej napisałem .. powiedz mi co z tego wynika .. jeśli nie działa is_writeable oraz is_exists no to czy na pewno jest już peewne że nie mam uprawnień ? ... co może być jeszcze ?
wychodzi na to że muszę męczyć admina w firmie , bo to on pewnie stoi za tym i powinien wszystko sprawdzić jeszcze dokładnie |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
a nie lepiej po prostu skorzystać z splFileObject ?
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
melkorm ...
czyli że tak:
albo tak:
tylko czy coś więcej informacji wyłuskam wprost z serwera (IMG:style_emoticons/default/questionmark.gif) ? Ten post edytował damianooo 29.11.2011, 10:49:53 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat a nie lepiej po prostu skorzystać z splFileObject ? Już myślałem, że właśnie popisałem się nieznajomością tak starej części SPL-a, która dawałaby namiastkę sensownego API ale... deweloperzy PHP jak zwykle dali dupy i nie potrafili wprowadzić normalnej obsługi błędów. Czyli na dobrą sprawę pozostaje się z dokładnie tym samym problemem co przy funkcjach f*().
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Fakt - sam wyjątek jest tylko rzucany przy tworzeniu obiektu, właśnie zobaczyłem że dla fwrite zwraca NULL w przypadku błędu, eh.
Czyli kontrolować na poziomie klasy możesz tylko tworzenie obiektu, czyli: Cytat Throws a RuntimeException if the filename cannot be opened. PS. Zawsze można dopisać jakąś sensowną nakładkę. Ten post edytował melkorm 29.11.2011, 11:04:43 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie no to co chcesz osiągnąć można osiągnąć, chociażby w ten sposób:
Możesz jeszcze dodatkowo do tego dołożyć zamiast is_readable sprawdzanie czy to plik, czy to katalog, w sumie co chcesz. Męczące jest robienie tego często tam gdzie się chce coś zapisać/odczytać i fajnie by było gdyby php rzucało w takich przypadkach wyjątki jeżeli masz zdefiniowanego swojego handlera wyjątków, no ale jak już wyżej napisano, tak nie jest (IMG:style_emoticons/default/wink.gif) Nie mniej, dokładnie więcej informacji się nie dowiesz, to że nie możesz zapisać tych danych to raczej najprawdopodobniej problem z uprawnieniami zapisu. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
ok admin naprawił swój błąd ...
a żeby w php nie było fajnej obsługi wyjątków to skandal (IMG:style_emoticons/default/smile.gif) .. delikatnie mówiąc .. pozostaje czekać na nową wersję PHPa - pewnie tam już to będzie ... dzięki wszystkim za usiłowanie pomocy ... za pomoc najbardziej dziękuję CROZINowi ... bo w sumie wystarczyło sprawdzić tylko is_writable lub file_exists aby wiedzieć czemu nie chce się plik utworzyć w podanym katalogu temat zamknięty pozdrawiam |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Obsługa wyjątków jest, tylko że 99% metod została stworzona gdy jeszcze obsługi wyjątków i w ogóle OOP w PHP nie było.
I nie zapowiada się by cokolwiek w tej materii się zmieniło. Ewentualnym rozwiązaniem jest set_error_handler. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 18.09.2025 - 01:19 |