عبارات شامل و نیاز است. دستورات 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 استفاده می‌شوند.

اگر «url های اینترنتی پوشه پوشاننده» در PHP گنجانده شده است (مانند پیکربندی پیش فرض)، می توانید فایلی را برای اضافه شدن با استفاده از URL (از طریق HTTP) به جای مسیر محلی تعیین کنید. اگر سرور هدف فایل مورد نظر را به عنوان کد PHP تفسیر کند، متغیرها را می توان با استفاده از یک رشته جستجوی URL، مانند HTTP GET، به فایل شامل ارسال کرد. به بیان دقیق، این با گنجاندن یک فایل و به ارث بردن دامنه متغیرهای فایل والد یکسان نیست. پس از همه، اسکریپت بر روی یک سرور راه دور اجرا می شود و نتیجه در اسکریپت محلی گنجانده می شود.

برای اینکه امکان گنجاندن از راه دور فایل ها در دسترس باشد، باید در فایل پیکربندی (php.ini) تنظیم کنید. allow_url_fopen=1.

توجه داشته باشید: نسخه های PHP برای ویندوز قبل از 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" ; // آثار

?>



اپراتورهای پی اچ پی: require()، require_once()، include_once()

تاریخ: 2012-10-15

توابع PHP: require()، require_once()، include()، include_once()

در درس گذشته به طور مفصل در مورد کار بحث کردیم. اجازه دهید به شما یادآوری کنم که اپراتور عبارتند از()در PHP، محتوای یک صفحه وب را با صفحه وب دیگری جایگزین می کند. اما PHP توابع دیگری نیز دارد که به شما اجازه می دهد تا کار مشابهی را پیاده سازی کنید. به طور خاص، این توابع هستند:

include_once()
نیاز()
require_once()

برای درج محتوای یک صفحه وب خاص کافی است مسیر فایل مورد نظر را به عنوان آرگومان (در داخل پرانتز) برای این توابع مشخص کنید. به عنوان مثال، مانند این:

include ("file.php") یا require ("file.php")

وظیفه همه این توابع یکسان است: کد یا متن مورد نظر را از یک فایل در فایل دیگر وارد کنید. اما، با این وجود، این توابع با یکدیگر متفاوت هستند. بیایید آن را بفهمیم.

پسوند " _یک بار" به شما امکان می دهد فقط یک بار و بدون توجه به تعداد تماس ها، کد یک فایل را برای جایگزینی به فایل دیگری متصل کنید. برای وضوح، اجازه دهید به یک مثال ساده نگاه کنیم. در درس آخر متوجه شدیم که با استفاده از عملگر عبارتند از()، می توانید هدر سایت را در یک فایل جداگانه قرار دهید header.php، برای سادگی فرض می کنیم که لوگوی گرافیکی سایت را در این فایل قرار می دهیم. در جای مناسب در صفحه وب (در این مورد، در محل هدر سایت) کد را می نویسیم فهرست 1.

لیست 1.

سپس، بر این اساس، لوگوی سایت نیز دو بار، تقریباً به صورت زیر نمایش داده می شود:

موافقم، خیلی زیبا به نظر نمی رسد، درست است؟ معلوم می شود که اپراتور عبارتند از()دوبار آن را از پوشه بیرون می آورد بلوک هافایل header.phpو آن را دو بار به جای هدر سایت جایگزین می کند.

به طور کلی، فایل ارائه شده ممکن است حاوی توابعی باشد که وقتی به فایل منبع اضافه می شود، ممکن است خطاهایی ایجاد کند و صفحه وب شما اصلاً بارگیری نشود.

در سایت‌های بزرگ خیلی راحت گیج می‌شوید که کجا و چه فایلی را وارد کرده‌اید و آیا می‌توانید دوباره آن را اضافه کنید، و این می‌تواند منجر به خطا شود. به همین دلیل آنها پیشوند را پیدا کردند " _یک بار"به توابع عبارتند ازو نیاز, که فقط یک بار محتویات یک فایل را در یک صفحه وب دیگر جاسازی می کند.

شامل () چه تفاوتی با require() دارد

حالا بیایید در مورد عملکرد صحبت کنیم عبارتند از()متفاوت از عملکرد نیاز(). در کارشان هیچ تفاوتی بین آنها وجود ندارد. هر دو تابع محتویات یک فایل را در فایل دیگر ترکیب می کنند. اما آنها یک تفاوت دارند و آن در نحوه واکنش آنها به موقعیتی است که فایلی که ما متصل می کنیم در جای خود نیست.

بیایید به کد مثال قبلی برگردیم فهرست 1. ما کد زیر را داریم:

شامل ("blocks/header.php");

بیایید سعی کنیم فایل را حذف کنیم header.php، که در واقع به آن وصل می کنیم، مثلاً فایل آسیب دیده یا به طور تصادفی از شمال حذف شده است.

ما فایل تست را به روز می کنیم و این خطا را می بینیم:

همانطور که می بینید، پیامی ظاهر می شود که در پوشه (پوشه) بلوک هافایل پیدا نشد header.php، اما برنامه همچنان اجرا می شود و بقیه صفحه وب سایت به طور معمول نمایش داده می شود.

اگر کد بنویسیم ( لیست 3) با استفاده از تابع نیاز():

لیست 3.

Require ("blocks/header.php");

این چیزی است که ما داریم فقط یک پیغام خطا نمایش داده خواهد شد, و برنامه دیگر اجرا نمی شود، و فقط این پیام را خواهید دید.

همانطور که می دانید PHP دارای 4 عملکرد برای گنجاندن فایل های دیگر است. این عبارتند از, شامل_یکبار, نیازو نیاز_یک بار. تفاوت آنها چگونه است و چگونه می توان از آنها به درستی استفاده کرد؟

ابتدا، بیایید تفاوت بین آنها را بررسی کنیم عبارتند ازو نیاز. این دو تابع تنها در واکنش به عدم وجود فایل شامل تفاوت دارند. تابع عبارتند از("فعال")، اگر فایل مشخص شده از دست رفته باشد، یک پیغام خطایی مانند E_WARNING ایجاد می کند، اما اجرای برنامه ادامه می یابد. بر خلاف او، نیاز("نیاز")، اگر هیچ فایلی وجود نداشته باشد، یک خطای کشنده (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 تغییراتی ایجاد کنید

مسیر فایل

فایل با توجه به مسیر مشخص شده برای فایل متصل می شود. دو گزینه مسیر وجود دارد: نسبی و مطلق. نسبی - این نشان دهنده مسیر فایل متصل نسبت به فایل با دستورالعمل های اتصال است. Absolute - مشخص کردن مسیر کامل فایل موجود.

کد پی اچ پی

// مثالی از یک مسیر نسبی
شامل "include/your_file.php"; // فایل در پوشه include قرار دارد که در همان دایرکتوری فایل اتصال قرار دارد

// مثال یک مسیر مطلق
شامل $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php"; // $_SERVER["DOCUMENT_ROOT"] - دایرکتوری ریشه سایت را نشان می دهد

شامل و include_one

عبارتند از()- یک ساختار طراحی شده برای گنجاندن فایل ها در کد اسکریپت PHP در طول اجرای اسکریپت PHP. هنگام پردازش کد، دستورالعمل با محتوای فایل پیوست جایگزین می شود. پیشنهاد می کنم فوراً به یک مثال نگاه کنید.

بیایید به نحوه شامل کردن کارها با استفاده از دو فایل به عنوان مثال نگاه کنیم: index.phpو text.php. برای سادگی کار، فرض می کنیم که آنها در یک فهرست قرار دارند.

کد پی اچ پی(فایل index.php)

Echo "متن ساده موجود در فایل اصلی"؛
شامل "text.php"; // شامل محتویات فایل text.php است

?>
کد پی اچ پی(فایل text.php)

Echo "متن موجود در فایل موجود"؛

?>
نتیجه اجرای فایل index.php این خواهد بود:

متن ساده موجود در فایل اصلی
متن موجود در فایل همراه
آیا واقعا راحت است؟ حال با تغییر محتویات فایل text.php نتیجه index.php کاملا متفاوت می شود!

حالا بیایید در مورد طرح دیگری صحبت کنیم - شامل_یکبار. این دقیقاً مانند include عمل می‌کند، فقط بعداً ایجاد می‌شود و برای مواردی که فایل نمی‌تواند دوباره گنجانده شود. به عنوان مثال، شما می ترسید که در نتیجه یک خطا ممکن است یک فایل را 2 بار یا بیشتر متصل کنید، که باعث می شود صفحه به درستی کار نکند و پیام خطای مربوطه را دریافت کند.

کد پی اچ پی

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. سعی کنید یک مسیر مطلق (مسیر کامل فایل) را به جای یک مسیر نسبی مشخص کنید.

مثال کد پی اچ پی

شامل "http://www.example.com/include/your_file.php"؛

// DOCUMENT_ROOT - نشان دهنده دایرکتوری ریشه منبع است
شامل $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php";

6. اگر فایل شما متصل نشد و خطایی نمایش داده نشد، در پوشه فایلی که در حال اتصال آن هستید، یک فایل ایجاد کنید. htaccessبا مطالب زیر

Php_flag display_errors روشن است
یا در فایل php، قبل از اتصال خط زیر را Paste کنید

گزارش_خطا (E_ALL)؛
هر دو تنظیمات باعث نمایش خطاها می شوند

طرح بندی صفحه

13.22. عملگر require().

دستور ()require مشابه دستورالعمل پیش پردازنده #include() در زبان برنامه نویسی C++ عمل می کند. اگر با این زبان آشنایی دارید، تسلط بر عملگرهای زیر برای شما سخت نخواهد بود، با این حال، حتی در صورت عدم آشنایی، سعی می کنیم اصول عملکرد این عملگرها را با جزئیات بیشتری شرح دهیم. عملگر ()revice جایگزین می کند، محتویات فایل هایی را که مسیر و نام آنها در بلوک عملگر مشخص شده است را فراخوانی می کند:

require("path/filename.html");

اگر پارامترهای URL PHP fopen_wrapper_SB روی فعال تنظیم شده باشند (معمولاً پیش فرض هستند)، سپس می توانید فایل را در دستور () require با استفاده از URL (Uniform Resource Locator) به جای استفاده از مسیر محلی به فایل مورد نیاز در به عنوان مثال عبارت require().

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

دستور ()require یک تابع نیست. به احتمال زیاد می توان آن را ساخت زبان نامید. چرا نمی توانیم این عملگر را یک تابع در نظر بگیریم:

Require () تابع هیچ ساختار کنترلی نیست.

Require() هیچ مقداری را بر نمی گرداند، این همان کاری است که یک تابع انجام می دهد.

تلاش برای فراخوانی هر مقدار از دستور ()require منجر به خطا می شود و اجرای برنامه را قطع می کند.

برخلاف include، نیاز همیشه خط آدرس فایل را می خواند، حتی زمانی که اجرا نمی شود. اگر نیاز به گنجاندن یک فایل به صورت مشروط دارید، از عبارت include() استفاده کنید. عبارات شرطی ساده در هنگام کار با دستور require موثر در نظر گرفته نمی شوند، اما اگر خطی که دستور requre روی آن قرار دارد اجرا نشود، هیچ خط کدی در فایل در آن آدرس اجرا نمی شود. این منطقی است، زیرا فایل در این مورد از طریق عملگر ()require قابل دسترسی است.

ساختارهای اجرای حلقه بر رفتار دستور ()require تأثیری نمی‌گذارند، اگرچه کد موجود در فایل حاصل هنوز تابع حلقه است. از این نتیجه می‌توان نتیجه گرفت که دستور require فقط یک بار اجرا می‌شود، برخلاف include().

بنابراین، نمی‌توانید دستور ()require را با تمام دستورالعمل‌های متصل به آن در یک بلوک دستور حلقه قرار دهید و انتظار داشته باشید که در هر تکرار، در حالی که حلقه در حال اجرا است، اجرای متفاوتی از این دستور را داشته باشید. برای استفاده از این مزیت، پیشنهاد می کنیم از عملگر include() استفاده کنید.

هنگامی که یک فایل با دستور ()require اجرا می‌شود، cbd موجود قابلیت‌های متغیر خطی را که بر روی آن requre() اجرا می‌شود به ارث می‌برد. هر متغیر موجود در این خط در فایل فراخوانی شده در دسترس خواهد بود. اگر یک دستور نیاز در داخل یک تابع در یک فایل فراخوانی وجود داشته باشد، آنگاه تمام کدهای موجود در فایل فراخوانی شده به گونه ای رفتار می کنند که گویی در آن تعریف شده است.

اگر دستور ()require روی فایلی کار می‌کند که از طریق HTTP فراخوانی می‌شود و از بسته‌بندی‌های fopen استفاده می‌کند، و اگر آدرس ایستگاه فایل حاصل را به‌عنوان کد PHP تفسیر کند، می‌توان متغیرها را با استفاده از URL -request به دستور require() ارسال کرد. ، مانند روش HTTP Get. این یکسان نیست. فراخوانی فایل دستور نیازمندی از آنجایی که اسکریپت عملاً اجرای اسکریپت را در سرور راه دور ادامه می دهد و سپس نتایج در اسکریپت محلی گنجانده می شود:

/* کار نخواهد کرد زیرا توسط سرور پردازش نشده است */

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

/* کار نمی کند زیرا نام فایل "file.php?varone=1&vartwo=2" است.

سیستم فایل محلی را هدف قرار می دهد */

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

/* بدون خطا کار خواهد کرد */

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

require("file.txt");

require("file.php");

این مثال‌ها به شما کمک می‌کند تا به وضوح نحوه استفاده از عملگر ()require را درک کنید و همچنین از اشتباه در هنگام ایجاد برنامه‌ها جلوگیری کنید. در مرحله بعد، عبارت include() را که شبیه دستور ()required است و نحوه کار آن را بررسی خواهیم کرد.



 

شاید خواندن آن مفید باشد: