Co to jest nowa linia w PHP i jak jej używać w kodzie?
Nowa linia w PHP to jeden z tych elementów, który na pozór wydaje się trywialny, ale potrafi sprawić niemało kłopotów – szczególnie gdy wynik działania skryptu trafia zarówno do przeglądarki, jak i do pliku tekstowego. W PHP nową linię można uzyskać na kilka sposobów, a wybór właściwego zależy od kontekstu, w jakim pracujesz.
Najprostszym i najczęściej używanym sposobem jest użycie sekwencji ucieczki n, która wstawia znak nowej linii (LF, ASCII 10). Działa ona jednak wyłącznie w ciągach ujętych w cudzysłowy podwójne, nie w apostrofach. Przykładowo echo "Wiersz pierwszynWiersz drugi"; w pliku tekstowym lub terminalu wyświetli dwie osobne linie. W systemach Windows natomiast standardem jest sekwencja rn (CR+LF), co ma znaczenie przy generowaniu plików tekstowych kompatybilnych z edytorami na tym systemie.
Jeśli wynik skryptu trafia do przeglądarki internetowej, sam znak n nie wystarczy – HTML ignoruje białe znaki w tym sensie. W takim przypadku należy użyć tagu <br> lub odpowiednio formatować strukturę HTML. Alternatywnie, jeśli zależy Ci na zachowaniu formatowania tekstowego, możesz opakować treść w znacznik <pre>, który respektuje znaki nowej linii i spacje.
PHP udostępnia też stałą PHP_EOL, która automatycznie dobiera właściwy znak nowej linii w zależności od systemu operacyjnego serwera. To szczególnie przydatne przy pisaniu przenośnego kodu, który ma działać zarówno na Linuksie, jak i na Windowsie. Użycie PHP_EOL zamiast sztywno wpisanego n to dobra praktyka przy operacjach na plikach.
Jak ustawić i odczytać cookies w PHP – praktyczny przewodnik
Cookies w PHP to mechanizm przechowywania niewielkich porcji danych po stronie przeglądarki użytkownika. Służą między innymi do zapamiętywania preferencji, utrzymywania sesji logowania czy śledzenia aktywności. PHP obsługuje ciasteczka za pomocą wbudowanych funkcji, a ich obsługa jest stosunkowo prosta, jeśli zna się kilka kluczowych zasad.
Do ustawienia ciasteczka służy funkcja setcookie(). Jej podstawowa składnia wygląda następująco:
setcookie(nazwa, wartość, czas_wygaśnięcia, ścieżka, domena, bezpieczne, httponly);
Przykład praktyczny: setcookie("uzytkownik", "Jan", time() + 3600, "/"); – ustawia ciasteczko o nazwie uzytkownik z wartością Jan, które wygaśnie po godzinie i będzie dostępne w całej domenie. Kluczowa zasada: funkcja setcookie() musi zostać wywołana przed jakimkolwiek wyjściem HTML lub innym tekstem – inaczej pojawi się błąd „headers already sent”.
Odczytanie ciasteczka jest jeszcze prostsze – wystarczy odwołać się do superglobalnej tablicy $_COOKIE. Przykładowo echo $_COOKIE["uzytkownik"]; wyświetli zapisaną wcześniej wartość. Przed użyciem warto jednak sprawdzić, czy dana zmienna w tablicy istnieje, używając isset(), aby uniknąć błędów przy braku ciasteczka.
Usunięcie ciasteczka polega na ustawieniu jego czasu wygaśnięcia w przeszłości: setcookie("uzytkownik", "", time() - 3600, "/");. PHP samo w sobie nie posiada funkcji do bezpośredniego usuwania cookies – ta technika to jedyny skuteczny sposób.
Jak obsługiwać pliki w PHP – otwieranie, czytanie i zapisywanie
Operacje na plikach to jeden z fundamentalnych elementów programowania w PHP. Niezależnie od tego, czy chcesz zapisać logi aplikacji, wczytać konfigurację z pliku tekstowego, czy przetworzyć dane CSV – PHP oferuje bogaty zestaw funkcji do pracy z systemem plików.
Otwieranie pliku odbywa się za pomocą funkcji fopen(), która przyjmuje dwa podstawowe argumenty: ścieżkę do pliku oraz tryb otwarcia. Najważniejsze tryby to:
r– otwiera plik tylko do odczytu, wskaźnik ustawiony na początku plikuw– otwiera plik do zapisu, tworzy nowy lub nadpisuje istniejącya– otwiera plik do dopisywania danych na końcu, nie kasuje istniejącej zawartościr+– otwiera plik do odczytu i zapisu jednocześniex– tworzy nowy plik do zapisu, zwraca błąd jeśli plik już istnieje
Po otwarciu pliku dane można odczytywać linijka po linijce funkcją fgets() lub pobrać całą zawartość jednym wywołaniem fread(). Dla prostszych przypadków PHP oferuje wygodniejszą funkcję file_get_contents(), która zwraca zawartość pliku jako ciąg znaków bez konieczności ręcznego otwierania i zamykania zasobu.
Zapis do pliku realizuje funkcja fwrite(), a jej odpowiednikiem dla prostszych operacji jest file_put_contents(). Ta ostatnia domyślnie nadpisuje plik, ale z flagą FILE_APPEND dopisuje dane na końcu. Po zakończeniu operacji zawsze należy zamknąć plik funkcją fclose() – zapobiega to wyciekom zasobów i problemom z blokadą pliku.
Jak poprawnie wyświetlać polskie znaki w PHP i unikać problemów z kodowaniem?
Problemy z polskimi znakami w PHP – czyli literami takimi jak ą, ę, ó, ś, ź, ż, ć, ń, ł – to klasyczny ból głowy wielu programistów, szczególnie tych stawiających pierwsze kroki. Źródło kłopotów leży zazwyczaj nie w samym PHP, ale w niespójności kodowania na różnych poziomach: pliku skryptu, bazy danych i nagłówków HTTP.
Podstawą jest upewnienie się, że plik PHP jest zapisany w kodowaniu UTF-8. Większość nowoczesnych edytorów kodu (VS Code, PhpStorm, Sublime Text) domyślnie używa UTF-8, ale warto to sprawdzić, bo zapis w innym kodowaniu – np. ISO-8859-2 (Latin-2) – to najczęstsza przyczyna krzaczków. Plik zapisany w UTF-8 bez BOM jest standardem dla aplikacji webowych.
Kolejny krok to wysłanie odpowiedniego nagłówka HTTP informującego przeglądarkę o używanym kodowaniu. Służy do tego:
header('Content-Type: text/html; charset=UTF-8');
Nagłówek ten musi zostać wysłany przed jakąkolwiek treścią strony. Alternatywnie (lub dodatkowo) można umieścić w sekcji <head> dokumentu HTML znacznik <meta charset="UTF-8">.
Przy operacjach na ciągach znaków zawierających polskie litery warto sięgnąć po funkcje z przedrostkiem mb_ (multibyte string). Standardowe funkcje PHP jak strlen(), strtolower() czy substr() traktują znaki jako bajty, co przy UTF-8 prowadzi do błędnych wyników. Ich odpowiedniki – mb_strlen(), mb_strtolower(), mb_substr() – obsługują wielobajtowe kodowania poprawnie i powinny być używane zawsze, gdy tekst może zawierać znaki spoza ASCII.
Jakie funkcje PHP służą do operacji na plikach i katalogach?
PHP dysponuje rozbudowanym zestawem funkcji do zarządzania systemem plików. Znajomość tych narzędzi pozwala na sprawne tworzenie, przenoszenie, usuwanie i przeszukiwanie plików oraz katalogów bez potrzeby sięgania po zewnętrzne biblioteki.
Do najczęściej używanych funkcji plikowych należą:
file_exists()– sprawdza, czy plik lub katalog o podanej ścieżce istniejeis_file()iis_dir()– rozróżniają, czy ścieżka wskazuje na plik czy katalogcopy()– kopiuje plik z jednej lokalizacji do drugiejrename()– zmienia nazwę pliku lub przenosi go do innego kataloguunlink()– usuwa plik (odpowiednik poleceniarmw systemach Unix)mkdir()– tworzy nowy katalog, opcjonalnie z całą ścieżką (recursive: true)rmdir()– usuwa pusty katalogscandir()– zwraca tablicę zawierającą nazwy plików i podkatalogów w podanym katalogufilesize()– zwraca rozmiar pliku w bajtachfilemtime()– zwraca czas ostatniej modyfikacji pliku jako timestamp Unix
Do bardziej zaawansowanego przeszukiwania katalogów warto poznać klasę DirectoryIterator lub RecursiveDirectoryIterator z biblioteki SPL. Umożliwiają one iterowanie po zawartości katalogów w sposób obiektowy i obsługę zagnieżdżonych struktur folderów bez pisania rekurencji od zera.
Przy pracy z plikami tymczasowymi przydatna jest funkcja tmpfile(), która tworzy plik tymczasowy automatycznie usuwany po zamknięciu skryptu, oraz sys_get_temp_dir() zwracająca ścieżkę do katalogu tymczasowego systemu operacyjnego.
Dlaczego cookies w PHP nie działają i jak to naprawić?
Ciasteczka w PHP potrafią sprawiać problemy nawet doświadczonym programistom. Najczęstszą przyczyną jest wysłanie nagłówków po treści strony. Cookies są częścią nagłówków HTTP, które muszą zostać wysłane przed jakimkolwiek wyjściem – nawet przed pojedynczą spacją czy pustą linią przed tagiem <?php. Błąd „Cannot modify header information – headers already sent” to właśnie sygnał tego problemu.
Innym częstym błędem jest nieprawidłowa ścieżka lub domena w parametrach funkcji setcookie(). Jeśli ciasteczko zostało ustawione dla ścieżki /panel/, nie będzie dostępne pod adresem /sklep/. Ustawienie ścieżki na / sprawia, że ciasteczko jest dostępne w całej domenie.
Warto też sprawdzić kilka innych potencjalnych przyczyn problemów z cookies:
- Przeglądarka może mieć zablokowane ciasteczka – sprawdź ustawienia prywatności lub tryb incognito
- Ciasteczko z flagą
Securedziała wyłącznie przez HTTPS – na lokalnym serwerze HTTP nie zostanie zapisane - Parametr czasu wygaśnięcia ustawiony w przeszłości powoduje natychmiastowe usunięcie ciasteczka przez przeglądarkę
- Niezgodność domeny – ciasteczko ustawione dla
www.domena.plnie jest dostępne poddomena.plbez odpowiedniej konfiguracji
Przy debugowaniu cookies pomocne są narzędzia deweloperskie przeglądarki (zakładka Application → Cookies w Chrome lub Storage → Cookies w Firefox), gdzie można podejrzeć wszystkie zapisane ciasteczka, ich wartości, czas wygaśnięcia i flagi bezpieczeństwa.
Jak bezpiecznie zarządzać plikami w PHP – najlepsze praktyki
Operacje na plikach w PHP wiążą się z poważnymi konsekwencjami bezpieczeństwa, jeśli nie są realizowane z odpowiednią starannością. Nieodpowiednio zabezpieczona obsługa plików może prowadzić do ujawnienia wrażliwych danych, nadpisania krytycznych plików systemowych, a w skrajnych przypadkach – do wykonania złośliwego kodu na serwerze.
Walidacja ścieżek plików to absolutna podstawa. Nigdy nie należy bezpośrednio używać danych od użytkownika jako ścieżki do pliku. Atak zwany „path traversal” polega na podaniu ścieżki w stylu ../../etc/passwd, co może prowadzić do odczytu plików spoza zamierzonego katalogu. Funkcja realpath() pozwala rozwiązać ścieżkę do postaci bezwzględnej, a następnie można sprawdzić, czy zaczyna się od dozwolonego katalogu bazowego.
Przy obsłudze przesyłanych przez użytkowników plików (upload) kluczowe jest sprawdzenie rzeczywistego typu pliku za pomocą rozszerzenia Fileinfo (finfo_file()), a nie poleganie wyłącznie na rozszerzeniu nazwy pliku czy nagłówku MIME przesłanym przez przeglądarkę – oba mogą być sfałszowane. Pliki przesłane przez użytkowników nigdy nie powinny być przechowywane w katalogu publicznie dostępnym przez serwer WWW bez dodatkowych zabezpieczeń.
Uprawnienia do plików i katalogów powinny być ustawione zgodnie z zasadą minimalnych uprawnień. PHP nie potrzebuje uprawnień do zapisu w katalogu, z którego tylko czyta. Unikaj tworzenia plików z uprawnieniami 777 – zazwyczaj wystarczy 644 dla plików i 755 dla katalogów. Przy operacjach na plikach warto też stosować blokowanie pliku funkcją flock(), aby zapobiec sytuacjom wyścigu przy jednoczesnym dostępie wielu procesów.
Jak połączyć obsługę plików, cookies i polskich znaków w jednym projekcie PHP?
Połączenie tych trzech elementów w spójnie działającą aplikację wymaga świadomości, jak każdy z nich wpływa na pozostałe – i gdzie mogą się pojawić subtelne konflikty.
Wyobraź sobie prosty system, który zapisuje preferencje językowe użytkownika w ciasteczku, a następnie wczytuje odpowiedni plik z tłumaczeniami zawierającymi polskie znaki. Kolejność operacji ma tu kluczowe znaczenie: najpierw muszą zostać wysłane wszystkie nagłówki HTTP (w tym te ustawiające cookies i deklarujące kodowanie UTF-8), a dopiero potem może nastąpić jakiekolwiek wyjście HTML.
Przy zapisywaniu danych zawierających polskie znaki do pliku tekstowego należy upewnić się, że plik jest otwierany i zapisywany w kodowaniu UTF-8. PHP samo w sobie nie konwertuje kodowania podczas zapisu – jeśli ciąg znaków jest w UTF-8, zostanie zapisany w UTF-8. Problem pojawia się, gdy dane pochodzą z formularza HTML, bazy danych lub zewnętrznego API z innym kodowaniem. W takim przypadku pomocna jest funkcja mb_convert_encoding(), która pozwala na jawną konwersję między kodowaniami.
Przy odczycie pliku zawierającego polskie znaki i wyświetlaniu jego zawartości w przeglądarce warto pamiętać, że funkcja file_get_contents() zwraca surowy ciąg bajtów. Jeśli plik jest w UTF-8, a strona zadeklarowana jako UTF-8, wszystko będzie działać poprawnie. Jeśli jednak gdzieś w łańcuchu pojawi się inne kodowanie, polskie znaki zamienią się w nieczytelne symbole.
Dobrą praktyką przy budowaniu takich projektów jest ustawienie na samym początku głównego pliku PHP kilku standardowych konfiguracji: wysłanie nagłówka z kodowaniem, ustawienie domyślnego kodowania dla funkcji mb_* za pomocą mb_internal_encoding('UTF-8') oraz obsługa błędów. Taki fundament eliminuje większość problemów z kodowaniem, zanim w ogóle się pojawią, i sprawia, że cały projekt działa spójnie – niezależnie od tego, czy dane trafiają do pliku, ciasteczka czy bezpośrednio na ekran użytkownika.




