Differenza tra require, include, require_once e include_once?


Risposte:


1426

Ci sono requiree include_oncepure.

Quindi la tua domanda dovrebbe essere ...

  1. Quando dovrei usare requirevs. include?
  2. Quando dovrei usare require_oncevs.require

La risposta a 1 è descritta qui .

La funzione request () è identica a include (), tranne per il fatto che gestisce gli errori in modo diverso. Se si verifica un errore, la funzione include () genera un avviso, ma lo script continuerà l'esecuzione. Requisito () genera un errore irreversibile e lo script si arresterà.

La risposta a 2 può essere trovata qui .

L'istruzione request_once () è identica a require () tranne PHP verificherà se il file è già stato incluso e, in tal caso, non includerlo (richiederlo) di nuovo.


58
Ricorda che require () viene eseguito più velocemente di request_once (), quindi se sei sicuro che non ci siano duplicati duplicati use use ().
dialex,

48
@DiAlex, require_once è più lento, ma quasi non misurabile.
contratto del Prof. Falken ha violato il

77
@DiAlex ... e, se si scopre che il file è, in realtà, già incluso, allora require_once()sarà il più veloce dei due
Tom

11
@ Prof.Falken In quali circostanze è necessario richiedere lo stesso file più di una volta ?? Non riesco a pensarne uno nella mia attuale mentalità.
Weishi Zeng,

17
@WeishiZeng per le pagine Web, potrebbero essere presenti frammenti HTML che desideri includere più di una volta.
James Beninger,

406

Uso

  • richiede
    quando il file è richiesto dall'applicazione, ad esempio un modello di messaggio importante o un file contenente variabili di configurazione senza le quali l'app si spezzerebbe.

  • require_once
    quando il file contiene contenuto che produrrebbe un errore alla successiva inclusione, ad esempio function important() { /* important code */}è sicuramente necessario nella tua applicazione, ma poiché le funzioni non possono essere rideterminate non dovrebbero essere incluse di nuovo.

  • includere quando il file non è richiesto e il flusso dell'applicazione dovrebbe continuare quando non viene trovato, ad es.
    ottimo per i modelli che fanno riferimento a variabili dall'ambito corrente o qualcosa del genere

  • include_once
    dipendenze opzionali che potrebbero produrre errori al successivo caricamento o forse inclusione remota di file che non si desidera che si verifichino due volte a causa dell'overhead HTTP

Ma fondamentalmente, dipende da te quando usare quale.


Ho una connessione DOP (al database) . Dovrei usare quale? include? include_once? require? require_once?
Shafizadeh,

6
Questa dovrebbe essere la risposta accettata in quanto risponde alla domanda in breve e si collega al manuale ufficiale, invece dell'altra risposta che collega solo w3schools.
Daniel W.

9
dammi un motivo per cui lo includeresti se non fosse necessario?
Francisco Ochoa,

1
Sto usando un modello per un layout di pagina generico che ha sezioni come intestazioni, colonne, piè di pagina, ecc. Questo mi permette di servire quel modello per ogni pagina del sito e ho solo bisogno di creare file nella struttura delle cartelle della pagina che definiscono cosa dovrebbe andare in ciascuna di quelle posizioni. Se decido che una pagina non ha bisogno di una barra laterale, lascio semplicemente quel file nella cartella per quella pagina e il modello funziona ancora bene senza quel file esistente.
James Coyle,

301

Il mio consiglio è di usare solo il require_once99,9% delle volte.

L'uso requireo includeinvece implica che il tuo codice non è riutilizzabile altrove, ovvero che gli script che stai inserendo eseguono effettivamente il codice invece di rendere disponibili una classe o alcune librerie di funzioni.

Se hai bisogno / incluso il codice che viene eseguito sul posto, questo è un codice procedurale e devi conoscere un nuovo paradigma . Come la programmazione orientata agli oggetti, la programmazione basata sulle funzioni o la programmazione funzionale.

Se si sta già facendo OO o programmazione funzionale, utilizzando include_onceè in gran parte sta per essere ritardare dove nella pila a trovare bug / errori. Vuoi sapere che la funzione do_cool_stuff()non è disponibile quando vai a chiamarla in un secondo momento o nel momento in cui ti aspetti che sia disponibile richiedendo la libreria? In generale, è meglio sapere immediatamente se qualcosa di cui hai bisogno e che ti aspetti non sia disponibile, quindi usa solo require_once.

In alternativa, nella moderna OOP, carica automaticamente le tue classi dopo l'uso.


41
+1 Questa dovrebbe essere la risposta accettata. I punti chiave sono che la includefamiglia è di solito una cattiva idea (perché è piuttosto raro includere file che hanno qualche possibilità di non esistere) e che da require_oncee require, dovresti usare require_oncequando includi file che definiscono funzioni o classi usato altrove o istanziare singleton come oggetti di connessione al database e utilizzare requireper includere file che fanno immediatamente cose quando vengono inclusi. In qualsiasi applicazione Web di grandi dimensioni, quest'ultimo tipo di include è insolito.
Mark Amery,

7
+1 (avere un altro distintivo d'oro;)) Concordare che require_onceè molto probabile che il candidato sia probabilmente usato per quasi tutto il tempo. Date le minime differenze generali tra le scelte, requiregarantisce l'arresto degli script, non riesco a pensare a molti scenari in cui un'applicazione può sopravvivere senza un file incluso. E _onceprotegge da problemi di dupe. Chiunque non sia d'accordo probabilmente sa cosa sta facendo, quindi può scegliere quale si adatta all'applicazione o allo scenario.
James,

hey ho un file che a volte è incluso nella pagina dell'indice e man time chiamato direttamente (home.php) ........... ora ho già incluso il file di configurazione nella pagina dell'indice con la funzione di richiesta ora posso usare Require_once in home.php per impedire il re include
Ravinder Payal

@RavinderPayal Bene, il mio primo consiglio è di risparmiarti un mal di testa usando un controller frontale! Solo perché un utente chiama example.com/home non significa che dovresti avere un home.php totalmente separato! Invece / home / dovrebbe semplicemente instradare attraverso il front controller di index.php o front.php. Solo php consente davvero l'approccio "uno script per pagina" della vecchia scuola e, credetemi, non è il modo migliore. Ma se DEVI avere un home.php e un index.php separati, tutto ciò che PUOI ENTRARE IN ENTRAMBI dovrebbe essere in un file o modello di libreria, ../templates/home.tpl o ../view/home.view.php sai?
Kzqai,

il suo SNS e io scelgo inizialmente un file di un approccio di una pagina per un facile sviluppo ed è una grande pila di file che non riesco a ricreare e ora ho risolto quel problema e l'altro motivo per fare un file di una pagina è la velocità e meno contatto con il disco rigido di numero decrescente di include
Ravinder Payal,

36

Differenza tra le funzioni _once e senza le funzioni _once: senza il codice _once verrà nuovamente incluso mentre con le funzioni _once PHP tiene traccia dei file inclusi e lo includerà solo una volta.

Differenza tra richiedi e includi: se non viene trovato un file richiesto, PHP emetterà un errore fatale mentre per includere verrà emesso solo un avviso.


1
Wow breve e semplice!
Vlad

31

include() genererà un avviso se non può includere il file, ma verrà eseguito il resto dello script.

require()lancerà un E_COMPILE_ERRORe fermerà lo script se non può includere il file.

Le funzioni include_once()e require_once()non includeranno il file una seconda volta se è già stato incluso.

Vedere le seguenti pagine di documentazione:


22

Ogni volta che si utilizza require_once()può essere utilizzato in un file per includere un altro file quando è necessario il file chiamato solo una volta nel file corrente. Qui nell'esempio ho un test1.php.

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

e in un altro file che ho chiamato test2.php

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

mentre stai guardando la m che richiede il file test1 due volte, ma il file includerà il test1 una volta e per la chiamata alla seconda volta questo verrà ignorato. E senza fermarsi visualizzerà l'output una sola volta.

Ogni volta che stai usando 'include_once () `può essere usato in un file per includere un altro file quando hai bisogno del file chiamato più di una volta nel file corrente. Qui nell'esempio ho un file chiamato test3.php.

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

E in un altro file che ho chiamato test4.php

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

mentre stai guardando la m incluso il file test3 includerà il file una sola volta ma interromperà l'ulteriore esecuzione.


'esempio migliore del consiglio'
Ramesh Kithsiri HettiArachchi

19

Usa "include" per i template riutilizzabili di PHP . Utilizzare "richiedi" per le librerie richieste.

"* _once" è carino, perché controlla se il file è già caricato o meno, ma ha senso per me solo in "require_once".


18

È necessario mantenere le definizioni di classe e funzione organizzate in file.

Utilizzare require_once()per caricare dipendenze (classi, funzioni, costanti).

Utilizzare require()per caricare file simili a modelli .

Utilizzare include_once()per caricare dipendenze opzionali (classi, funzioni, costanti).

Utilizzare include()per caricare file facoltativi simili a modelli .


16

Una risposta dopo 7 anni per il 2018

Questa domanda è stata posta sette anni fa e nessuna delle risposte fornisce un aiuto pratico per la domanda. Nella moderna programmazione PHP usi principalmente required_onceuna sola volta per includere la tua classe di caricatore automatico (caricatore automatico del compositore spesso) e caricherà tutte le tue classi e funzioni (i file di funzioni devono essere aggiunti esplicitamente al composer.jsonfile per essere disponibili in tutti gli altri file). Se per qualsiasi motivo la tua classe non è caricabile dal caricatore automatico, la usi require_onceper caricarla.

Ci sono alcune occasioni che dobbiamo usare require. Ad esempio, se si dispone di una definizione di array molto grande e non si desidera aggiungerla al codice sorgente della definizione di classe, è possibile:

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

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

Se il file che intendi includere contiene qualcosa di eseguibile o dichiara alcune variabili che devi quasi sempre usare require, perché se usi a require_onceparte il primo posto il tuo codice non verrà eseguito e / o le tue variabili non verranno avviate silenziosamente, causando bug che sono assolutamente difficili da individuare.

Non v'è alcun caso d'uso pratico per includee include_oncedavvero.


+1 per menzionare il caricatore automatico. Tuttavia, quest'ultima frase è discutibile. Molto spesso userai un include(), racchiuso in un buffer di output per implementare il tuo motore di template.
haz il

Inoltre, dati i moderni editor di testo e i moderni PHP, quasi nessuno usa require()per dividere file di grandi dimensioni.
haz il

Ho require_onceriscontrato lo stesso problema durante l'utilizzo di PHPMailer all'interno di una funzione e il mio caricatore automatico definisce la $mailvariabile necessaria più avanti nel codice, quindi il successivo require_onceviene ignorato, che $mailnon è stato inizializzato! la soluzione era semplicemente usare requiredopo la chiamata di funzione.
Youssef,

@haz C'è qualche motivo che non usi requirein questi casi?
PHPst

@ChristofferBubach LOL.
PHP

15

La differenza sta nell'errore generato dai comandi. Con require, il file che si desidera utilizzare è veramente richiesto e quindi genera un E_ERRORse non viene trovato.

require()è identico a include() meno che in caso di fallimento produrrà anche un E_ERROR errore di livello fatale .

includegenera un E_WARNINGerrore solo se fallisce, che è più o meno silenzioso.

Quindi usalo se il file è richiesto per far funzionare il codice rimanente e vuoi che lo script fallisca il file non è disponibile.


Per *_once():

include_once() può essere utilizzato nei casi in cui lo stesso file può essere incluso e valutato più di una volta durante una particolare esecuzione di uno script, quindi in questo caso può aiutare a evitare problemi come ridefinizioni delle funzioni, riassegnazioni di valori variabili, ecc.

Lo stesso vale require_once()ovviamente.


Riferimento: require(),include_once()


requiredà E_COMPILE_ERROR, non E_ERROR.
Yousha Aleayoub,

Sembra che sia cambiato negli ultimi 7 anni.
Felix Kling,

9

Con request il file deve esistere, in caso contrario verrà visualizzato un errore; mentre con include - se il file non esiste, la pagina continuerà a caricarsi.


8

Richiedono parti critiche, come l'autorizzazione e includi tutte le altre.

Le inclusioni multiple sono solo un pessimo design e devono essere assolutamente evitate. Quindi, * _once non ha molta importanza.


7

Includi / Richiedi puoi includere lo stesso file più di una volta anche:

require () è identico a include () tranne che in caso di errore produrrà anche un errore di livello E_COMPILE_ERROR fatale. In altre parole, interromperà lo script mentre include () emette solo un avviso (E_WARNING) che consente allo script di continuare.

Require_once / include_once

è identico per includere / richiedere tranne PHP verificherà se il file è già stato incluso e, in tal caso, non includerlo (richiederlo) di nuovo.


5

include()genererà un avviso quando non trova un file, ma require_once()genererà un errore irreversibile.

Un'altra cosa è se il file è incluso prima. Quindi require_once()non lo includerà di nuovo.


5

Stavo usando la funzione come di seguito:

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

Ci sono stati valori costanti dichiarati in xyz.php.

Devo chiamare questa funzione doSomething () da un altro file di script PHP.

Ma ho osservato il comportamento mentre chiamavo questa funzione in un ciclo, per la prima iterazione doSomething () stava ottenendo valori costanti all'interno xyz.php, ma in seguito ogni iterazione doSomething()non era in grado di ottenere i valori costanti dichiarati xyz.php.

Ho risolto il mio problema passando da require_once()a include(), il doSomething()codice aggiornato è il seguente:

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

Ora ogni chiamata di iterazione doSomething()ottiene i valori costanti definiti in xyz.php.


4

Dal manuale :

require()è identico a include()meno che in caso di fallimento produrrà anche un E_COMPILE_ERRORerrore di livello fatale . In altre parole, interromperà lo script mentre include()emette solo un avviso ( E_WARNING) che consente allo script di continuare.

Lo stesso vale per le _once()varianti.


4

PSR-0 / PSR-4Nell'era dei caricatori automatici, potrebbe essere completamente inutile utilizzare una qualsiasi delle istruzioni se tutto ciò che serve è rendere alcune funzioni / classi disponibili per il proprio codice (ovviamente, è comunque necessario require_oncecaricarsi automaticamente nel file di bootstrap e nei includemodelli se si uso ancora PHP come motore di template).


3

 

  1. Quando si dovrebbe usare requireo include?

    Le funzioni requiree includesvolgono la stessa attività, ovvero includono e valutano il file specificato, ma la differenza è requirecauserà un errore irreversibile quando il percorso del file specificato non è valido o per qualsiasi errore, mentre includegenererà un avviso e continuerà l'esecuzione del codice.

    Quindi è possibile utilizzare la requirefunzione nel caso in cui il file che si sta tentando di includere sia il cuore del sistema e possa avere un impatto enorme sul resto del codice e si può usare la includefunzione quando il file che si sta tentando di includere è un file semplice contenente un codice meno importante.

    E la mia raccomandazione personale (per il codice meno importante) è quella di cercare la requirefunzione ovunque nel tuo codice mentre è in fase di sviluppo in modo che tu possa eseguire il debug del codice e in seguito sostituire tutte le requirefunzioni con la includefunzione prima di spostarla in produzione in modo tale che se manchi eventuali bug non influiranno sull'utente finale e il resto del codice verrà eseguito correttamente ...

  2. Quando si dovrebbe usare require_onceo require?

    La differenza di base tra requiree require_onceis require_oncecontrollerà se il file è già incluso o meno se è già incluso, quindi non includerà il file mentre la requirefunzione includerà il file indipendentemente dal fatto che il file sia già incluso o meno.

    Quindi, nei casi in cui si desidera includere ancora e ancora una parte del codice, utilizzare la requirefunzione, mentre se si desidera includere un codice una sola volta nel codice, utilizzare require_once.


2
  1. Utilizzare la funzione di richiesta quando è necessario caricare qualsiasi classe, funzione o dipendenza.

  2. Utilizzare la funzione include quando si desidera caricare file in stile modello

Se sei ancora confuso, usa solo use_once per sempre.


1

Sono tutti modi per includere file.

Richiedi significa che ne ha bisogno. Require_once significa che ne avrà bisogno ma lo richiede solo una volta. Includi significa che includerà un file ma non è necessario per continuare.

Esempi:

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

C'è anche una funzione include_once che include un file una volta.

Include_once 'filename'

Non usare maiuscole dove ho mentre sto scrivendo dal mio telefono.


1

una cosa che ho notato, quando uso include posso accedere solo alle funzioni dei file inclusi dal file che lo ha incluso. Con Require_once, posso eseguire quella funzione in un secondo file required_once.

anche: consiglio di aggiungere

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

Perché quando request_once uccide la pagina, a volte può fare eco alla directory dei file del tuo sito web

Ecco una funzione personalizzata che ho creato per richiedere i file:

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;
    }
}

esempio di utilizzo:

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

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

0

Fondamentalmente, se hai bisogno di un percorso sbagliato, PHP genera un errore fatale e viene chiamata la funzione di spegnimento, ma quando includi un percorso sbagliato, PHP continuerà l'esecuzione, ma mostrerà solo un avviso che il file non esiste.

Dalla parola inglese richiede , a PHP viene detto che l'esecuzione della pagina o del file dipende dal file richiesto.

Dalla mia esperienza, è normale richiedere file importanti come file di configurazione, classi di database e altre utilità importanti.


0

Spesso si tratta di caricare una libreria client in modo condizionale, oppure procedere e caricarlo indipendentemente dal fatto che lo si utilizzi o meno.

Ecco un esempio concreto; elaborando ciò che diceva pcj.

Supponi di avere un file di configurazione che memorizza il nome utente e la password del tuo database (conf.php):

<?php
//my site configuration file

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

E una classe con una funzione statica che utilizza il database:

<?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
    }
}
?>

E quella funzione statica viene utilizzata all'interno di un'altra funzione che viene chiamata iterativamente all'interno di un ciclo:

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

Puoi richiedere / includere la classe solo una volta. Se lo richiedi / includilo in ogni iterazione del tuo ciclo, otterrai un errore. Tuttavia, è necessario includere il file conf ogni volta che viene chiamata la funzione statica.

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

Naturalmente, spostarlo al di fuori della funzione potrebbe essere una soluzione a questo problema:

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

A meno che non ti preoccupi del sovraccarico di caricare una classe che potrebbe essere utilizzata solo in determinate condizioni e non vuoi caricarla quando non lo è.


-1

requireha un sovraccarico maggiore di include, poiché deve prima analizzare il file. La sostituzione requirescon includesè spesso una buona tecnica di ottimizzazione.


2
So che è un commento in ritardo, ma in realtà non è vero. requirenon analizza il file più di quanto includenon faccia. Le _onceversioni di queste funzioni hanno ciascuna un po 'di sovraccarico, ma come altri hanno già detto, è quasi trascurabile nella maggior parte delle applicazioni.
ahouse101,

-2

Basta usare richiedi e includi.

Perché pensare a come lavorare con include_once o request_once. Questo è alla ricerca di dati di registro che salvano i file PHP inclusi o richiesti. Quindi è più lento di includere e richiedere.

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

Basta usare così ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.