Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Warning: fclose() expects parameter 1 to be resource, integer given in, blad podczas wywolania funkcji fclose()
michat34
post
Post #1





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


witam, oprocz bledu zadam o razu 2. pytanie aby nie zakladac nowego watku. ale najpierw blad (IMG:style_emoticons/default/wink.gif)
kod:
  1. echo 'Rejestracja przebiegla pomyslnie';
  2. $fp = fopen("uzytkownicy.txt",a);
  3. $login2 = $_POST['login2'];
  4. $haslo2 = $_POST['haslo2'];
  5. $fp = fwrite($fp,"$login2|");
  6. fclose($fp);
  7. $fp2 = fopen("passy.txt",a);
  8. $fp2 = fwrite($fp2,"$login2 = $haslo2|");


wyskakuje error - Warning: fclose() expects parameter 1 to be resource, integer given in...

moglby ktos wyjasnic dlaczego? wydaje mi sie ze uzylem wszystkiego jak nalezy, fclose wymaga uchwytu, jest uchwyt: $fp. ale mimo wszystko napewno cos zle zrobilem wiec prosze o wskazanie bledu. i teraz pytanie:
na kursie wyczytalem ze nalezy zamykac pliki funkcja fclose gdy skonczymy cos do nich zapisywac. bylo to dosyc mocno podkreslone. tutaj nie zamknalem ani $fp ani $fp2 i cały skrypt (wydaje sie ze) dziala jak nalezy. stad moje pytanie: co jezeli ignorowaloby sie zamykanie plikow, jakie sa konsekwencje?

dziekuje i pozdrawiam
Go to the top of the page
+Quote Post
pitu
post
Post #2





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


fclose wymaga uchwytu na otwarty plik. U Ciebie $fp wskazuje na
  1. fwrite($fp,"$login2|");


Go to the top of the page
+Quote Post
untorched
post
Post #3





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

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


Lekka poprawka, mam nadzieje, że nie poczujesz się urażony, a jedynie to co dodam pomoże Ci w dalszym pisaniu (IMG:style_emoticons/default/smile.gif)
  1. $login2 = isset($_POST['login2']) ? $_POST['login2'] : ''; // Usunięcie notice
  2. $haslo2 = isset($_POST['haslo2']) ? $_POST['haslo2'] : ''; // j/w
  3. $errors = array(); // zmienna typu array do przechowywania błędów
  4.  
  5. $fp = fopen('uzytkownicy.txt', 'a'); // otwarcie pliku
  6. if($fp !== FALSE) // jeśli zwrot funkcji fopen jest różny od false to znaczy że się udało
  7. {
  8. fwrite($fp, $login2.'|');
  9. fclose($fp);
  10. }
  11. else // nie udało się, dopisanie błędu
  12. {
  13. $errors[] = 'Nie mozna otworzyc pliku uzytkownicy.txt ani zapisac w nim danych!';
  14. }
  15.  
  16. $fp2 = fopen('passy.txt', 'a');
  17. if($fp2 !== FALSE)
  18. {
  19. fwrite($fp2, $login2.' = '.$haslo2.'|');
  20. fclose($fp2);
  21. }
  22. else
  23. {
  24. $errors[] = 'Nie mozna otworzyc pliku passy.txt ani zapisac w nim danych!';
  25. }
  26.  
  27. if($errors == array()) // Nie dodano żadnego błędu
  28. {
  29. echo 'Rejestracja przebiegla pomyslnie';
  30. }
  31. else // Wpisanie listy błędów
  32. {
  33. implode('<br>', $errors);
  34. }


Pyt. 1#: Zapomniałeś o wpisaniu apostrofu(czy jak to się tam zwie) w drugim parametrze funkcji fopen() w obu przypadkach, co prawdopodobnie skutkowało błędem. Ooops, faktycznie, tak jak kolega wyżej zauważył to na pewno wina przypisania zmiennej $fp do funkcji fwrite, ale myślę, że konstrukcja fopen() bez apostrofów również dałaby błąd.

Pyt. 2#: Nie znam prawidłowej odpowiedzi, ale przypuszczam, że wiąże się to z zwolnieniem pamięci.

Ten post edytował untorched 26.08.2012, 01:30:24
Go to the top of the page
+Quote Post
Crozin
post
Post #4





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

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


@untorched: Formalnie, wypadałoby jeszcze sprawdzać czy fwrite i fclose wykonały się w pełni poprawnie. Ot, cudowne API PHP-owskiej biblioteki standardowej.
@michat34: W momencie gdy skrypt PHP kończy swoją pracę wszystkie zewnętrzne zasoby (m.in. uchwyty do plików) są zamykane i zwalniane. Także nawet jeżeli byś w skrypcie mocno nawalił, istnieje duże prawdopodobieństwo, że nic złego się nie stanie. Nie mniej jednak, niezamknięcie pliku:
1. Niepotrzebnie wydłuża czas, gdy jest on otwarty, czyli wydłuża czas istnienia blokady systemowej na pliku.
2. Nie jestem pewien jak wygląda dokładnie implementacja fwrite w PHP, ale istnieje szansa, że jeżeli nie zamkniesz pliku w pewnych przypadkach żadne dane nie zostaną do niego zapisane. Tu należy pamiętać, że ostatecznie PHP zwalnia wszystkie zasoby, ale istnieje możliwość, że jego praca zostanie gwałtownie przerwana (np. brak zasilania).
Go to the top of the page
+Quote Post
michat34
post
Post #5





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


Cytat(pitu @ 26.08.2012, 02:18:44 ) *
fclose wymaga uchwytu na otwarty plik. U Ciebie $fp wskazuje na
  1. fwrite($fp,"$login2|");


faktycznie a jak to poprawic? powinienem po fwrite na nowo go otworzyc (fopen) i wtedy zamknac?
Go to the top of the page
+Quote Post
untorched
post
Post #6





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

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


Cytat(michat34 @ 26.08.2012, 11:39:17 ) *
faktycznie a jak to poprawic? powinienem po fwrite na nowo go otworzyc (fopen) i wtedy zamknac?


To o czym mówisz zostało poprawione w skrypcie który podałem (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 11.10.2025 - 10:49