Paziņojumi iekļaut un pieprasīt. Require un request_once priekšraksti PHP

Nepieciešamo ieslēgumu konstrukcija

Dizains pieprasītļauj iekļaut failus PHP skriptā, kas izpilda PHP skriptu. Vispārējā sintakse pieprasīt tāds:

pieprasīt faila nosaukumu;

Programmas palaišanas laikā (tieši startēšanas, nevis izpildes laikā!) tulks vienkārši aizstās instrukciju ar faila faila_nosaukums saturu (šajā failā var būt arī PHP skripts, kas, kā parasti, ierāmēts ar tagiem Un ?> ). Turklāt viņš to darīs tieši pirms programmas palaišanas (atšķirībā no tālāk aprakstītā). Tas var būt diezgan ērti, lai skripta izvadē iekļautu dažādas veidņu lapas ar HTML kodu. Šeit ir piemērs:

Header.html fails:

Tas ir tituls

Footer.html fails:
Mājas uzņēmums, 2005.

Script.php failu
pieprasīt "header.htm";
// Skripts parāda paša dokumenta pamattekstu
pieprasīt "footer.htm";
?>

Tātad dizains pieprasītļauj apkopot PHP skriptus no vairākiem atsevišķiem failiem, kas var būt kā html-lapas un php-skripti.

Dizains pieprasīt atbalsta attālo failu iekļaušanu (kopš PHP 4.3.0). Piemēram:

// Šis piemērs nedarbojas, jo tas mēģina iekļaut lokālo failu
pieprasīt "file.php?foo=1&bar=2" ;
// Darbojas šāds piemērs
pieprasīt;
?>

! Dizains pieprasītļauj iekļaut attālos failus, ja šī funkcija ir iespējota PHP konfigurācijas failā. Detalizēta informācija .

Ieskaitot attālos failus

PHP ļauj strādāt ar URL objektiem, piemēram, parastajiem failiem. Iepakotāji, kas pieejami pēc noklusējuma, tiek izmantoti darbam ar attāliem failiem, izmantojot ftp vai http protokolu.

Ja PHP ir iekļauti "fopen iesaiņojuma vietrāži URL" (kā noklusējuma konfigurācijā), varat norādīt iekļaujamo failu, izmantojot vietrādi URL (izmantojot HTTP), nevis lokālo ceļu. Ja mērķa serveris interpretē mērķa failu kā PHP kodu, mainīgos var nodot iekļautajam failam, izmantojot URL vaicājuma virkni, kā tas ir HTTP GET. Stingri sakot, tas nav tas pats, kas iekļaut failu un likt tam mantot vecāku faila mainīgo apjomu; galu galā skripts darbojas attālajā serverī, un rezultāts tiek iekļauts vietējā skriptā.

Lai būtu pieejama attālināta failu iekļaušana, konfigurācijas failā (php.ini) ir jāiestata allow_url_fopen=1.

Piezīme: PHP versijas operētājsistēmai Windows pirms PHP 4.3.0 neatbalsta iespēju izmantot attālos failus, izmantojot šo līdzekli, pat ja ir iespējota opcija allow_url_fopen.


/* Tas pieņem, ka www.example.com ir konfigurēts kā parse.php
* faili, nevis .txt faili. Arī "Darbs" šeit nozīmē, ka mainīgie
* $foo un $bar ir pieejami iekļautajā failā. */

//Nedarbosies, jo www.example.com neapstrādā failu.txt, piemēram, PHP
ietver "http://www.example.com/file.txt?foo=1&bar=2";

// Nedarbosies, jo lokālajā failā tiek meklēts fails "file.php?foo=1&bar=2".
// failu sistēma.
iekļaut "file.php?foo=1&bar=2" ;

// Darbojas šāds piemērs:
ietver "http://www.example.com/file.php?foo=1&bar=2";

$foo = 1 ;
$ josla = 2;
iekļaut "file.txt" ; // Darbi
iekļaut "file.php" ; // Darbi

?>



PHP operatori: prasa(), prasa_vienreiz(), include_once()

Datums: 2012-10-15

PHP funkcijas: request(), request_once(), include(), include_once()

Pēdējā nodarbībā mēs detalizēti apspriedām darbu. Atgādināšu, ka operators iekļaut () PHP aizstāj vienas tīmekļa lapas saturu ar citu tīmekļa lapu. Bet PHP ir citas funkcijas, kas ļauj īstenot līdzīgu uzdevumu. Jo īpaši šīs ir funkcijas:

iekļaut_vienreiz()
prasīt ()
prasīt_vienreiz()

Lai ievietotu konkrētas tīmekļa lapas saturu, pietiek norādīt ceļu uz vēlamo failu kā argumentu (iekavās) šīm funkcijām. Piemēram, šādi:

include("fails.php") vai prasīt("fails.php")

Visu šo funkciju uzdevums ir vienāds: ievietojiet vajadzīgo kodu vai tekstu no viena faila citā failā. Tomēr šīs funkcijas atšķiras viena no otras. Izdomāsim.

Sufikss " _vienreiz" ļauj tikai vienu reizi savienot faila kodu aizstāšanai ar citu failu neatkarīgi no tā, cik daudz zvanu tiek veikts. Skaidrības labad apskatīsim vienkāršu piemēru. Pēdējā nodarbībā mēs noskaidrojām, ka, izmantojot operatoru iekļaut (), varat ievietot vietnes galveni atsevišķā failā header.php, vienkāršības labad mēs pieņemsim, ka šajā failā ievietojam vietnes grafisko logotipu. Pareizajā tīmekļa lapas vietā (šajā gadījumā vietnes galvenes vietā) mēs ierakstām kodu Saraksts 1.

Saraksts 1.

Tad attiecīgi vietnes logotips tiks parādīts arī divas reizes, apmēram šādi:

Piekrītu, tas neizskatās ļoti jauki, vai ne? Izrādās, ka operators iekļaut () divas reizes izvelk to no mapes bloki failu header.php un divreiz aizstāj to vietnes galvenes vietā.

Kopumā iekļautajā failā var būt funkcijas, kuras, pievienojot avota failam, var radīt kļūdas un jūsu tīmekļa lapa var netikt ielādēta.

Lielās vietnēs ir ļoti viegli sajaukt, kur un kādu failu iekļāvāt un vai varat to iekļaut vēlreiz, un tas var izraisīt kļūdu. Tāpēc viņi izdomāja prefiksu " _vienreiz"uz funkcijām ietver Un pieprasīt, kas iegulst faila saturu citā tīmekļa lapā tikai vienu reizi.

Kā ietverts() atšķiras no prasīt()

Tagad parunāsim par funkciju iekļaut () atšķiras no funkcijas prasīt (). Viņu darbā nav nekādu atšķirību. Abas funkcijas iekļauj viena faila saturu citā. Bet tiem ir atšķirība, un tā ir tā, kā viņi reaģē uz situāciju, kad fails, kuru mēs savienojam, nav vietā.

Atgriezīsimies pie iepriekšējā koda piemēra Saraksts 1. Mums ir šāds kods:

Include("bloki/galvene.php");

Mēģināsim izdzēst failu header.php, kuru mēs faktiski savienojam, piemēram, fails ir bojāts vai nejauši izdzēsts no ziemeļiem.

Mēs atjauninām testa failu un redzam šo kļūdu:

Kā redzat, tiek parādīts ziņojums, ka direktorijā (mapē) bloki fails nav atrasts header.php, taču programma joprojām tiek izpildīta un pārējā vietnes tīmekļa lapa tiek rādīta kā parasti.

Ko darīt, ja mēs rakstām kodu ( Saraksts 3), izmantojot funkciju prasīt ():

Saraksts 3.

Require("bloki/header.php");

Tas mums ir tiks parādīts tikai viens kļūdas ziņojums, un programma vairs netiks izpildīta, un jūs redzēsit tikai šo ziņojumu.

Kā jūs zināt, PHP ir 4 funkcijas citu failu iekļaušanai. Šis ietver, iekļaut_vienreiz, pieprasīt Un prasīt_vienreiz. Kā tie atšķiras un kā tos pareizi lietot?

Pirmkārt, aplūkosim atšķirību starp ietver Un pieprasīt. Šīs divas funkcijas atšķiras tikai ar reakciju uz iekļautā faila neesamību. Funkcija ietver(“iespējot”), ja trūkst norādītā faila, tiks ģenerēts kļūdas ziņojums, piemēram, E_WARNING, bet programmas izpilde turpināsies. Atšķirībā no viņas, pieprasīt(“nepieciešams”), ja nav iekļauts fails, tiek ģenerēta fatāla kļūda (E_ERROR), kā rezultātā nekavējoties tiek apturēts skripts.

Tādējādi, pamatojoties uz jūsu zināšanām par to, kā jūsu kods tiek izpildīts, varat izmantot vienu vai otru operatoru. Piemēram, ja tas ir tikai HTML gabals, kas parasti neietekmē programmas plūsmu, vai arī tie ir daži nelieli spraudņi, bez kuriem pārējā programma var darboties normāli, izmantojiet ietver. Citos gadījumos iesaku lietot pieprasīt. Tas novērsīs nepareizas koda izpildes iespēju un kļūdas gadījumā (piemēram, iekļauto failu izdzēsis vīruss vai tas tika pazaudēts izstrādes procesā) skripts vienkārši beigsies. Vienā no nākamajiem rakstiem es jums parādīšu, kā izsekot absolūti visām nestandarta situācijām kodā un būt informētam par to, kas notiek vietnes iekšienē.

Tagad apskatīsim struktūras iekļaut_vienreiz Un prasīt_vienreiz. No vienkāršām ietver Un pieprasīt tie atšķiras ar galotni "_once", kas neļauj tos pašus failus iekļaut atkārtoti.

Piemēram, ja jūsu iekļautajā failā ir klašu vai funkciju apraksti, tad šādu failu nevar iekļaut atkārtoti, jo tas tiks izpildīts vēlreiz un PHP radīs fatālu kļūdu, mēģinot definēt klases vai funkcijas ar jau esošiem nosaukumiem. Nav šaubu, ka ir iespējams izveidot kodu tā, lai atkārtota savienošana nekad nenotiktu, taču tie ir lieki ierobežojumi un lieks darbs. Tāpēc funkcijas ar sufiksu “_once” ir noderīgas un nepieciešamas.

Savā praksē es izmantoju divu veidu failus. Pirmais veids ir faili, kas satur vienu vai vairākas klases un nesatur kodu, kas tiek izpildīts “tieši”. Es vienmēr savienoju šādus failus, izmantojot prasīt_vienreiz. Otrais veids ir veidnes vai veidņu daļas, kas satur HTML un kādu PHP kodu. Es savienoju šādus failus, izmantojot pieprasīt, jo dažkārt vienu un to pašu veidnes daļu var izmantot vairākas reizes lapā.

Es nekad neizmantoju ietver Un iekļaut_vienreiz, jo es uzskatu, ka faila neesamība ir kritiska situācija, kas prasa tūlītēju risinājumu bez jebkādiem kompromisiem. Un, ja man ir jāiekļauj fails, kura klātbūtne ir apšaubāma, es vienkārši vispirms pārbaudu tā klātbūtni, izmantojot is_file().

Izmantojot include, ir vēl viens triks. Neskatoties uz to, ka šī faktiski nav funkcija, bet gan valodas konstrukcija, iekļautajā failā esošais operators darbojas atgriezties. Tāpēc iekļaut šo vērtību atgriež izsauktajā kodā. Tas izskatās šādi

$ret = iekļaut 'file.php';

Tas šodienai viss, programmējiet pareizi!

Viena no jautrākajām un noderīgākajām PHP funkcijām ir cita faila iekļaušana. Piemēram, vietnei ir augšējā izvēlne, apakšējā izvēlne un starp tām ir pats lapas saturs. Un, piemēram, 10 vietnes lapās tiek izmantota apakšējā izvēlne. Kādā brīdī tajā bija jāveic izmaiņas. HTML jūs manuāli veicat izmaiņas katrā atsevišķā failā, bet php ļauj ievērojami vienkāršot darbu ar vietni! Apakšējās izvēlnes kodu var ietvert atsevišķā failā, un katrā no 10 lapām varat vienkārši iekļaut šo atsevišķo failu! Tas ir, visas izmaiņas tagad ir jāveic tikai failā ar izvēlni, un 10 citos tas tiks parādīts ar izmaiņām.

Savienojuma nozīme php vienkāršā krievu valodā:

Fails 1.php
Augšējā izvēlne

Fails 2.php
Apakšējā izvēlne

example.php fails
Savienot failu 1.php
Lapas saturs
Savienot failu 2.php

Faila example.php apstrādes rezultātā tas tiks parādīts
Augšējā izvēlne
Lapas saturs
Apakšējā izvēlne
Attiecīgi, lai kaut ko mainītu apakšējā izvēlnē, izmaiņas jāveic tikai 2.php failā

Ceļš uz failu

Fails ir savienots atbilstoši failam norādītajam ceļam. Ir divas ceļa iespējas: relatīvā un absolūtā. Relatīvs — šī ir norāde par ceļu uz pievienoto failu attiecībā pret failu ar savienojuma instrukcijām. Absolūtais - norādot pilnu ceļu uz iekļauto failu.

PHP kods

// relatīvā ceļa piemērs
iekļaut "include/your_file.php"; // fails atrodas iekļautajā mapē, kas atrodas tajā pašā direktorijā, kur savienojuma fails

// absolūtā ceļa piemērs
iekļaut $_SERVER["DOKUMENTA_SAKNE"]."/include/your_file.php"; // $_SERVER["DOCUMENT_ROOT"] — norāda vietnes saknes direktoriju

iekļaut un iekļaut_vienreiz

iekļaut ()- konstrukcija, kas paredzēta failu iekļaušanai PHP skripta kodā PHP skripta izpildes laikā. Apstrādājot kodu, instrukcija tiek aizstāta ar pievienotā faila saturu. Iesaku uzreiz apskatīt piemēru.

Apskatīsim, kā darbojas iekļaušana, piemēram, izmantojot divus failus: indekss.php Un text.php. Darba vienkāršības labad pieņemsim, ka tie atrodas vienā direktorijā.

PHP kods(fails indekss.php)

Echo "Vienkāršs teksts, kas atrodas galvenajā failā";
iekļaut "text.php"; // ietver faila text.php saturu

?>
PHP kods(fails text.php)

Atbalss "Iekļautajā failā esošais teksts";

?>
Faila index.php palaišanas rezultāts būs:

Vienkāršs teksts, kas atrodas galvenajā failā
Teksts iekļauts iekļautajā failā
Vai tas tiešām ir ērti? Tagad, mainot saturu text.php failā, index.php rezultāts būs pavisam cits!

Tagad parunāsim par citu dizainu - iekļaut_vienreiz. Tas darbojas tieši tāpat kā iekļaut, tikai izveidots vēlāk un tiem gadījumiem, kad failu nevar iekļaut atkārtoti. Piemēram, jūs baidāties, ka kļūdas rezultātā jūs varat savienot failu 2 vai vairāk reizes, kas ietekmēs lapas nedarbošanos un atbilstoša kļūdas ziņojuma saņemšanu.

PHP kods

Include_once "text.php"; // fails text.php tiks iekļauts tikai vienu reizi

// tālāk norādītie atkārtotie savienojumi netiks ņemti vērā un parādīti
// un tas neizraisīs kļūdas ziņojuma rādīšanu
include_once "text.php"; // nekas nenotiks

prasīt un prasīt_vienreiz

Instrukcijas request un request_once darbojas identiski, lai iekļautu un include_once, izņemot tikai vienu līdzekli — ja iekļautais fails netiek atrasts, skripta izpilde tiks apturēta (skripts vairs netiks lasīts), savukārt include un include_once vienkārši parāda brīdinājumu. un turpiniet turpmāku skripta izpildi.

Ja iekļaut vai pieprasīt nedarbojas

Lai saprastu iemeslus, kāpēc iekļaušana nedarbojas, iesaku pārbaudīt visu soli pa solim. Neatkarīgi no tā, cik skaidri un virspusēji ir zemāk minētie punkti, pārbaudiet visu no paša sākuma

1. Pārbaudiet, vai jūsu serveris un php darbojas un vai kāds php kods vietnē vispār darbojas
2. Pārbaudiet, vai iekļautais fails pastāv
3. Pārbaudiet, vai savienojumā ir pareizi ievadīts faila nosaukums un paplašinājums
4. Pārliecinieties, vai iekļautais php fails patiešām atrodas jūsu norādītajā adresē
5. Mēģiniet norādīt absolūto ceļu (pilnu ceļu uz failu), nevis relatīvo ceļu.

Piemērs PHP kods

Iekļaut "http://www.example.com/include/your_file.php";

// DOCUMENT_ROOT - apzīmē resursa saknes direktoriju
iekļaut $_SERVER["DOKUMENTA_SAKNE"]."/include/your_file.php";

6. Ja fails netiek savienots un netiek parādīta kļūda, izveidojiet failu direktorijā ar failu, kuru pievienojat. .htaccess ar šādu saturu

Php_flag display_errors Ieslēgts
vai php failā, pirms savienojuma izveides ielīmējiet šo rindiņu

Error_reporting (E_ALL);
Abi iestatījumi liks parādīt kļūdas

Lapu izkārtojumi

13.22. prasīt() operators

Prasības() priekšraksta princips ir līdzīgs #include() priekšprocesora direktīvai C++ programmēšanas valodā. Ja jūs pārzināt šo valodu, tad sekojošo operatoru apgūšana jums nesagādās grūtības, tomēr, pat ja neesat pazīstams, mēs centīsimies sīkāk aprakstīt šo operatoru darbības principus. Operators request() aizvieto, izsauc to failu saturu, kuru ceļš un nosaukums tika norādīts operatora blokā:

prasīt("ceļš/faila nosaukums.html");

Ja fopen_wrapper_SB PHP URL parametri ir iestatīti uz iespējoti (tie parasti ir noklusējuma iestatījumi), varat arī definēt failu prasību() priekšrakstā, izmantojot URL (vienotu resursu vietrādi), nevis izmantot vietējo ceļu uz vajadzīgo failu. prasīt () paziņojums, piemēram:

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

Prasības() priekšraksts nav funkcija. Visticamāk, to var saukt par valodas konstrukciju. Kāpēc mēs nevaram uzskatīt šo operatoru par funkciju:

Require() nav pakļauts nevienai kontroles struktūrai;

Require() neatgriež nekādu vērtību, ko dara funkcija.

Mēģinājums izsaukt jebkuru vērtību no prasības() priekšraksta radīs kļūdu un pārtrauks turpmāko programmas izpildi.

Atšķirībā no include, prasīt vienmēr nolasa faila adreses rindiņu, pat ja tas netiek izpildīts. Ja fails ir jāiekļauj nosacīti, izmantojiet priekšrakstu include(). Vienkārši nosacījuma izteiksmes netiek uzskatītas par efektīvām, strādājot ar prasību priekšrakstu. Tomēr, ja rinda, kurā atrodas priekšraksts, netiek izpildīta, netiks izpildīta neviena koda rindiņa šajā adresē. Tas ir loģiski, jo šajā gadījumā failam var piekļūt, izmantojot operatoru request().

Cilpas izpildes struktūras neietekmē prasības() priekšraksta darbību, lai gan iegūtajā failā ietvertais kods joprojām ir pakļauts cilpai. No tā mēs varam secināt, ka pieprasījuma paziņojums tiek izpildīts tikai vienu reizi, atšķirībā no include().

Tāpēc jūs nevarat ievietot prasību() priekšrakstu ar visām tam pievienotajām instrukcijām cilpas priekšraksta blokā un sagaidīt dažādas šī priekšraksta izpildes katrā iterācijā, kamēr cilpa darbojas. Lai izmantotu šīs priekšrocības, iesakām izmantot operatoru include().

Kad fails tiek palaists ar prasību() priekšrakstu, ietvertais cbd pārmanto tās rindas mainīgās iespējas, kurā tiek izpildīts requre(). Visi šajā rindā pieejamie mainīgie būs pieejami izsauktajā failā. Ja prasības priekšraksts atrodas izsaucošā faila funkcijā, tad viss izsauktajā failā esošais kods darbosies tā, it kā tas būtu definēts šajā failā.

Ja prasības() priekšraksts darbojas failā, kas tiek izsaukts, izmantojot HTTP un izmanto fopen iesaiņotājus, un ja stacijas adrese interpretē iegūto failu kā PHP kodu, mainīgos var nodot request() priekšrakstam, izmantojot URL request. , piemēram, HTTP iegūšanas metode. Tas nav tas pats. ka pieprasījuma paziņojuma faila izsaukšana, jo skripts praktiski turpina skripta izpildi attālajā serverī, un rezultāti tiks iekļauti lokālajā skriptā:

/* nedarbosies, jo to neapstrādāja serveris */

prasīt ("http://mans_domēna_nosaukums/fails.txt?varone=1&vartwo=2");

/* nedarbojas, jo faila nosaukums ir "file.php?varone=1&vartwo=2"

mērķis ir lokālā failu sistēma */

prasīt("fails.php?varone=1&vartwo=2");

/* darbosies bez kļūdām */

prasīt("http://mans_domēna_nosaukums/test.php?varone=1Svartwo=2");

prasīt("fails.txt");

prasīt("fails.php");

Šie piemēri palīdzēs skaidri saprast, kā lietot operatoru request(), kā arī izvairīties no kļūdām, veidojot programmas. Tālāk mēs apskatīsim priekšrakstu include(), kas ir līdzīgs pieprasījumam() un kā tas darbojas.



 

Varētu būt noderīgi izlasīt: