Lezioni di informatica

Php richiede una descrizione. Funzioni PHP: require(), require_once(), include(), include_once()

Layout di pagina

13.22. operatore require()

L'istruzione require() funziona in modo simile alla direttiva del preprocessore #include() nel linguaggio di programmazione C++. Se hai familiarità con questo linguaggio, padroneggiare i seguenti operatori non sarà difficile per te, tuttavia, anche se non hai familiarità, cercheremo di descrivere più in dettaglio i principi di funzionamento di questi operatori. L'operatore require() sostituisce, richiama il contenuto dei file il cui percorso e nome sono stati specificati nel blocco operatore:

require("percorso/nomefile.html");

Se i parametri URL PHP fopen_wrapper_SB sono impostati su abilitato (in genere sono predefiniti), è anche possibile definire il file nell'istruzione require() utilizzando un URL (Uniform Resource Locator) invece di utilizzare il percorso locale del file richiesto nel file require() istruzione, ad esempio:

$url = http://mio_nuovo_indirizzo/index.phtml;

L'istruzione require() non è una funzione. Molto probabilmente può essere definito un costrutto linguistico. Perché non possiamo considerare questo operatore una funzione:

Require() non è subordinato ad alcuna struttura di controllo;

Require() non restituisce alcun valore, cosa che fa una funzione.

Un tentativo di richiamare qualsiasi valore da un'istruzione require() risulterà in un errore e interromperà l'ulteriore esecuzione del programma.

A differenza di include, require legge sempre la riga dell'indirizzo del file, anche quando non viene eseguito. Se è necessario includere un file in modo condizionale, utilizzare l'istruzione include(). Le espressioni semplicemente condizionali non sono considerate efficaci quando si lavora con l'istruzione require. Tuttavia, se la riga su cui si trova l'istruzione requre non viene eseguita, non verrà eseguita una singola riga di codice nel file a quell'indirizzo. Ciò è logico, poiché in questo caso l'accesso al file avviene tramite l'operatore require().

Le strutture di esecuzione del ciclo non influiscono sul comportamento dell'istruzione require(), sebbene il codice contenuto nel file risultante sia ancora soggetto al ciclo. Da ciò possiamo concludere che l'istruzione require viene eseguita solo una volta, a differenza di include().

Pertanto, non è possibile inserire l'istruzione require() con tutte le istruzioni ad essa allegate in un blocco di istruzioni del ciclo e aspettarsi diverse esecuzioni di questa istruzione ad ogni iterazione mentre il ciclo è in esecuzione. Per trarne vantaggio, ti suggeriamo di utilizzare l'operatore include().

Quando un file viene eseguito con un'istruzione require(), il cbd contenuto eredita le capacità variabili della riga su cui viene eseguito requre(). Tutte le variabili disponibili su questa riga saranno disponibili all'interno del file chiamato. Se un'istruzione require si trova all'interno di una funzione all'interno di un file chiamante, tutto il codice contenuto nel file chiamato si comporterà come se fosse definito all'interno di quel file

Se l'istruzione require() funziona su un file richiamato tramite HTTP e utilizza wrapper fopen e se l'indirizzo della stazione interpreta il file risultante come codice PHP, è possibile passare le variabili all'istruzione require() utilizzando l'URL -request , come il metodo HTTP Get. Non è lo stesso. che chiamando il file di istruzioni require poiché lo script praticamente continua l'esecuzione dello script sul server remoto e i risultati verranno poi inclusi nello script locale:

/* non funzionerà perché non è stato elaborato dal server */

require("http://mio_nome_dominio/file.txt?varone=1&vartwo=2");

/* non funziona perché il nome del file è "file.php?varone=1&vartwo=2"

prende di mira il file system locale */

require("file.php?varone=1&vartwo=2");

/* funzionerà senza errori */

require("http://mio_nome_dominio/test.php?varone=1Svartwo=2");

require("file.txt");

require("file.php");

Questi esempi ti aiuteranno a capire chiaramente come utilizzare l'operatore require() e ad evitare di commettere errori durante la creazione dei programmi. Successivamente, esamineremo l'istruzione include(), che è simile all'istruzione require(), e come funziona.

Una delle funzionalità più divertenti e utili di PHP è l'inclusione di un altro file. Ad esempio, un sito web ha un menu in alto, un menu in basso e tra di essi il contenuto della pagina stessa. E, ad esempio, su 10 pagine del sito viene utilizzato il menu in basso. Ad un certo punto è stato necessario apportare delle modifiche. In html apporteresti manualmente modifiche in ogni singolo file, ma php ti consente di semplificare notevolmente il lavoro con il sito! Il codice per il menu in basso può essere contenuto in un file separato e su ciascuna delle 10 pagine puoi semplicemente includere questo file separato! Cioè, tutte le modifiche ora devono essere apportate solo al file con il menu e su altri 10 verrà visualizzato con le modifiche.

Il significato della connessione in php in semplice lingua russa:

File 1.php
Menù in alto

File 2.php
Menù inferiore

File Esempio.php
Connetti il ​​file 1.php
Contenuto della pagina
Collega il file 2.php

Come risultato dell'elaborazione, il file example.php verrà visualizzato
Menù in alto
Contenuto della pagina
Menù inferiore
Di conseguenza, per modificare qualcosa nel menu in basso, è necessario apportare modifiche solo al file 2.php

Il percorso del file

Il file viene connesso in base al percorso specificato per il file. Sono disponibili due opzioni di percorso: relativo e assoluto. Relativo: questa è un'indicazione del percorso del file connesso relativo al file con le istruzioni di connessione. Assoluto: specifica il percorso completo del file incluso.

Codice PHP

// esempio di percorso relativo
include "include/tuo_file.php"; // il file si trova nella cartella include, che si trova nella stessa directory del file di connessione

// esempio di percorso assoluto
include $_SERVER["DOCUMENT_ROOT"]."/include/tuo_file.php"; // $_SERVER["DOCUMENT_ROOT"] - indica la directory principale del sito

includere e include_una volta

includere()- un costrutto progettato per includere file nel codice dello script PHP durante l'esecuzione dello script PHP. Durante l'elaborazione del codice, l'istruzione viene sostituita con il contenuto del file allegato. Suggerisco di guardare subito un esempio.

Diamo un'occhiata a come funziona include utilizzando due file come esempio: indice.php E testo.php. Per semplicità di lavoro, supponiamo che si trovino nella stessa directory.

Codice PHP(file indice.php)

Echo "Testo semplice contenuto nel file principale";
includere "text.php"; // include il contenuto del file text.php

?>
Codice PHP(file testo.php)

Echo "Testo contenuto nel file incluso";

?>
Il risultato dell'esecuzione del file index.php sarà:

Testo semplice contenuto nel file principale
Testo contenuto nel file incluso
È davvero conveniente? Ora, modificando il contenuto del file text.php, il risultato di index.php sarà completamente diverso!

Ora parliamo di un altro design: include_once. Funziona esattamente come include, ma viene creato successivamente e per i casi in cui il file non può essere incluso nuovamente. Ad esempio, hai paura che a seguito di un errore potresti collegare un file 2 o più volte, il che influenzerà il mancato funzionamento della pagina e la ricezione di un messaggio di errore corrispondente.

Codice PHP

Include_once "text.php"; // il file text.php verrà incluso una sola volta

// le riconnessioni riportate di seguito non verranno prese in considerazione e visualizzate
// e non verrà visualizzato un messaggio di errore
include_once "text.php"; // non succederà nulla

richiedere e richiedere_una volta

Le istruzioni require e require_once funzionano in modo identico per include e include_once con l'eccezione di una sola funzionalità: se il file incluso non viene trovato, l'esecuzione dello script verrà interrotta (lo script non verrà più letto), mentre include e include_once visualizzano semplicemente un avviso e continuare l'ulteriore esecuzione dello script.

Se includi o richiedi non funziona

Per capire i motivi per cui include non funziona, suggerisco di controllare tutto passo dopo passo. Non importa quanto chiari e superficiali possano essere i punti seguenti, controlla tutto fin dall'inizio

1. Controlla se il tuo server e php funzionano e se qualche codice php sul sito funziona
2. Controlla se il file di inclusione esiste
3. Controlla se il nome del file e l'estensione sono stati inseriti correttamente nella connessione
4. Assicurati che il file php incluso si trovi effettivamente all'indirizzo specificato
5. Prova a specificare un percorso assoluto (il percorso completo del file) anziché un percorso relativo.

Esempio Codice PHP

Includi "http://www.example.com/include/your_file.php";

// DOCUMENT_ROOT - indica la directory principale della risorsa
include $_SERVER["DOCUMENT_ROOT"]."/include/tuo_file.php";

6. Se il tuo file non si connette e non viene visualizzato alcun errore, crea un file nella directory con il file che stai connettendo .htaccess con il seguente contenuto

Php_flag display_errors Attivo
O nel file php, prima di connetterti, incolla la seguente riga

Segnalazione_errori(E_ALL);
Entrambe le impostazioni imporranno la visualizzazione degli errori

Operatori PHP: require(), require_once(), include_once()

Data: 15-10-2012

Funzioni PHP: require(), require_once(), include(), include_once()

Nell'ultima lezione abbiamo discusso il lavoro in dettaglio. Permettimi di ricordarti che l'operatore includere() in PHP, sostituisce il contenuto di una pagina web in un'altra pagina web. Ma PHP ha altre funzioni che ti consentono di implementare un'attività simile. In particolare queste sono le funzioni:

include_once()
richiedere()
richiedono_una volta()

Per inserire il contenuto di una determinata pagina web è sufficiente specificare come argomento (tra parentesi) di queste funzioni il percorso del file desiderato. Ad esempio, in questo modo:

include("file.php") o require("file.php")

Il compito di tutte queste funzioni è lo stesso: inserire il codice o il testo desiderato da un file in un altro file. Tuttavia, queste funzioni differiscono l'una dall'altra. Scopriamolo.

Suffisso " _una volta" ti consente di collegare il codice di un file per la sostituzione in un altro file solo una volta, indipendentemente dal numero di chiamate effettuate. Per chiarezza, diamo un'occhiata a un semplice esempio. Nell'ultima lezione, abbiamo capito che utilizzando l'operatore includere(), puoi inserire l'intestazione del sito in un file separato intestazione.php, per semplicità, assumeremo di inserire in questo file il logo grafico del sito. Nel posto giusto della pagina web (in questo caso, al posto dell'intestazione del sito) scriviamo il codice Elenco 1.

Elenco 1.

Quindi, di conseguenza, anche il logo del sito verrà visualizzato due volte, più o meno in questo modo:

D'accordo, non sembra molto carino, vero? Si scopre che l'operatore includere() lo tira fuori dalla cartella due volte blocchi file intestazione.php e lo sostituisce due volte al posto dell'intestazione del sito.

In generale, il file incluso può contenere funzioni che, una volta aggiunte al file sorgente, potrebbero generare errori e la pagina web potrebbe non caricarsi affatto.

Sui siti di grandi dimensioni è molto facile confondersi su dove e quale file hai incluso e se puoi includerlo nuovamente, e questo può portare a un errore. Ecco perché hanno inventato il prefisso " _una volta"alle funzioni includere E richiedere, che incorpora il contenuto di un file in un'altra pagina web solo una volta.

In cosa differisce include() da require()

Ora parliamo della funzione includere() diverso dalla funzione richiedere(). Non ci sono differenze tra loro nel loro lavoro. Entrambe le funzioni incorporano il contenuto di un file in un altro. Ma hanno una differenza e sta nel modo in cui reagiscono a una situazione in cui il file che stiamo collegando non è a posto.

Torniamo al codice di esempio precedente Elenco 1. Abbiamo il seguente codice:

Include("blocchi/intestazione.php");

Proviamo a eliminare il file intestazione.php, che effettivamente colleghiamo, ad esempio, il file è danneggiato o è stato cancellato accidentalmente dal nord.

Aggiorniamo il file di test e vediamo questo errore:

Come puoi vedere, appare un messaggio che informa che nella directory (cartella) blocchi file non trovato intestazione.php, ma il programma viene comunque eseguito e il resto della pagina web del sito viene visualizzato normalmente.

Cosa succede se scriviamo il codice ( Elenco 3) utilizzando la funzione richiedere():

Elenco 3.

Richiedi("blocchi/header.php");

Questo è quello che abbiamo verrà visualizzato un solo messaggio di errore, e il programma non verrà più eseguito e vedrai solo questo messaggio.

Come sai, PHP ha 4 funzioni per includere altri file. Questo includere, include_once, richiedere E richiedono_una volta. In cosa differiscono e come usarli correttamente?

Innanzitutto, diamo un'occhiata alla differenza tra includere E richiedere. Queste due funzioni differiscono solo nella loro reazione all'assenza di un file incluso. Funzione includere(“abilita”), se manca il file specificato, genererà un messaggio di errore del tipo E_WARNING, ma l'esecuzione del programma continuerà. A differenza di lei, richiedere(“require”), se non è presente alcun file incluso, genera un errore fatale (E_ERROR), che porta all'immediato arresto dello script in esecuzione.

Pertanto, in base alla tua conoscenza di come viene eseguito il codice, puoi utilizzare l'uno o l'altro operatore. Ad esempio, se si tratta solo di un pezzo di codice HTML che generalmente non influisce sul flusso del programma, o si tratta di plug-in minori senza i quali il resto del programma può funzionare normalmente, sentiti libero di utilizzare includere. In altri casi, consiglio di usare richiedere. Ciò impedirà la possibilità di un'esecuzione errata del codice e in caso di errore (ad esempio, il file incluso è stato cancellato da un virus o è andato perso durante il processo di sviluppo) lo script semplicemente terminerà. In uno dei prossimi articoli ti mostrerò come tenere traccia di tutte le situazioni non standard nel codice ed essere consapevole di ciò che sta accadendo all'interno del sito.

Consideriamo ora le strutture include_once E richiedono_una volta. Da semplice includere E richiedere si distinguono per la desinenza "_once", che impedisce che gli stessi file vengano inclusi nuovamente.

Ad esempio, se il file incluso contiene descrizioni di classi o funzioni, tale file non potrà essere incluso nuovamente, poiché verrà eseguito nuovamente e PHP genererà un errore fatale quando tenterà di definire classi o funzioni con nomi già esistenti. Non c'è dubbio che sia possibile progettare il codice in modo tale che la riconnessione non avvenga mai, ma si tratta di restrizioni e lavoro non necessari. Pertanto, le funzioni con il suffisso “_once” sono utili e necessarie.

Nella mia pratica, utilizzo due tipi di file. Il primo tipo sono file che contengono una o più classi e non contengono codice eseguito “direttamente”. Collego sempre tali file utilizzando richiedono_una volta. Il secondo tipo sono modelli o parti di modello contenenti HTML e parte del codice PHP. Collego tali file utilizzando richiedere, perché a volte lo stesso pezzo di modello può essere utilizzato più volte su una pagina.

Non lo uso mai includere E include_once, perché ritengo che l'assenza di un dossier costituisca una situazione critica che richiede una soluzione immediata e senza compromessi. E se devo includere un file la cui presenza è in dubbio, allora controllo semplicemente la sua presenza utilizzando is_file().

C'è un altro trucco quando si usa include. Nonostante questa non sia in realtà una funzione, ma un costrutto del linguaggio, l'operatore all'interno del file incluso funziona ritorno. Pertanto, include restituisce questo valore al codice chiamato. Sembra così

$ret = include 'file.php';

Per oggi è tutto, programmate correttamente!

Il costrutto di require inclusioni

Progetto richiedere ti consente di includere file in uno script PHP per eseguire uno script PHP. Sintassi generale richiedere come:

richiedere nome file;

All'avvio (precisamente all'avvio, non durante l'esecuzione!) del programma, l'interprete sostituirà semplicemente l'istruzione con il contenuto del file nome_file (questo file può contenere anche uno script PHP, incorniciato, come al solito, dai tag E ?> ). Inoltre, lo farà immediatamente prima di avviare il programma (a differenza di includere, di cui si parlerà più avanti). Questo può essere molto comodo per includere varie pagine modello con codice HTML nell'output dello script. Ecco un esempio:

File intestazione.html:

È un titolo

File piè di pagina.html:
Compagnia domestica, 2005.

File script.php
richiedono "intestazione.htm";
// Lo script visualizza il corpo del documento stesso
richiedere "footer.htm";
?>

Quindi il disegno richiedere ti consente di assemblare script PHP da diversi file separati, che possono essere simili html-pagine e php-script.

Progetto richiedere supporta l'inclusione di file remoti (da PHP 4.3.0). Per esempio:

// L'esempio seguente non funziona perché tenta di includere un file locale
richiedono "file.php?foo=1&bar=2" ;
// Il seguente esempio funziona
richiedere ;
?>

! Progetto richiedere ti consente di includere file remoti se questa funzionalità è abilitata nel file di configurazione PHP.

Compresi i file remoti

PHP ti consente di lavorare con oggetti URL come file normali. I packer, disponibili per impostazione predefinita, vengono utilizzati per lavorare con file remoti utilizzando il protocollo ftp o http.

Se in PHP sono inclusi "URL wrapper fopen" (come nella configurazione predefinita), è possibile specificare un file da includere utilizzando un URL (tramite HTTP) anziché un percorso locale. Se il server di destinazione interpreta il file di destinazione come codice PHP, le variabili possono essere passate al file di inclusione utilizzando una stringa di query URL, come in HTTP GET. A rigor di termini, questo non equivale a includere un file e fargli ereditare l'ambito delle variabili del file genitore; dopo tutto, lo script viene eseguito su un server remoto e il risultato viene quindi incluso nello script locale.

Affinché sia ​​disponibile l'inclusione remota dei file, è necessario impostare nel file di configurazione (php.ini) consent_url_fopen=1.

Nota: le versioni PHP per Windows precedenti a PHP 4.3.0 non supportano la possibilità di utilizzare file remoti tramite questa funzionalità, anche se l'opzioneallow_url_fopen è abilitata.


/* Ciò presuppone che www.example.com sia configurato su parse.php
*file, non file .txt. Anche "Funziona" qui significa che le variabili
* $foo e $bar sono disponibili nel file incluso. */

//Non funzionerà perché file.txt non viene elaborato da www.example.com come PHP
richiedere "http://www.example.com/file.txt?foo=1&bar=2";

// Non funzionerà perché sta cercando il file "file.php?foo=1&bar=2" in locale
//file system.
richiedono "file.php?foo=1&bar=2" ;

// Il seguente esempio funziona:
richiedere "http://www.example.com/file.php?foo=1&bar=2";

$pippo = 1;
$barra = 2;
richiedere "file.txt"; // Lavori
richiedere "file.php"; // Lavori

?>