30 dniowy kurs php – dzień 13 – include/require


Back-end (php, mysql)

Być może pamiętasz czasy stron tworzonych w czystym htmlu. Jeśli strona miała np. 10 podstron to każda z nich była osobnym plikiem html. W przypadku jakichkolwiek zmian trzeba było edytować każdy plik. Każdy. Zmiana np. linka w menu wymagała ręcznej edycji wszystkich plików. Dzisiaj na szczęście są już na to łatwiejsze sposoby.

Z pomocą przychodzi nam funkcja include lub require (o różnicach za moment). Funkcje te wklejają zawartość jednego pliku w drugi. Jeśli jakiś fragment kodu powtarza nam się na wielu podstronach najłatwiej jest go includować. Wtedy kod do każdej z podstron pobierany jest z includowanego pliku. Znacząco ułatwia to życie webdevelopera.

Include po pierwsze sprawdza czy plik, który podaliśmy istnieje. Jeśli nie istnieje zwracany jest błąd, ale reszta strony ładuje się bez zakłóceń. Warto jednak dodać poznany już znak @, który w razie gdy plik nie zostanie odnaleziony nie wyświetli brzydkie błędu.

Require również sprawdza czy plik istnieje, również zwraca błąd w przypadku jego braku. Ale, jeśli plik nie zostanie odnaleziony strona po prostu się nie wczyta. Jeśli masz więc jakieś ważne elementy do includowania, bez których reszta strony może nie działać poprawnie to użyj require. Jeśli są to elementy, nie konieczne do prawidłowego funkcjonowania witryny używaj include najlepiej jeszcze ze znakiem @.

Przejdźmy do praktycznego przykładu. Stworzymy sobie prostą stronę, którą podzielimy na poszczególne elementy. Na początek załóżmy, że mamy prostą stronę typu html, która wygląda tak:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Strona</title>
<style>
body{
margin:0;
font-family:sans-serif;
}
#menu, #content{
font-weight:bold;
font-size:80px;
text-align:center;
width:960px;
margin:0 auto;
}
#menu{
background:#F7FFC4;
}
#content{
background:#C4E4FF;
}
</style>
</head>
<body>
<div id="menu">
MENU
</div>
<div id="content">
NOWA STRONA
</div>
</body>
</html>

Pora podzielić to na elementy, które będą się powtarzały i wdrożyć w życie funkcje include i require. Stwórz więc 4 pliki:

header.php

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Strona</title>
<style>
body{
margin:0;
font-family:sans-serif;
}
#menu, #content{
font-weight:bold;
font-size:80px;
text-align:center;
width:960px;
margin:0 auto;
}
#menu{
background:#F7FFC4;
}
#content{
background:#C4E4FF;
}
</style>
</head>
<body>
<div id="menu">
MENU
</div>

content.php

<div id="content">
NOWA STRONA
</div>

footer.php

</body>
</html>

index.php

<?php require 'header.php'; ?>
<?php @include 'content.php'; ?>
<?php require 'footer.php'; ?>

Ale co jeśli chcemy zrobić to bardziej profesjonalnie. Czyli powiadomić użytkownika w sposób tekstowy, że strona nie może zostać dalej wczytana, jeśli np. plik header.php nie zostanie odnaleziony.

Dobrze byłoby też dać nazwy plików w zmiennych aby później łatwo zmienić np. treść strony typu content.

Bardziej rozbudowany plik index.php będzie więc wyglądał następująco:

<?php
# zmienne = nazwy plików
$header = 'header.php';
$content = 'content.php';
$footer = 'footer.php';
# sprawdź czy istnieje plik header
if(file_exists($header))
{
require $header;
}
else
{
die ('wystąpił błąd, strona nie może zostać dalej wczytana');
}
# wczytaj plik content
@include $content;
# sprawdź czy istnieje plik footer
if(file_exists($footer))
{
require $footer;
}
else
{
die ('wystąpił błąd, strona nie może zostać dalej wczytana');
}
?>

I w ten oto sposób doszła nam jeszcze jedna nowa funkcja – file_exists() gdzie w nawiasach podajemy nazwę pliku, a funkcja sprawdza czy taki plik istnieje.

To tyle na dzisiaj, jutro zajmiemy się datami. Czyli wyświetlanie aktualnego czasu, dnia tygodnia, roku itp.