Изявленията включват и изискват. Операции Require и require_once в PHP

Конструкцията на изисква включвания

Дизайн изискватви позволява да включвате файлове в PHP скрипт, изпълняващ PHP скрипт. Общ синтаксис изискваттакива:

изискване на име на файл;

При стартиране (точно при стартиране, а не по време на изпълнение!) на програмата, интерпретаторът просто ще замени инструкцията със съдържанието на файла file_name (този файл може също да съдържа PHP скрипт, рамкиран, както обикновено, с тагове И ?> ). Освен това той ще направи това непосредствено преди стартиране на програмата (за разлика от това, което е обсъдено по-долу). Това може да бъде доста удобно за включване на различни шаблонни страници с HTML код в изхода на скрипта. Ето един пример:

Файл Header.html:

Това е заглавие

Файл Footer.html:
Домашна компания, 2005 г.

Файл Script.php
изискват "header.htm";
// Скриптът показва тялото на самия документ
изискване на "footer.htm";
?>

Така че дизайнът изискватви позволява да сглобявате PHP скриптове от няколко отделни файла, които могат да бъдат като html-страници и php- скриптове.

Дизайн изискватподдържа включване на отдалечени файлове (от PHP 4.3.0). Например:

// Следният пример не работи, защото се опитва да включи локален файл
изискване "file.php?foo=1&bar=2" ;
// Следният пример работи
изискват;
?>

! Дизайн изискватви позволява да включвате отдалечени файлове, ако тази функция е активирана в PHP конфигурационния файл. Подробна информация .

Включително отдалечени файлове

PHP ви позволява да работите с URL обекти като обикновени файлове. Пакерите, налични по подразбиране, се използват за работа с отдалечени файлове чрез ftp или http протокол.

Ако „fopen wrapper URLs“ са включени в PHP (както в конфигурацията по подразбиране), можете да посочите файл, който да бъде включен, като използвате URL (чрез HTTP) вместо локален път. Ако целевият сървър интерпретира целевия файл като PHP код, променливите могат да бъдат предадени на включващия файл с помощта на низ на заявка за URL адрес, както в HTTP GET. Строго погледнато, това не е същото като включването на файл и той да наследи обхвата на променливите на родителския файл; в крайна сметка скриптът се изпълнява на отдалечен сървър и след това резултатът се включва в локалния скрипт.

За да е налично дистанционно включване на файлове, трябва да зададете в конфигурационния файл (php.ini) allow_url_fopen=1.

Забележка: PHP версиите за Windows преди PHP 4.3.0 не поддържат възможността за използване на отдалечени файлове чрез тази функция, дори ако опцията allow_url_fopen е активирана.


/* Това предполага, че www.example.com е конфигуриран да parse.php
* файлове, а не .txt файлове. Също така „Работи“ тук означава, че променливите
* $foo и $bar са налични във включения файл. */

//Няма да работи, защото file.txt не се обработва от www.example.com като PHP
включват "http://www.example.com/file.txt?foo=1&bar=2";

// Няма да работи, защото търси файла "file.php?foo=1&bar=2" в локалния
// файлова система.
включват "file.php?foo=1&bar=2" ;

// Следният пример работи:
включват "http://www.example.com/file.php?foo=1&bar=2";

$foo = 1;
$bar = 2;
включват "file.txt" ; // Върши работа
включват "file.php" ; // Върши работа

?>



PHP оператори: require(), require_once(), include_once()

Дата: 2012-10-15

PHP функции: require(), require_once(), include(), include_once()

В последния урок обсъдихме работата подробно. Нека ви напомня, че операторът включвам ()в PHP, замества съдържанието на една уеб страница в друга уеб страница. Но PHP има други функции, които ви позволяват да реализирате подобна задача. По-специално това са функциите:

include_once()
изисквам()
изисквам_веднъж()

За да вмъкнете съдържанието на конкретна уеб страница, е достатъчно да посочите пътя до желания файл като аргумент (в скоби) към тези функции. Например така:

include("file.php") или require("file.php")

Задачата на всички тези функции е една и съща: вмъкнете желания код или текст от един файл в друг файл. Но въпреки това тези функции се различават една от друга. Нека да го разберем.

Наставка " _веднъж" ви позволява да свържете кода на файл за заместване в друг файл само веднъж, без значение колко извиквания са направени. За по-голяма яснота, нека да разгледаме един прост пример. В последния урок разбрахме, че използването на оператора включвам (), можете да поставите заглавката на сайта в отделен файл header.php, за простота ще приемем, че поставяме графичното лого на сайта в този файл. На правилното място на уеб страницата (в този случай на мястото на хедъра на сайта) пишем кода Списък 1.

Списък 1.

Тогава, съответно, логото на сайта също ще се покаже два пъти, приблизително така:

Съгласете се, не изглежда много красиво, нали? Оказва се, че операторът включвам ()го изважда два пъти от папката блоковефайл header.phpи го замества два пъти на мястото на заглавката на сайта.

Като цяло, включеният файл може да съдържа функции, които, когато се добавят към изходния файл, може да генерират грешки и вашата уеб страница може изобщо да не се зареди.

На големи сайтове е много лесно да се объркате къде и какъв файл сте включили и дали можете да го включите отново и това може да доведе до грешка. Ето защо те измислиха префикса " _веднъж“ към функциите включватИ изискват, който вгражда съдържанието на файл в друга уеб страница само веднъж.

Как include() се различава от require()

Сега нека поговорим за функцията включвам ()различен от функцията изисквам(). Между тях няма разлики в работата им. И двете функции включват съдържанието на един файл в друг. Но те имат разлика и тя се състои в начина, по който реагират в ситуация, когато файлът, който свързваме, не е на мястото си.

Нека се върнем към предишния примерен код Списък 1. Имаме следния код:

Включи ("блокове/заглавие.php");

Нека се опитаме да изтрием файла header.php, който всъщност свързваме, например файлът е повреден или случайно е изтрит от север.

Актуализираме тестовия файл и виждаме тази грешка:

Както можете да видите, се появява съобщение, че в директорията (папката) блоковефайлът не е намерен header.php, но програмата продължава да се изпълнява и останалата част от уеб страницата на сайта се показва нормално.

Ами ако напишем код ( Списък 3) с помощта на функцията изисквам():

Списък 3.

Require("blocks/header.php");

Това е, което имаме ще се покаже само едно съобщение за грешка, и програмата вече няма да се изпълняваи ще видите само това съобщение.

Както знаете, PHP има 4 функции за включване на други файлове. Това включват, включване_веднъж, изискватИ изисквам_веднъж. Как се различават и как да ги използваме правилно?

Първо, нека да разгледаме разликата между включватИ изискват. Тези две функции се различават само по реакцията си при липса на включен файл. функция включват(„разрешаване“), ако посоченият файл липсва, ще генерира съобщение за грешка като E_WARNING, но изпълнението на програмата ще продължи. за разлика от нея, изискват(“require”), ако няма включен файл, генерира фатална грешка (E_ERROR), която води до незабавно спиране на изпълнявания скрипт.

Така, въз основа на познанията ви за това как се изпълнява кодът ви, можете да използвате един или друг оператор. Например, ако това е просто част от HTML, която по принцип не засяга потока на програмата, или това са някои незначителни добавки, без които останалата част от програмата може да функционира нормално, тогава можете да използвате включват. В други случаи препоръчвам да използвате изискват. Това ще предотврати възможността за неправилно изпълнение на кода и в случай на грешка (например включеният файл е изтрит от вирус или е изгубен по време на процеса на разработка) скриптът просто ще приключи. В някоя от следващите статии ще ви покажа как да следите абсолютно всички нестандартни ситуации в кода и да сте наясно какво се случва вътре в сайта.

Сега нека да разгледаме структурите включване_веднъжИ изисквам_веднъж. От прости включватИ изискватте се отличават с окончанието "_once", което предотвратява повторното включване на същите файлове.

Например, ако вашият включен файл съдържа описания на класове или функции, тогава такъв файл не може да бъде включен отново, тъй като ще бъде изпълнен отново и PHP ще изведе фатална грешка, когато се опитва да дефинира класове или функции с вече съществуващи имена. Няма съмнение, че е възможно да се проектира кодът по такъв начин, че повторно свързване никога да не се случва, но това са ненужни ограничения и ненужна работа. Следователно функциите със суфикс „_once“ са полезни и необходими.

В моята практика използвам два вида файлове. Първият тип са файлове, които съдържат един или повече класове и не съдържат код, който се изпълнява "директно". Винаги свързвам такива файлове с помощта на изисквам_веднъж. Вторият тип са шаблони или части от шаблони, съдържащи HTML и малко PHP код. Свързвам такива файлове с помощта на изискват, защото понякога една и съща част от шаблона може да се използва няколко пъти на страница.

Никога не използвам включватИ включване_веднъж, защото смятам, че липсата на файл трябва да бъде критична ситуация, която изисква незабавно решение без никакви компромиси. И ако трябва да включа файл, чието присъствие е съмнително, тогава просто първо проверявам присъствието му с помощта на is_file().

Има още един трик, когато използвате include. Въпреки факта, че това всъщност не е функция, а езикова конструкция, операторът във включения файл работи връщане. И следователно, include връща тази стойност към извикания код. Изглежда така

$ret = включва 'file.php';

Това е всичко за днес, програмирайте правилно!

Една от най-забавните и полезни функции на PHP е включването на друг файл. Например, един уебсайт има горно меню, долно меню и между тях самото съдържание на страницата. И например на 10 страници от сайта се използва долното меню. В един момент трябваше да се направят промени в него. В html бихте направили ръчно промени във всеки отделен файл, но php ви позволява значително да опростите работата със сайта! Кодът за долното меню може да се съдържа в отделен файл, като на всяка от 10-те страници можете просто да включите този отделен файл! Тоест всички промени сега трябва да се правят само във файла с менюто, а на 10 други ще се покаже с промени.

Значението на връзката в php на прост руски език:

Файл 1.php
Горно меню

Файл 2.php
Долно меню

файл example.php
Свържете файл 1.php
Съдържание на страницата
Свържете файл 2.php

В резултат на обработката на файла example.php той ще бъде показан
Горно меню
Съдържание на страницата
Долно меню
Съответно, за да промените нещо в долното меню, трябва да направите промени само във файла 2.php

Пътят до файла

Файлът е свързан според пътя, посочен за файла. Има два варианта на пътя: относителен и абсолютен. Относително - това е указание за пътя до свързания файл спрямо файла с инструкциите за свързване. Абсолютно - посочване на пълния път до включения файл.

PHP код

// пример за относителен път
включват "include/your_file.php"; // файлът е в папката за включване, която се намира в същата директория като файла за връзка

// пример за абсолютен път
включва $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php"; // $_SERVER["DOCUMENT_ROOT"] - показва основната директория на сайта

включване и включване_веднъж

включвам ()- конструкция, предназначена да включва файлове в кода на PHP скрипта по време на изпълнение на PHP скрипта. При обработката на кода инструкцията се заменя със съдържанието на прикачения файл. Предлагам веднага да разгледаме пример.

Нека да разгледаме как работи include като използваме два файла като пример: index.phpИ text.php. За по-лесна работа нека приемем, че те се намират в една и съща директория.

PHP код(файл index.php)

Echo "Обикновен текст, съдържащ се в основния файл";
включват "text.php"; // включва съдържанието на файла text.php

?>
PHP код(файл text.php)

Echo "Текст, съдържащ се във включения файл";

?>
Резултатът от изпълнението на файла index.php ще бъде:

Обикновен текст, съдържащ се в основния файл
Текст, съдържащ се във включения файл
Наистина ли е удобно? Сега, като промените съдържанието на файла text.php, резултатът от index.php ще бъде напълно различен!

Сега нека поговорим за друг дизайн - включване_веднъж. Работи точно както включването, само че е създадено по-късно и за случаите, когато файлът не може да бъде включен отново. Например, страхувате се, че в резултат на грешка може да свържете файл 2 или повече пъти, което ще повлияе на това страницата да не работи правилно и да получи съответното съобщение за грешка.

PHP код

Include_once "text.php"; // файлът text.php ще бъде включен само веднъж

// повторните връзки по-долу няма да бъдат взети предвид и показани
// и няма да доведе до извеждане на съобщение за грешка
include_once "text.php"; // нищо няма да се случи

изискват и изискват_веднъж

Инструкциите require и require_once работят идентично за включване и include_once с изключение само на една функция - ако включеният файл не бъде намерен, изпълнението на скрипта ще бъде спряно (скриптът вече няма да се чете), докато include и include_once просто показват предупреждение и продължете по-нататъшното изпълнение на скрипта.

Ако включите или изисквате, не работи

За да разберете причините, поради които включването не работи, предлагам да проверите всичко стъпка по стъпка. Колкото и ясни и повърхностни да са точките по-долу, проверете всичко от самото начало

1. Проверете дали вашият сървър и php работят и дали някой php код на сайта работи изобщо
2. Проверете дали файлът за включване съществува
3. Проверете дали името и разширението на файла са въведени правилно във връзката
4. Уверете се, че включеният php файл действително се намира на посочения от вас адрес
5. Опитайте да посочите абсолютен път (пълния път до файла), а не относителен път.

Пример PHP код

Включете "http://www.example.com/include/your_file.php";

// DOCUMENT_ROOT - обозначава основната директория на ресурса
включва $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php";

6. Ако вашият файл не се свързва и не се показва грешка, тогава в директорията с файла, който свързвате, създайте файл .htaccessсъс следното съдържание

Php_flag display_errors Вкл
или в php файл, преди да се свържете, поставете следния ред

Error_reporting(E_ALL);
И двете настройки ще принудят грешките да се показват

Оформления на страници

13.22. оператор require().

Принципът на оператора require() е подобен на директивата за препроцесор #include() в езика за програмиране C++. Ако сте запознати с този език, тогава овладяването на следните оператори няма да ви затрудни, но дори и да не сте запознати, ще се опитаме да опишем по-подробно принципите на работа на тези оператори. Операторът require() замества, извиква съдържанието на файловете, чийто път и име са посочени в операторния блок:

изисквам ("път/име на файл.html");

Ако fopen_wrapper_SB PHP URL параметрите са активирани (те обикновено са по подразбиране), тогава можете също да посочите файла в оператора require(), като използвате URL (Uniform Resource Locator), вместо да използвате локалния път до необходимия файл в оператор require() Например:

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

Операторът require() не е функция. Най-вероятно може да се нарече езикова конструкция. Защо не можем да считаме този оператор за функция:

Require() не е подчинен на никакви контролни структури;

Require() не връща никаква стойност, което прави функцията.

Опитът за извикване на която и да е стойност от оператора require() ще доведе до грешка и ще прекъсне по-нататъшното изпълнение на програмата.

За разлика от include, require винаги чете адресния ред на файла, дори когато той не се изпълнява. Ако трябва условно да включите файл, използвайте оператора include(). Обикновените условни изрази не се считат за ефективни при работа с оператора require Въпреки това, ако редът, на който се намира изразът requre, не се изпълни, тогава нито един ред код във файла на този адрес няма да бъде изпълнен. Това е логично, тъй като в този случай достъпът до файла се осъществява чрез оператора require().

Структурите за изпълнение на цикъл не влияят на поведението на оператора require(), въпреки че кодът, съдържащ се в получения файл, все още е обект на цикъла. От това можем да заключим, че операторът require се изпълнява само веднъж, за разлика от include().

Следователно не можете да поставите оператора require() с всички прикачени към него инструкции в блок с оператори за цикъл и да очаквате различни изпълнения на този оператор при всяка итерация, докато същият цикъл се изпълнява. За да се възползвате от това, ви предлагаме да използвате оператора include().

Когато даден файл се изпълнява с оператор require(), съдържащият се cbd наследява възможностите на променливите на реда, на който се изпълнява requre(). Всички променливи, налични на този ред, ще бъдат налични в рамките на извикания файл. Ако изразът за изискване е във функция в извикващ файл, тогава целият код, съдържащ се в извикания файл, ще се държи така, сякаш е дефиниран в този

Ако операторът require() работи върху файл, който се извиква през HTTP и използва обвивки fopen, и ако адресът на станцията интерпретира получения файл като PHP код, тогава променливите могат да бъдат предадени на израза require() с помощта на URL -request , като метода HTTP Get. Не е същото. че извикването на файла с инструкции за изискване, тъй като скриптът на практика продължава изпълнението на скрипта на отдалечения сървър и резултатите след това ще бъдат включени в локалния скрипт:

/* няма да работи, защото не е обработено от сървъра */

изисквам ("http://my_domain_name/file.txt?varone=1&vartwo=2");

/* не работи, защото името на файла е "file.php?varone=1&vartwo=2"

насочва към локална файлова система */

изисквам ("file.php?varone=1&vartwo=2");

/* ще работи без грешки */

изисквам ("http://my_domain_name/test.php?varone=1Svartwo=2");

изисквам ("файл.txt");

изисквам ("файл.php");

Тези примери ще ви помогнат да разберете ясно как да използвате оператора require(), както и да избегнете грешки при създаването на програми. След това ще разгледаме оператора include(), който е подобен на оператора require() и как работи.



 

Може да е полезно да прочетете: