![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam serdecznie!
Uczę się PHP z książki "PHP i MySQL Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie czwarte". Doszedłem do działu "Przechowywanie i wyszukiwanie danych", podrozdział "Przechowywanie i wyszukiwanie zamówień Janka". Jest tam przykład, który ma za zadanie zapisać złożone zamówienie w pliku *.txt Ok, przeanalizowałem kod, troszkę objaśnień w książce jest, ale podczas uruchomienia kodu wystąpił następujący błąd: Cytat Warning: flock() expects parameter 1 to be resource, boolean given in /.../.../.../.../.../.../.../przetworzzamowienie.php on line 67 Zamówienie Państwa nie może zostać przyjęte w tej chwili. Proszę spróbować póniej. Oto fragment kodu: Linia błędu to: Bardzo proszę o pomoc, nie wiem co jest przyczyną tego błędu ![]() Liczę na pomoc i pozdrawiam! |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
Błąd będzie dotyczył:
Cytat "$DOCUMENT_ROOT/form/zamowienia.txt" ? Na moje oko tutaj jest wszystko w porządku. Na moim serwerze parametr "safe_mode" ma ustawioną wartość "Off" a "open_basedir" ma wartość "no value". Trzeba przełączyć je na "On"? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
Coś w ścieżce do pliku masz pomieszane, powinno byś coś w stylu $_SERVER['DOCUMENT_ROOT']
i usuń małpę sprzed $wp = fopen... Ten post edytował _Borys_ 9.02.2013, 14:09:39 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
Mam na początku pliku przypisanie zmiennej:
phpinfo() wskazuje, że: Cytat DOCUMENT_ROOT /home/kubuss/domains/kubuss.pdg.pl/public_html/php Plik z phpinfo() jest umieszczony na subdomenie, na której testuję ten skrypt. Skrypt znajduje się na tej subdomenie w folderze /form/. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
Czytałeś TO ?
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
nie, ale po przeczytaniu tego nadal nie widzę rozwiązania problemu ;/
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze i najważniejsze: wykasuj "@" z kodu. Ukrywanie błędów to samo zło.
Po drugie, lepszą formą jest: Kod $filename = "$DOCUMENT_ROOT/form/zamowienia.txt"; $wp = fopen($filename, 'ab'); if (! $wp) { echo "<p><strong> Zamówienie Państwa nie może zostać przyjęte w tej chwili. Proszę spróbować później.</strong></p></body></html>"; exit; } flock($wp, LOCK_EX); Dlaczego? Ano: 1. po pierwsze, mając nazwę pliku w zmiennej łatwiej nam tę nazwę gdzieś póżniej wyświetlić (np. w komunikacie o błędzie, ale tylko w fazie testowania, bo na produkcji już nie), a zawsze łatwiej zmienić ![]() 2. flock() używamy PO SPRAWDZENIU warunku na możliwość złożenia zamówienia - użytkownik zobaczy tylko komunikat o niemożliwości złożenia zamówienia, a nie zobaczy tekstu "Warning: flock() expects parameter 1 to be resource, boolean given in /.../.../.../.../.../.../.../", który będzie świadczył o (delikatnie mówiąc) nieprzemyśleniu wszystkiego 3. Jeszcze raz o "@" i ukrywaniu błędów: jeśli masz miejsce, w którym może wystąpić błąd, to ZAWSZE można przerobić kod na taki, w którym użycie "@" nie będzie konieczne. Owszem, najczęściej taki kod będzie dłuższy, ale nie będziesz miał takiej sytuacji jak w przykładzie z książki, że błąd odbija się czkawką w zupełnie innym miejscu. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 11.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
Sorki, że dopiero teraz odpowiadam ale znalazłem chwilę czasu.
Po zmianie na Twój kod otrzymałem błąd następującej treści: Cytat Warning: fopen(/home/kubuss/domains/kubuss.pdg.pl/public_html/php/form/zamowienia.txt) [function.fopen]: failed to open stream: Permission denied in /home/kubuss/domains/kubuss.pdg.pl/public_html/php/form/przetworzzamowienie.php on line 66 Błąd dotyczy poniższej linii kodu: Ścieżka do pliku jest na 100% prawidłowa. Ok, poczytałem w necie na temat tego typu błędów. Zmieniłem chmody na 666 i działa. Dziękuję wszystkim za pomoc i chęć pomocy ![]() Ten post edytował Kiubus 16.02.2013, 15:05:05 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 02:59 |