Różnica między wymaganiem, włączeniem, wymaganiem i włączeniem?


Odpowiedzi:


1426

requirei include_oncerównież.

Więc twoje pytanie powinno być ...

  1. Kiedy należy używać requireVs. include?
  2. Kiedy powinienem używać require_oncevs.require

Odpowiedź na 1 została opisana tutaj .

Funkcja requ () jest identyczna z funkcją include (), z tym wyjątkiem, że inaczej obsługuje błędy. Jeśli wystąpi błąd, funkcja include () generuje ostrzeżenie, ale skrypt będzie kontynuował wykonywanie. Wymagana () generuje błąd krytyczny, a skrypt zostanie zatrzymany.

Odpowiedź na 2 można znaleźć tutaj .

Instrukcja Requ_once () jest identyczna z instrukcją wymaganą (), z tym wyjątkiem, że PHP sprawdzi, czy plik został już dołączony, a jeśli tak, to nie uwzględni (ponownie) go.


58
Umysł, który wymaga (), wykonuje się szybciej niż wymaganie_once (), więc jeśli masz pewność, że nie ma duplikatów, należy użyć funkcji need ().
dialex

48
@DiAlex, wymagany_dowolny jest wolniejszy, ale prawie nie można go zmierzyć.
Umowa prof. Falkena została naruszona

77
@DiAlex ... i jeśli okaże się, że plik jest już dołączony, require_once()będzie to szybsze z nich
Tom

11
@ Prof.Falken W jakich okolicznościach potrzebny jest ten sam plik więcej niż jeden raz? Nie mogę wymyślić jednego w moim obecnym nastawieniu.
Weishi Zeng

17
@WeishiZeng dla stron internetowych mogą istnieć fragmenty HTML, które chcesz dołączyć więcej niż jeden raz.
James Beninger,

406

Posługiwać się

  • wymagają,
    gdy plik jest wymagany przez twoją aplikację, np. ważny szablon wiadomości lub plik zawierający zmienne konfiguracyjne, bez których aplikacja by się zepsuła.

  • wymagany_zadany,
    gdy plik zawiera treść, która spowodowałaby błąd przy kolejnym dołączeniu, np. function important() { /* important code */}jest zdecydowanie potrzebny w Twojej aplikacji, ale ponieważ nie można ponownie zadeklarować funkcji, nie należy go ponownie włączać.

  • dołącz, gdy plik nie jest wymagany, a przepływ aplikacji powinien być kontynuowany, gdy nie zostanie znaleziony, np.
    doskonały do ​​szablonów odwołujących się do zmiennych z bieżącego zakresu lub czegoś

  • include_once
    opcjonalne zależności, które spowodowałyby błędy przy kolejnym ładowaniu lub może zdalne dołączenie pliku, którego nie chciałbyś powtórzyć dwa razy z powodu narzutu HTTP

Ale w zasadzie od Ciebie zależy, kiedy go użyć.


Mam połączenie PDO (z bazą danych) . Czy powinienem użyć który? include? include_once? require? require_once?
Shafizadeh

6
Powinna to być zaakceptowana odpowiedź, ponieważ odpowiada ona w skrócie na pytanie i prowadzi do oficjalnej instrukcji, zamiast innej odpowiedzi zawierającej tylko w3schools.
Daniel W.,

9
podaj mi powód, dla którego chcesz go dołączyć, jeśli nie jest to konieczne?
Francisco Ochoa

1
Używam szablonu dla ogólnego układu strony, który ma sekcje takie jak nagłówki, kolumny, stopki itp. To pozwala mi wyświetlać ten szablon dla każdej strony w witrynie i muszę tylko tworzyć pliki w strukturze folderów stron, określające powinien wejść na każdą z tych pozycji. Jeśli zdecyduję, że strona nie potrzebuje paska bocznego, po prostu pomijam ten plik w folderze dla tej strony, a szablon nadal działa dobrze bez tego pliku.
James Coyle

301

Moja sugestia to wykorzystanie require_once99,9% czasu.

Użycie requirelub includezamiast tego oznacza, że ​​kodu nie można użyć w innym miejscu, tzn. Że pobierane skrypty faktycznie wykonują kod zamiast udostępniać klasę lub niektóre biblioteki funkcji.

Jeśli potrzebujesz / włączasz kod, który jest wykonywany na miejscu, jest to kod proceduralny i musisz poznać nowy paradygmat . Podobnie jak programowanie obiektowe, programowanie funkcyjne lub programowanie funkcjonalne.

Jeśli już zajmujesz się programowaniem OO lub programowaniem funkcjonalnym, używanie include_oncebędzie głównie opóźniało to, gdzie na stosie znajdziesz błędy / błędy. Czy chcesz wiedzieć, że funkcja do_cool_stuff()nie jest dostępna, kiedy zadzwonisz po nią później lub w momencie, gdy spodziewasz się, że będzie ona dostępna , wymagając biblioteki? Zasadniczo najlepiej jest natychmiast wiedzieć, czy coś, czego potrzebujesz i czego oczekujesz, nie jest dostępne, więc po prostu użyj require_once.

Alternatywnie, we współczesnym OOP, po prostu automatycznie załaduj swoje klasy po użyciu.


41
+1 To powinna być zaakceptowana odpowiedź. Kluczowe punkty to to, że includerodzina jest zwykle złym pomysłem (ponieważ bardzo rzadko dołącza się pliki, które mają jakiekolwiek możliwości nieistnienia), i poza tym, require_oncei requirepowinieneś używać, require_oncegdy dołączasz pliki, które definiują funkcje lub klasy, które mają być używane w innym miejscu lub tworzenie pojedynczych elementów, takich jak obiekty połączenia z bazą danych, i używanie requiredo dołączania plików, które natychmiast robią rzeczy, gdy zostaną uwzględnione. W każdej dużej aplikacji internetowej ten drugi rodzaj dołączania jest niezwykły.
Mark Amery

7
+1 (mają kolejną złotą odznakę;)) Zgadzam się, że rozsądnie require_oncenajprawdopodobniej kandydat będzie używany prawie przez cały czas. Biorąc pod uwagę niewielkie różnice ogólne między opcjami, requirezapewnia zatrzymanie skryptu, nie mogę myśleć o wielu scenariuszach, w których aplikacja może przetrwać bez dołączenia pliku. I _oncechroni przed problemami z duplikatem. Każdy, kto się nie zgadza, prawdopodobnie wie, co robi, może wybrać dowolną, która odpowiada aplikacji lub scenariuszowi.
James

hej mam plik, który czasami jest zawarty na stronie indeksu i man time nazywany bezpośrednio (home.php) ........... teraz już załączyłem plik konfiguracyjny na stronie indeksu z funkcją wymaganą teraz mogę użyć wymaganego_once w home.php, aby zapobiec ponownym włączeniom
Ravinder Payal

@RavinderPayal Cóż, moja pierwsza rada to oszczędzić sobie bólu głowy za pomocą kontrolera! To, że użytkownik dzwoni do example.com/home, nie oznacza, że ​​powinieneś mieć całkowicie oddzielny home.php! Zamiast tego / home / powinien po prostu kierować przez kontroler frontowy index.php lub front.php. Tylko php naprawdę pozwala na podejście oldschoolowego „jeden skrypt na stronę” i wierzcie mi, to nie jest najlepszy sposób. Ale jeśli MUSISZ mieć osobne home.php i index.php, wówczas wszystko, co MOŻE PRZEJŚĆ ZARÓWNO, powinno znajdować się w pliku lub szablonie biblioteki, ../templates/home.tpl lub ../view/home.view.php wiesz?
Kzqai,

SNS i ja początkowo wybieramy jeden plik na jedną stronę dla łatwego programowania i jego duży stos plików, których nie mogę odtworzyć, a teraz rozwiązałem ten problem, a drugim powodem tworzenia jednego pliku na jednej stronie jest szybkość i mniejszy kontakt z dyskiem twardym przez malejąca liczba
włączeń

36

Różnica między funkcjami _once i bez funkcji _once: bez kodu _once zostanie ponownie dołączony, natomiast w przypadku funkcji _once PHP śledzi dołączone pliki i uwzględni je tylko raz.

Różnica między wymaganiem a włączeniem: jeśli nie zostanie znaleziony wymagany plik, PHP wygeneruje błąd krytyczny, podczas gdy w przypadku dołączenia zostanie wyświetlone tylko ostrzeżenie.


1
Wow, krótkie i proste!
Vlad

31

include() wyśle ​​ostrzeżenie, jeśli nie może dołączyć pliku, ale reszta skryptu zostanie uruchomiona.

require()wyrzuci E_COMPILE_ERRORi zatrzyma skrypt, jeśli nie może dołączyć pliku.

Funkcje include_once()i require_once()nie dołączą pliku po raz drugi, jeśli został już dołączony.

Zobacz następujące strony dokumentacji:


22

Ilekroć używasz, require_once()możesz użyć w pliku, aby dołączyć inny plik, gdy potrzebujesz wywoływanego pliku tylko jeden raz w bieżącym pliku. Tutaj w przykładzie mam test1.php.

<?php  
echo "today is:".date("Y-m-d");  
?>  

oraz w innym pliku o nazwie test2.php

<?php  
require_once('test1.php');  
require_once('test1.php');  
?>

gdy oglądasz m wymagający pliku test1 dwa razy, ale plik będzie zawierał test1 raz i dla wywołania za drugim razem zostanie to zignorowane. I bez zatrzymania wyświetli wynik jednorazowo.

Ilekroć używasz 'include_once ()', można użyć w pliku, aby dołączyć inny plik, gdy potrzebujesz więcej niż jeden raz wywoływany plik w bieżącym pliku. Tutaj w przykładzie mam plik o nazwie test3.php.

<?php  
echo "today is:".date("Y-m-d");  
?> 

I w innym pliku, który nazwałem test4.php

<?php  
include_once('test3.php');  
include_once('test3.php');  
?>

podczas oglądania m, w tym plik test3, załączy plik jeden raz, ale zatrzyma dalsze wykonywanie.


„przykład lepszy niż rada”
Ramesh Kithsiri Hetti Arachchi

19

Użyj „dołącz” dla szablonów PHP wielokrotnego użytku . Użyj „wymagaj” dla wymaganych bibliotek.

„* _once” jest fajne, ponieważ sprawdza, czy plik jest już załadowany, czy nie, ale ma sens tylko dla mnie w „Requ_once”.


18

Definicje klas i funkcji powinny być uporządkowane w plikach.

Służy require_once()do ładowania zależności (klas, funkcji, stałych).

Służy require()do ładowania plików podobnych do szablonów .

Służy include_once()do ładowania opcjonalnych zależności (klas, funkcji, stałych).

Służy include()do ładowania opcjonalnych plików podobnych do szablonów .


16

Odpowiedź po 7 latach na 2018 rok

To pytanie zostało zadane siedem lat temu i żadna z odpowiedzi nie stanowi praktycznej pomocy dla pytania. We współczesnym programowaniu PHP używasz required_oncetylko raz, aby dołączyć klasę autoloadera (często autoloader kompozytora), i załaduje wszystkie twoje klasy i funkcje (pliki funkcji muszą zostać jawnie dodane do composer.jsonpliku, aby były dostępne we wszystkich innych plikach). Jeśli z jakiegokolwiek powodu twojej klasy nie można załadować z autoloadera, którego używasz require_oncedo załadowania.

Jest kilka okazji, z których musimy skorzystać require. Na przykład, jeśli masz naprawdę dużą definicję tablicową i nie chcesz dodawać jej do kodu źródłowego definicji klasy, możesz:

 <?php
// arr.php
return ['x'=>'y'];

 <?php
//main.php
$arr= require 'arry.php'

Jeśli plik, który zamierzasz dołączyć, zawiera coś wykonywalnego lub deklaruje niektóre zmienne, prawie zawsze musisz go użyć require, ponieważ jeśli użyjesz require_onceoprócz pierwszego miejsca, twój kod nie zostanie wykonany i / lub twoje zmienne nie będą cicho inicjowane, powodując błędy, które są absolutnie trudne do ustalenia.

Nie ma praktyczny przypadek użycia dla includei include_oncenaprawdę.


+1 za wzmiankę o autoloaderze. Ostatnie zdanie jest jednak sporne. Dość często użyjesz include()owiniętego bufora wyjściowego, aby zaimplementować silnik szablonów.
haz

Ponadto, biorąc pod uwagę nowoczesne edytory tekstu i nowoczesne PHP, prawie nikt nie używa require()do dzielenia dużych plików.
haz

Napotkałem ten sam problem podczas korzystania require_oncez PHPMailer wewnątrz funkcji, a mój autoloader definiuje $mailzmienną potrzebną później w kodzie, więc następny require_oncezostaje zignorowany, który $mailnie został zainicjowany! rozwiązaniem było po prostu użyć requirepo wywołaniu funkcji.
Youssef

@haz Czy jest jakiś powód, dla którego nie korzystasz requirew takich przypadkach?
PHPst

@ChristofferBubach LOL.
PHPst

15

Różnica polega na błędzie generowanym przez polecenia. Dzięki requireplikowi, którego chcesz użyć, jest naprawdę wymagany i dlatego generuje, E_ERRORjeśli nie został znaleziony.

require()jest identyczny z include() wyjątkiem awarii, spowoduje również E_ERROR błąd krytyczny poziomu.

includegeneruje E_WARNINGbłąd tylko w przypadku niepowodzenia, który jest mniej lub bardziej cichy.

Użyj go, jeśli plik jest wymagany, aby pozostały kod działał i chcesz, aby skrypt nie zadziałał. Plik nie jest dostępny.


Dla *_once():

include_once() może być używany w przypadkach, w których ten sam plik może zostać dołączony i oceniony więcej niż jeden raz podczas konkretnego wykonania skryptu, więc w tym przypadku może pomóc uniknąć problemów, takich jak redefinicje funkcji, zmiany przypisania wartości zmiennych itp.

To samo dotyczy require_once()oczywiście.


Numer referencyjny: require(),include_once()


requiredaje E_COMPILE_ERROR, a nie E_ERROR.
Yousha Aleayoub,

Wygląda na to, że zmieniło się w ciągu ostatnich 7 lat.
Felix Kling

9

Z wymaganiem plik musi istnieć, jeśli nie, pojawi się błąd; natomiast z włączeniem - jeśli plik nie istnieje, to strona będzie nadal ładować.


8

Wymagaj części krytycznych, takich jak autoryzacja i dołącz wszystkie pozostałe.

Wiele załączników to po prostu bardzo zły projekt i należy go w ogóle unikać. Tak więc * _once nie ma znaczenia.


7

Dołącz / Wymagaj , możesz dołączyć ten sam plik więcej niż jeden raz:

Wymagana () jest identyczna z włączoną (), ale w przypadku awarii spowoduje także wystąpienie krytycznego błędu poziomu E_COMPILE_ERROR. Innymi słowy, zatrzyma skrypt, podczas gdy include () emituje tylko ostrzeżenie (E_WARNING), które pozwala skryptowi kontynuować.

Wymagaj_once / include_once

jest identyczny z włączeniem / wymaganiem, z tym wyjątkiem, że PHP sprawdzi, czy plik został już dołączony, a jeśli tak, to nie dołącz (wymagaj) go ponownie.


5

include()wygeneruje ostrzeżenie, gdy nie znajdzie pliku, ale require_once()wygeneruje błąd krytyczny.

Inną kwestią jest to, czy plik jest dołączany wcześniej. Wówczas require_once()nie będzie go uwzględniać.


5

Korzystałem z funkcji, jak poniżej:

function doSomething() {
    require_once(xyz.php);
    ....
}

W xyz.php zadeklarowano stałe wartości.

Muszę wywołać tę funkcję doSomething () z innego pliku skryptu PHP.

Ale obserwowałem zachowanie podczas wywoływania tej funkcji w pętli, dla pierwszej iteracji doSomething () uzyskiwał stałe wartości xyz.php, ale później każda iteracja doSomething()nie była w stanie uzyskać zadeklarowanych wartości stałych xyz.php.

Rozwiązałem problem, przechodząc z require_once()na include(), zaktualizowany doSomething()kod wygląda następująco:

function doSomething() {
    include(xyz.php);
    ....
}

Teraz każde wywołanie iteracji doSomething()otrzymuje stałe wartości zdefiniowane wxyz.php .


4

Z instrukcji :

require()jest identyczny z include()wyjątkiem awarii, spowoduje również E_COMPILE_ERRORbłąd krytyczny poziomu. Innymi słowy, zatrzyma skrypt, podczas gdy include()emituje tylko ostrzeżenie ( E_WARNING), które pozwala na kontynuowanie skryptu.

To samo dotyczy _once()wariantów.


4

W dobie PSR-0 / PSR-4autoloaderów może być zupełnie niepotrzebne korzystanie z którejkolwiek z instrukcji, jeśli wszystko, czego potrzebujesz, to udostępnić kodowi niektóre funkcje / klasy (oczywiście nadal musisz się require_onceautoloader w pliku bootstrap i includeszablonach, jeśli nadal używam PHP jako silnika szablonów).


3

 

  1. Kiedy należy użyć requirelub include?

    Funkcje requirei includewykonują to samo zadanie, tj. Obejmuje i ocenia określony plik, ale różnica polega na requiretym, że błąd krytyczny spowoduje błąd krytyczny, gdy określona lokalizacja pliku będzie nieprawidłowa lub wystąpi dowolny błąd,include wygeneruje ostrzeżenie i kontynuuje wykonywanie kodu.

    Możesz więc użyć tej requirefunkcji w przypadku, gdy plik, który próbujesz dołączyć, jest sercem systemu i może mieć ogromny wpływ na resztę kodu i możesz użyćinclude funkcji, gdy plik, który próbujesz dołączyć, jest prosty plik zawierający nieco mniej ważny kod.

    A moim osobistym zaleceniem (w przypadku mniej ważnego kodu) jest wybranie requirefunkcji w dowolnym miejscu w kodzie, gdy jest on w fazie programowania, tak aby można było debugować kod, a następnie zastąpić wszystkie requirefunkcje includefunkcją przed przeniesieniem go do wersji produkcyjnej, aby w razie pominięcia wszelkie błędy nie wpłyną na użytkownika końcowego, a reszta kodu zostanie wykonana poprawnie ...

  2. Kiedy należy użyć require_oncelubrequire?

    Podstawową różnicą między requirei require_oncejest require_oncesprawdzenie, czy plik jest już dołączony, czy nie, jeśli jest już dołączony, to nie uwzględni pliku, podczas gdyrequire funkcja obejmie plik niezależnie od tego, czy plik jest już dołączony, czy nie.

    Tak więc w przypadkach, w których chcesz raz po raz włączyć jakiś fragment kodu, użyj requirefunkcji, a jeśli chcesz dołączyć jakiś kod tylko raz w kodzie, użyj require_once.


2
  1. Użyj funkcji wymaganej, gdy musisz załadować dowolną klasę, funkcję lub zależność.

  2. Użyj funkcji dołączania, gdy chcesz załadować plik w stylu szablonu

Jeśli nadal jesteś zdezorientowany, po prostu używaj wymaganego przez cały czas.


1

Są to wszystkie sposoby dołączania plików.

Wymagaj oznacza, że ​​tego potrzebuje. Require_once oznacza, że ​​będzie go potrzebował, ale wymaga go tylko raz. Uwzględnij oznacza, że ​​będzie zawierać plik, ale nie musi go kontynuować.

Przykłady:

Require 'filename'
Require_once 'filename'
Include 'filename'

Istnieje również funkcja include_once, która zawiera plik raz.

Include_once 'filename'

Nie używaj wielkich liter tam, gdzie mam, pisząc z telefonu.


1

jedną rzeczą, którą zauważyłem, gdy korzystam z opcji Dołącz, mogę uzyskać dostęp tylko do funkcji dołączonych plików z pliku, który ją zawiera. Dzięki wymaganiu mogę uruchomić tę funkcję w drugim pliku wymagane_pomnie.

też: polecam dodanie

if(file_exists($RequiredFile)){
    require_once($RequiredFile);
}else{
  die('Error: File Does Not Exist');
}

Ponieważ gdy request_once zabija stronę, czasami może wywołać echo katalogu plików Twojej witryny

Oto niestandardowa funkcja, którą stworzyłem, aby wymagała plików:

function addFile($file, $type = 'php', $important=false){
    //site-content is a directory where I store all the files that I plan to require_once
    //the site-content directory has "deny from all" in its .htaccess file to block direct connections
    if($type && file_exists('site-content/'.$file.'.'.$type) && !is_dir('site-content/'.$file.'.'.$type)){
        //!is_dir checks that the file is not a folder
        require_once('site-content/'.$file.'.'.$type);
        return 'site-content/'.$file.'.'.$type;
    }else if(!$type && file_exists('site-content/'.$file) && !is_dir('site-content/'.$file)){
        //if you set "$type=false" you can add the file type (.php, .ect) to the end of the "$file" (useful for requiring files named after changing vars)
        require_once('site-content/'.$file);
        return 'site-content/'.$file;
    }else if($important){
        //if you set $important to true, the function will kill the page (which also prevents accidentally echoing the main directory path of the server)
        die('Server Error: Files Missing');
        return false;
    }else{
        //the function returns false if the file does not exist, so you can check if your functions were successfully added
        return false;
    }
}

przykład użycia:

$success = addFile('functions/common');

if($success){
    commonFunction();
}else{
    fallbackFunction();
}

0

Zasadniczo, jeśli potrzebujesz złej ścieżki, PHP zgłasza błąd krytyczny i wywoływana jest funkcja zamykania, ale jeśli podasz niewłaściwą ścieżkę, PHP będzie kontynuować wykonywanie, ale wyświetli ostrzeżenie, że plik nie istnieje.

Z angielskiego słowa wymaganego PHP wynika, że ​​wykonanie strony lub pliku zależy od wymaganego pliku.

Z mojego doświadczenia wynika, że ​​normalnie wymagane są ważne pliki, takie jak pliki konfiguracyjne, klasy baz danych i inne ważne narzędzia.


0

Często zależy od tego, czy chcesz warunkowo załadować bibliotekę klienta, czy też załadować ją bez względu na to, czy chcesz z niej korzystać.

Oto konkretny przykład; opracowanie tego, co powiedział pcj.

Załóżmy, że masz plik konfiguracyjny przechowujący nazwę użytkownika i hasło do bazy danych (conf.php):

<?php
//my site configuration file

//For Database
$location='localhost';
$dbuser='yourname';
$userpw='yourpassword';
$database='nameofdatabase';
?>

I klasa z funkcją statyczną, która korzysta z bazy danych:

<?php
class UsedInLoop {
    public static function databaseQuery(){
        require(/path/to/conf.php);                //require_once will not work here
        $db = new mysqli($location, $dbuser, $userpw, $database);
        //yada yada yada
    }
}
?>

I ta funkcja statyczna jest używana wewnątrz innej funkcji, która jest wywoływana iteracyjnie w pętli:

<?php
require_once('path/to/arbitraryObject.php');  //either will likely be OK at this level
$obj = new arbitraryObject();
foreach($array as $element){
    $obj->myFunction();
}
?>

Możesz wymagać / dołączyć klasę tylko raz. Jeśli potrzebujesz / dołączasz go do każdej iteracji swojej pętli, pojawi się błąd. Należy jednak dołączyć plik conf za każdym razem, gdy wywoływana jest funkcja statyczna.

<?php
class arbitraryObject {
    public function myFunction(){
        require_once(/path/to/UsedInLoop.php);   //This must be require_once. require() will not work
        UsedInLoop::databaseQuery();
    }
}
?>

Oczywiście przeniesienie go poza funkcję może być rozwiązaniem tego problemu:

<?php
require(/path/to/UsedInLoop.php);   //now require() is fine   
class arbitraryObject {
    public function myFunction(){
        UsedInLoop::databaseQuery();
    }
}
?>

Chyba że zajmujesz się obciążeniami związanymi z ładowaniem klasy, która może być używana tylko w określonych warunkach i nie chcesz jej ładować, gdy nie jest.


-1

requirema większy narzut niż include, ponieważ musi najpierw przeanalizować plik. Wymiana requiresz includesczęsto jest to technika dobra optymalizacja.


2
Wiem, że to późny komentarz, ale tak naprawdę nie jest to prawdą. requirenie analizuje pliku bardziej niż includerobi. Każda z _oncewersji tych funkcji ma trochę narzutów, ale jak powiedzieli inni, w większości aplikacji jest prawie nieistotna.
ahouse101

-2

Wystarczy użyć wymaga i obejmuje.

Ponieważ zastanów się, jak pracować z include_once lub replace_once. To szuka danych dziennika, które zapisują dołączone lub wymagane pliki PHP. To jest wolniejsze niż włączanie i wymaganie.

if (!defined(php)) {
    include 'php';
    define(php, 1);
}

Po prostu używam w ten sposób ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.