Dołączanie plików
Jeżeli nasz skrypt zawiera dużo kodu możemy go podzielić na mniejsze partie, a później „sklejać” w całość. Po co? Zobaczmy.
Wiemy już jaki jest sens dzielenia pliku, ale jak to później połączyć? ano tak:
include()
dołącza plik do kodu, w razie braku pliku generuje ostrzeżenie kontynuując pracę skryptu
include_once()
dołącza plik do kodu jednokrotnie, w razie braku pliku generuje ostrzeżenie kontynuując pracę skryptu
require()
dołącza plik do kodu, w razie braku pliku generuje błąd i przerywa działanie skryptu
require_once()
dołącza plik do kodu jednokrotnie, w razie braku pliku generuje błąd i przerywa działanie skryptu
Funkcje include_once() i require_once() są przydatne jeśli chcemy uniknąć ponownego definiowania funkcji i klas z pliku – PHP sprawdza czy dołączany plik nie był dołączony już wcześniej.
Nasze pliki wyglądają teraz tak:
header.php
<!DOCTYPE html>
<html>
<head>
<title>Przykład</title>
</head>
<body>
menu.php
<div id="menu">
<ul>
<li>Start</li>
<li>Kontakt</li>
</ul>
</div>
footer.php
<p>to jest stopka strony</p>
</body>
</html>
index.php
<?php
require_once("header.php");
require_once("menu.php");
?>
<div>I tutaj umieszczamy wszystko co chcemy na naszej stronie</div>
<?php
require_once("footer.php");
?>
PAMIĘTAJ gdzie znajdują się pliki żeby podać poprawnie ścieżkę dostępu!
ZADANIE: Dostosuj swoją stronę do powyższego przykładu. Podziel ją na poszczególne moduły, a następnie za pomocą require_once() połącz ją w calość.
Funkcje operacji na strukturze systemu plików
Pełną listę funkcji znajdziecie w dokumentacji PHP – funkcje systemu katalogów, poniżej najczęściej wykorzystywane.
is_dir()
czy plik o podanej ścieżce jest katalogiem
is_file()
czy to plik
getcwd()
Wskazuje bieżący katalog roboczy
echo getcwd(); // bieżący katalog w jakim się znajdujesz np. home/php/
chdir()
Zmienia bieżący katalog roboczy (lokalizację) na podany w parametrze.
echo getcwd() . "\n"; // bieżący katalog w jakim się znajdujesz np. home/php/
chdir('public_html'); // zmiana bieżącego katalogu
echo getcwd() . "\n"; // bieżący katalog np. home/php/public_html/
scandir()
Wypisze wszystkie pliki i katalogi z określonej lokalizacji. Pierwszy parametr to lokalizacja katalogu, drugi to sortowanie: 0 (rosnąco – domyślny) lub 1(malejąco)
$dir = '/tmp'; $files1 = scandir($dir); $files2 = scandir($dir, 1); print_r($files1); print_r($files2);
otrzymamy
Array
(
[0] => .
[1] => ..
[2] => bar.php
[3] => foo.txt
[4] => jakiśkatalog
)
Array
(
[0] => jakiśkatalog
[1] => foo.txt
[2] => bar.php
[3] => ..
[4] => .
)
TWORZENIE I USUWANIE KATALOGU
mkdir() i rmdir()
Tworzenie katalogu:
Przykład:
<?php
if (mkdir('nowy_folder')) {
echo "Katalog został utworzony.";
}
?>
Z parametrami (np. prawa dostępu i tworzenie zagnieżdżonych katalogów):
mkdir('a/b/c', 0777, true); // true → rekurencyjnie tworzy strukturę
Usuwanie katalogu:
Przykład:
<?php
if (rmdir('nowy_folder')) {
echo "Katalog został usunięty.";
}
?>
rmdir() działa tylko, jeśli katalog jest pusty.
Funkcje ścieżek — basename(), dirname(), pathinfo()
Służą do analizowania ścieżek bez potrzeby operowania na stringach ręcznie.
basename() — zwraca nazwę pliku
echo basename('/var/www/html/index.php');
// wynik: index.php
dirname() — zwraca katalog nadrzędny
echo dirname('/var/www/html/index.php');
// wynik: /var/www/html
pathinfo() — zwraca tablicę z częściami ścieżki
$info = pathinfo('/var/www/html/index.php');
print_r($info);
/*
Array
(
[dirname] => /var/www/html
[basename] => index.php
[extension] => php
[filename] => index
)
*/
Otwieranie katalogów — opendir(), readdir(), closedir()
Służy do przeglądania zawartości katalogów, np. listowania plików.
<?php
$dir = 'archiwum';
if ($dh = opendir($dir)) {
echo "Zawartość katalogu $dir:<br>";
while (($file = readdir($dh)) !== false) {
echo "• $file<br>";
}
closedir($dh);
}
?>
Wynik zawiera też . (aktualny katalog) i .. (katalog nadrzędny) — można je pominąć:
if ($file != '.' && $file != '..') {
// faktyczny plik
}
Podsumowanie
| Operacja | Funkcja | Uwagi |
|---|---|---|
| Blokowanie pliku | flock() | Zapobiega konfliktom przy zapisie |
| Kopiowanie | copy() | Nadpisuje, jeśli plik istnieje |
| Przenoszenie / zmiana nazwy | rename() | Działa dla plików i katalogów |
| Usuwanie pliku | unlink() | Bez kosza |
| Tworzenie katalogu | mkdir() | Obsługuje tryby i zagnieżdżenie |
| Usuwanie katalogu | rmdir() | Katalog musi być pusty |
| Analiza ścieżek | basename(), dirname(), pathinfo() | Bardzo pomocne przy pracy z uploadem |
| Przeglądanie katalogów | opendir(), readdir(), closedir() | Iteracja po plikach |
Zadanie dla klas, które miały HTMLa:
Rozpocznij tworzenie autorskiego CMS – możesz wykorzystać do tego stronę www, którą posiadasz (nie WordPress, Joomla itp.).
Wydziel z niej bloki odpowiedzialne za formatowanie tych części strony, które się nie zmieniają (jak w przykładzie wyżej) tzn.:
- nagłówek
- menu
- stopka
- część główna strony
- panele boczne
- itp.
