Forum und email

include()

Η δήλωση include() συμπεριλαμβάνει και υπολογίζει το συγκεκριμένο αρχείο.

Το παρακάτω αρχείο εφαρμόζεται και στην require(). Οι δυο δομές είναι όμοιες σε κάθε περίπτωση εκτός από το πώς χειρίζονται την failure (αποτυχία). Η include() παράγει ένα Warning ενώ η require() καταλήγει σε ένα Fatal Error. Με άλλα λόγα, χρησιμοποιήστε την require() αν θέλετε ένα χαμένο αρχείο να σταματήσει την επεξεργασία μιας σελίδας. Η include() δεν συμπεριφέρεται μ'αυτόν τον τρόπο, έτσι το script θα συνεχιστεί. Βεβαιωθείτε ότι έχετε ορίσει το include_path σωστά.

Όταν συμπεριλαμβάνεται ένα αρχείο, ο κώδικας που περιέχει κληρονομεί την variable scope (εμβέλεια της μεταβλητής) στη γραμμή στην οποία εμφανίζεται το include. Όποιες μεταβλητές είναι διαθέσιμες στη γραμμή εκείνη στο αρχείο που καλεί, θα είναι διαθέσιμες και μέσα στο καλούμενο αρχείο, από το σημείο εκείνο και μετά.

Example#1 Βασικά παραδείγματα της include()

vars.php
<?php

$color 
'green';
$fruit 'apple';

?>

test.php
<?php

echo "A $color $fruit"// A

include 'vars.php';

echo 
"A $color $fruit"// A green apple

?>

Αν το include γίνει μέσα σε μια συνάρτηση του αρχείου που κάνει την κλήση, τότε ολόκληρος ο κώδικας που περιλαμβάνεται στο καλούμενο αρχείο θα συμπεριφέρεται σαν να είχε οριστεί μέσα σ'αυτή τη συνάρτηση. Συνεπώς, θα έχει και την εμβέλεια της μεταβλητής αυτής της συνάρτησης.

Example#2 Όταν γίνεται Include μέσα σε συναρτήσεις

<?php

function foo()
{
    global 
$color;

    include 
'vars.php';

    echo 
"A $color $fruit";
}

/* vars.php is in the scope of foo() so     *
 * $fruit is NOT available outside of this  *
 * scope.  $color is because we declared it *
 * as global.                               */

foo();                    // A green apple
echo "A $color $fruit";   // A green

?>

Όταν ένα αρχείο συμπεριλαμβάνεται, κατά τη διάρκεια του parsing βγαίνει εκτός PHP mode και είναι σε HTML mode στην αρχή του αρχείου προορισμού, και συνεχίζει ξανά στο τέλος. Γι'αυτό το λόγο, οποιοδήποτε κομμάτι κώδικα μέσα στο αρχείο προορισμού το οποίο θέλουμε να εκτελείται ως PHP κώδικας πρέπει να βρίσκεται μέσα σε έγκυρα tags έναρξης και τερματισμού της PHP.

Αν τα "URL fopen wrappers" είναι ενεργοποιημένα στην PHP (το οποίο είναι και η προκαθορισμένη επιλογή), μπορείτε να προσδιορίσετε το αρχείο που θα συμπεριλάβετε χρησιμοποιώντας το URL του (διαμέσου HTTP ή άλλον wrapper που υποστηρίζεται - βλέπε List of Supported Protocols/Wrappers για μια λίστα πρωτοκόλων) σε αντίθεση με το τοπικό pathname. Αν ο target server διερμηνεύει το αρχείο προορισμού ως PHP κώδικα, οι μεταβλητές μπορούν να περαστούν στο αρχείο που συμπεριλαμβάνεται χρησιμοποιώντας ένα URL request string όπως χρησιμοποιείται με την HTTP GET. Αυτό δεν είναι απόλυτα το ίδιο με το να συμπεριλάβουμε το αρχείο και να το κάνουμε να κληρονομεί την εμβέλεια των μεταβλητών του αρχείου-γονιού. Το script στην πραγματικότητα εκτελείται στον απομακρυσμένο server και το αποτέλεσμα στη συνέχεια συμπεριλαμβάνεται στο τοπικό script.

Warning

Οι εκδόσεις της PHP για Windows πριν την 4.3.0 δεν έχουν υποστήριξη για πρόσβαση απομακρυσμένων (remote) αρχείων μέσω αυτής της συνάρτησης, ακόμη και αν το allow_url_fopen είναι ενεργοποιημένο.

Example#3 Η include() μέσω HTTP

<?php

/* This example assumes that www.example.com is configured to parse .php
 * files and not .txt files. Also, 'Works' here means that the variables
 * $foo and $bar are available within the included file. */

// Won't work; file.txt wasn't handled by www.example.com as PHP
include 'https://www.example.com/file.txt?foo=1&bar=2';

// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the
// local filesystem.
include 'file.php?foo=1&bar=2';

// Works.
include 'https://www.example.com/file.php?foo=1&bar=2';

$foo 1;
$bar 2;
include 
'file.txt';  // Works.
include 'file.php';  // Works.

?>
Δείτε επίσης τα Remote files, fopen() και file() για σχετικές πληροφορίες.

Επειδή η include() και η require() είναι ιδιαίτερες γλωσσικές δομές, πρέπει να τις συμπεριλάβετε μέσα σε ένα μπλοκ δηλώσεων αν βρίσκονται μέσα σ'ενα μπλοκ υπόθεσης.

Example#4 Η include() και τα μπλοκ υπόθεσης

<?php

// This is WRONG and will not work as desired.
if ($condition)
    include 
$file;
else
    include 
$other;


// This is CORRECT.
if ($condition) {
    include 
$file;
} else {
    include 
$other;
}

?>

Χρησιμοποιώντας τα Returns: Είναι πιθανό να εκτελεστεί μια δήλωση return() μέσα σε ένα εμπεριεχόμενο αρχείο προκειμένου να τερματιστεί η επεξεργασία σε εκείνο το αρχείο και να επιστρέψουμε στο script που το κάλεσε. Επίσης, είναι πιθανό να επιστρέψουμε τιμές από συμπεριλαμβανόμενα αρχεία. Μπορείτε να πάρετε την τιμή από την κλήση της include όπως θα κάνατε και με μια κανονική συνάρτηση.

Note: Στην PHP 3, η return μπορεί να μην εμφανιστεί μέσα σε ένα μπλοκ εκτός και αν είναι ένα μπλοκ συνάρτησης, όπου η return() εφαρμόζεται στην συγκεκριμένη συνάρτηση και όχι σε ολόκληρο το αρχείο.

Example#5 Η include() και η return() δήλωση

return.php
<?php

$var 
'PHP';

return 
$var;

?>

noreturn.php
<?php

$var 
'PHP';

?>

testreturns.php
<?php

$foo 
= include 'return.php';

echo 
$foo// prints 'PHP'

$bar = include 'noreturn.php';

echo 
$bar// prints 1

?>

Η $bar έχει την τιμή 1 επειδή η include ήταν επιτυχής. Παρατηρείστε τις διαφορές στα παραπάνω δυο παραδείγματα. Το πρώτο χρησιμοποιεί την return() μέσα στο συμπεριελαμβανόμενο αρχείο ενώ το άλλο δεν το κάνει. Μερικοί άλλοι τρόποι για να "συμπεριλάβουμε" αρχεία μέσα σε μεταβλητές είναι με τις fopen(), file() ή χρησιμοποιώντας την include() μαζί με τις Output Control Functions.

Note: Επειδή αυτό είναι μια δομή της γλώσσας και όχι μια συνάρτηση, δεν μπορεί να καλεστεί χρησιμοποιώντας συναρτήσεις μεταβλητών

Δείτε επίσης τις require(), require_once(), include_once(), readfile(), virtual(), και την include_path.