Konstruktionen omfatter

11. 9. 2019
Støtte PHP 4, PHP 5, PHP 7
Kort beskrivelse Tilføjer en anden tekstfil eller et andet script til scriptet.
Krav Anden tekstfil eller script, der skal indsættes.
Bemærk Kan ikke indlæse eksterne filer.

Beskrivelse

Indsætter en anden tekstfil eller et script på siden. Understøtter almindelige/tekstfiler.

Indlejrede filer opfører sig, som om de var direkte på siden.

Indlejrede scripts udføres automatisk.

Det indlejrede script overfører værdien af variabler.

Kan ikke indlæses fra eksternt lager. Kan kun læse almindelig uformateret tekst og PHP-filer.

Tilladte stiformater:

  • script.php - fil i samme mappe, vil blive eksekveret
  • script.html - fil i samme mappe, vil ikke blive eksekveret
  • ./file.php - fil i samme mappe, vil blive udført
  • ../page.html
  • folder\file\file.php - skriv i Windows
  • address/DalsiAddress/file.php - skrivning på Unix-systemer

Skråstreger af typen **** og **/** kan interkonverteres, så du behøver ikke at tage dig af det.

Ulovlig stiangivelse: https://domena.pripona/slozka/soubor.php

Lignende funktioner

Eksempel

php
include 'file.php';

Den indsætter scriptet file.php i siden og kører det.

vars.php

php
$color = 'grøn';
$fruit = 'æble';

test.php

php
$color = '';
$fruit = '';
echo 'A' . $color . '' . $fruit; // A
include 'vars.php';
echo 'A' . $color . '' . $fruit; // Et grønt æble

ADVARSEL: Følgende notation er ikke mulig, overfør indholdet af variabler ved at definere dem!

php
include 'file.php?parameter=neco';

Returneringsværdier

Ingen, lægger bare filen ind.

BEMÆRK: Giver dig mulighed for at sammenligne filindhold, men det er en sikkerhedsrisiko. Rækkefølgen af parenteserne er vigtig! Eksempel:

php
if ((include 'file.php') == 'OK') {
echo 'Værdien er "OK".';
}

Dette er en potentiel sikkerhedsrisiko!

Kan løses med file_get_contents(), readfile() eller fopen(). Fopen() bør kun bruges til .txt- og .html-filer.

Sikker læsning af filen kan løses ved at definere en brugerdefineret funktion.

Eksempel:

php
$string = get_include_contents('somefile.php');
function get_include_contents(string $filename): ?string
{
if (is_file($filename)) {
ob_start();
include (string) $filename;
return ob_get_clean();
}
return null;
}

Noter og tips fra andre udviklere

Jakub Vrána sendte mig en e-mail:

php
include 'artikler/' . $_GET['Artikel'] . '.html';

Det er ekstremt farligt.

En angriber kan sende et link til en anden mappe ved at bruge ../ eller noget lignende som artikelnavn, og nogle gange er det muligt at slippe af med enden ved at sende en null-byte i slutningen.

Du bør i det mindste bruge funktionen basename(), men det er bedre kun at tillade whitelist-værdier.

Jan Barášek
Jan BarášekVíce o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Newsletter

Nejlepsi tipy a triky o PHP do Vaseho e-mailu. Clanky a novinky nejen ze sveta PHP a programovani.