Các hàm PHP: require(), require_once(), include(), include_once(). Bao gồm các tệp trong PHP

Hàm require() tự thay thế bằng tệp được chỉ định, nó hoạt động tương tự như câu lệnh #include trong C. Nếu PHP đã bật "trình bao bọc URL fopen" (theo mặc định), bạn có thể chỉ định URL tệp thay vì một địa chỉ địa phương. Một lưu ý quan trọng về cách thức hoạt động của tính năng này là khi một tệp được đưa vào bằng cách sử dụng các hàm include() hoặc require(), trình phân tích cú pháp sẽ chuyển từ chế độ PHP sang HTML ở đầu tệp bao gồm và chỉ chuyển trở lại ở cuối tệp bao gồm. tài liệu. Do đó, bất kỳ mã nào trong tệp bao gồm cần được PHP thực thi phải được đặt trong thẻ mã PHP (). require() thực tế không phải là một hàm PHP; đúng hơn, nó là một cấu trúc ngôn ngữ. Điều này giải thích một số khác biệt về quy tắc so với hàm. Ví dụ: require() không phụ thuộc vào bất kỳ cấu trúc điều khiển nào. Thứ hai, hàm này không trả về bất kỳ giá trị nào, cố đọc giá trị của require() sẽ dẫn đến lỗi. Không giống như hàm include(), require() sẽ luôn đọc giá trị của tệp được bao gồm, ngay cả khi dòng trên đó không bao giờ được thực thi. Nếu bạn muốn bao gồm một tệp theo một điều kiện nhất định, hãy sử dụng include(). Việc áp dụng các điều kiện không hoạt động với hàm require(). Tương tự, require() không thể được sử dụng trong vòng lặp vì require() chỉ gọi tệp một lần. Với những mục đích này, hãy sử dụng hàm include(). require("header.inc");
Khi một tệp được đưa vào bằng hàm require(), mã được chứa sẽ kế thừa môi trường mà nó được gọi. Bất kỳ biến nào hoạt động bên trong tệp được gọi cũng sẽ hoạt động trong chính tệp đó. Nếu require() được gọi bên trong một hàm thì tất cả mã trong tệp được gọi sẽ hoạt động giống như khi nó được xác định bên trong hàm đó. /* Ví dụ này giả định rằng máy chủ nào đó được cấu hình để phân tích các tệp .php * chứ không phải các tệp .txt. Ngoài ra, "hoạt động" ở đây có nghĩa là các biến * $varone và $vartwo có sẵn trong * tệp require()ed. */ /* Không hoạt động; file.txt không được máy chủ nào đó xử lý. */ require ("http://someserver/file.txt?varone=1&vartwo=2"); /* Không hoạt động; tìm kiếm tệp có tên "file.php?varone=1&vartwo=2" * trên hệ thống tệp cục bộ. */ require ("file.php?varone=1&vartwo=2"); /* Hoạt động. */ require ("http://someserver/file.php?varone=1&vartwo=2"); $varone = 1; require ("file.txt"); "file.php");

Làm Mã chương trình dễ đọc hơn, ví dụ bạn có thể đặt các định nghĩa hàm và/hoặc lớp vào tập tin riêng biệt. Khả năng bao gồm các tệp trong PHP được cung cấp bởi bốn hướng dẫn ngôn ngữ:

  • bao gồm
  • yêu cầu
  • bao gồm_một lần
  • yêu cầu một lần

Tất cả bốn hướng dẫn có thể lấy tên làm tham số tập tin cục bộ. Các câu lệnh bao gồm và yêu cầu rất giống nhau về mặt hành động và chỉ khác nhau ở phản ứng của chúng đối với việc không thể có được tài nguyên được yêu cầu. Ví dụ: nếu tài nguyên không có sẵn, include và include_once hiển thị cảnh báo và cố gắng tiếp tục thực hiện chương trình. require và require_once dừng xử lý trang nếu tài nguyên được yêu cầu không có sẵn.

bao gồm

Câu lệnh include cho phép bạn bao gồm và đính kèm các tập lệnh khác vào tập lệnh PHP của mình. Khi chương trình bắt đầu, trình thông dịch sẽ chỉ thay thế lệnh bằng nội dung của tệp đi kèm. Hãy xem nó hoạt động như thế nào, tạo một tệp có tên add.php và viết vào bên trong:

Bây giờ, hãy tạo một tệp khác và gọi nó, ví dụ: test.php , trong đó chúng tôi sẽ bao gồm tệp add.php:

\$var2 = $var2" ?>

Như bạn có thể thấy từ ví dụ, câu lệnh include sẽ thêm nội dung của tệp được bao gồm, nhờ đó chương trình của bạn có quyền truy cập vào các biến, hàm, lớp khác, v.v.

Lưu ý: Bạn có thể đặt bất kỳ tên nào cho các tệp đi kèm, nhưng luôn thêm phần mở rộng .php, vì nếu bạn sử dụng phần mở rộng khác, kẻ tấn công có thể yêu cầu tệp của bạn và máy chủ web sẽ trả về văn bản của nó. Đây là một rủi ro bảo mật vì mật khẩu hoặc cách chương trình của bạn hoạt động có thể bị tiết lộ, tạo cho kẻ tấn công một cửa sau. Để ngăn điều này xảy ra, các tệp được bao gồm phải được trình thông dịch PHP xử lý.

Kết nối bên trong một chức năng

Nếu việc bao gồm một tệp xảy ra bên trong một hàm thì tất cả mã có trong tệp bao gồm sẽ hoạt động như thể nó được xác định bên trong hàm đó, tức là. mã sẽ có phạm vi địa phương. Hãy viết lại ví dụ trước một chút:

Bây giờ hãy thêm một hàm vào test.php:

Trong phạm vi toàn cầu: $var1"; ?>

Vì chúng ta đã khai báo $var1 toàn cục bên trong hàm nên nó cũng có sẵn trong phạm vi toàn cục.

Đường dẫn đến tập tin

Các tệp được đưa vào dựa trên đường dẫn đã chỉ định đến tệp; nếu đường dẫn không được chỉ định thì đường dẫn được chỉ định trong chỉ thị include_path (trong cấu hình) tập tin php.ini). Nếu không tìm thấy tệp tại đường dẫn đã chỉ định trong include_path , câu lệnh include sẽ cố gắng kiểm tra thư mục làm việc hiện tại chứa tập lệnh chứa tệp; nếu câu lệnh include không thể tìm thấy tệp, một cảnh báo sẽ được đưa ra.

Nếu một đường dẫn được chỉ định - bất kể nó là tuyệt đối hay tương đối (liên quan đến thư mục hiện tại chứa tập lệnh bao gồm) - lệnh include_path sẽ bị bỏ qua.

bao gồm_một lần

Hành vi của include_once giống hệt với câu lệnh include, với điểm khác biệt duy nhất là nếu mã từ tệp đã được đưa vào một lần thì nó sẽ không được đưa vào và thực thi lại. Điều này giúp tránh được vấn đề ghi đè các hàm, biến, v.v. Để hiểu rõ hơn cách thức hoạt động của nó, đây là một ví dụ:

Trong test.php, chúng ta sẽ thử thực thi đoạn mã sau:

Điều này sẽ dẫn đến thông báo lỗi vì các chức năng không thể bị ghi đè. Để tránh những sai lầm trường hợp này, nên sử dụng câu lệnh include_once. Hãy viết lại mã trong tệp test.php:

yêu cầu và yêu cầu_một lần

Các câu lệnh require và require_once hoạt động giống hệt nhau để include và include_once ngoại trừ một điểm khác biệt. Nếu không tìm thấy tệp bao gồm, việc thực thi tập lệnh sẽ bị dừng, trong khi include và include_once sẽ đưa ra cảnh báo và tiếp tục thực thi tập lệnh.

Lời khuyên: hãy cố gắng từ bỏ hoàn toàn việc sử dụng bao gồm và yêu cầu, sử dụng các từ tương tự của chúng với hậu tố _once. Điều này sẽ làm cho việc phân chia lớn dễ dàng hơn và chương trình phức tạp thành các module tương đối độc lập.

Như bạn đã biết, PHP có 4 hàm để bao gồm các tệp khác. Cái này bao gồm, bao gồm_một lần, yêu cầuyêu cầu một lần. Chúng khác nhau như thế nào và làm thế nào để sử dụng chúng một cách chính xác?

Đầu tiên, chúng ta hãy nhìn vào sự khác biệt giữa bao gồmyêu cầu. Hai chức năng này chỉ khác nhau ở phản ứng của chúng khi không có tệp đi kèm. Chức năng bao gồm(“kích hoạt”), nếu thiếu tệp được chỉ định, sẽ tạo ra thông báo lỗi như E_WARNING, nhưng việc thực thi chương trình sẽ tiếp tục. Không giống như cô ấy, yêu cầu(“yêu cầu”) nếu không có tệp đi kèm, nó sẽ hiển thị lỗi nghiêm trọng(E_ERROR), khiến tập lệnh đang chạy dừng ngay lập tức.

Do đó, dựa trên kiến ​​thức của bạn về cách thực thi mã, bạn có thể sử dụng toán tử này hoặc toán tử khác. Ví dụ: nếu đây chỉ là một đoạn HTML thường không ảnh hưởng đến luồng chương trình hoặc đây là một số plugin nhỏ mà không có phần còn lại của chương trình có thể hoạt động bình thường thì bạn có thể thoải mái sử dụng bao gồm. Trong các trường hợp khác, tôi khuyên bạn nên sử dụng yêu cầu. Điều này sẽ ngăn khả năng thực thi mã không chính xác và trong trường hợp xảy ra lỗi (ví dụ: tệp đi kèm đã bị vi-rút xóa hoặc bị mất trong quá trình phát triển), tập lệnh sẽ chỉ kết thúc. Trong bài viết sau, tôi sẽ chỉ cho bạn cách theo dõi mọi thứ. tình huống không chuẩn trong mã và nhận thức được những gì đang xảy ra bên trong trang web.

Bây giờ chúng ta hãy nhìn vào các cấu trúc bao gồm_một lầnyêu cầu một lần. Từ đơn giản bao gồmyêu cầu chúng được phân biệt bằng phần cuối "_once", điều này ngăn không cho đưa lại các tệp tương tự.

Ví dụ: nếu tệp được bao gồm của bạn chứa mô tả về các lớp hoặc hàm thì tệp đó không thể được đưa vào lại vì nó sẽ được thực thi lại và PHP sẽ đưa ra một lỗi nghiêm trọng khi cố gắng định nghĩa các lớp hoặc hàm bằng các tên đã có sẵn. Không còn nghi ngờ gì nữa, có thể thiết kế mã theo cách mà việc kết nối lại không bao giờ xảy ra, nhưng đây là những hạn chế và công việc không cần thiết. Vì vậy, các hàm có hậu tố “_once” rất hữu ích và cần thiết.

Trong thực tế, tôi sử dụng hai loại tập tin. Loại đầu tiên là các tệp chứa một hoặc nhiều lớp và không chứa mã được thực thi “trực tiếp”. Tôi luôn kết nối các tập tin như vậy bằng cách sử dụng yêu cầu một lần. Loại thứ hai là các mẫu hoặc các mẫu có chứa HTML và một số mã PHP. Tôi kết nối các tập tin như vậy bằng cách sử dụng yêu cầu, vì đôi khi cùng một đoạn mẫu có thể được sử dụng nhiều lần trên một trang.

Tôi không bao giờ sử dụng bao gồmbao gồm_một lần, bởi vì tôi coi việc thiếu tệp sẽ là một tình huống nghiêm trọng cần có giải pháp ngay lập tức mà không có bất kỳ thỏa hiệp nào. Và nếu tôi cần đưa vào một tệp mà sự hiện diện của nó bị nghi ngờ thì trước tiên tôi chỉ cần kiểm tra sự hiện diện của nó bằng cách sử dụng is_file().

Có một thủ thuật nữa khi sử dụng include. Mặc dù thực tế đây không thực sự là một hàm mà là một cấu trúc ngôn ngữ, nhưng toán tử bên trong tệp được bao gồm vẫn hoạt động. trở lại. Và do đó, include trả về giá trị này cho mã được gọi. Nó trông như thế này

$ret = include 'file.php';

Hôm nay chỉ vậy thôi, hãy lập trình chính xác!

Một trong những trò chơi thú vị và hấp dẫn nhất các tính năng hữu ích php - kết nối một tệp khác. Ví dụ: trang web có Thực đơn trên cùng, dưới cùng và giữa chúng là nội dung của trang. Và, ví dụ, trên 10 trang của trang web, menu dưới cùng được sử dụng. Tại một số điểm, những thay đổi cần phải được thực hiện đối với nó. Trong html, bạn sẽ thực hiện các thay đổi theo cách thủ công trong từng tệp riêng lẻ, nhưng php cho phép bạn đơn giản hóa đáng kể cách làm việc với trang web! Mã cho menu dưới cùng có thể được chứa trong một tệp riêng biệt và trên mỗi trang trong số 10 trang, bạn chỉ cần bao gồm tệp riêng biệt này! Nghĩa là, tất cả các thay đổi bây giờ chỉ cần được thực hiện đối với tệp có menu và trên 10 tệp khác, nó sẽ được hiển thị cùng với các thay đổi.

Ý nghĩa của sự kết nối trong php đơn giảnở Nga:

Tệp 1.php
Thực đơn trên cùng

Tệp 2.php
Trình đơn phía dưới

tập tin example.php
Kết nối tệp 1.php
Nội dung trang
Kết nối tệp 2.php

Kết quả xử lý file example.php sẽ hiển thị
Thực đơn trên cùng
Nội dung trang
Trình đơn phía dưới
Theo đó, để thay đổi bất cứ điều gì ở menu dưới cùng, bạn chỉ cần thực hiện thay đổi trong tệp 2.php

Đường dẫn đến tập tin

Tệp được kết nối theo đường dẫn được chỉ định cho tệp. Có hai tùy chọn đường dẫn: tương đối và tuyệt đối. Tương đối - đây là chỉ dẫn về đường dẫn đến tệp được kết nối so với tệp có hướng dẫn kết nối. Tuyệt đối - chỉ định đường dẫn đầy đủ đến tệp được bao gồm.

Mã PHP

// ví dụ về đường dẫn tương đối
bao gồm "include/your_file.php"; // file nằm trong thư mục include, nằm cùng thư mục với file kết nối

// ví dụ về đường dẫn tuyệt đối
bao gồm $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php"; // $_SERVER["DOCUMENT_ROOT"] - cho biết thư mục gốc của trang web

bao gồm và bao gồm_một lần

bao gồm()- một cấu trúc được thiết kế để bao gồm các tập tin trong mã Tập lệnh PHP trong khi thực thi một tập lệnh PHP. Khi xử lý mã, hướng dẫn được thay thế bằng nội dung của tệp đính kèm. Tôi đề nghị xem xét một ví dụ ngay lập tức.

Hãy xem cách include hoạt động bằng cách sử dụng hai tệp làm ví dụ: chỉ mục.phpvăn bản.php. Để đơn giản cho công việc, giả sử rằng chúng nằm trong cùng một thư mục.

Mã PHP(tài liệu chỉ mục.php)

Echo "Văn bản thuần có trong tệp chính";
bao gồm "text.php"; // bao gồm nội dung của tệp text.php

?>
Mã PHP(tài liệu văn bản.php)

Echo "Văn bản chứa trong tập tin đính kèm";

?>
Kết quả chạy file index.php sẽ là:

Văn bản thuần túy có trong tệp chính
Văn bản có trong tệp được đính kèm
Nó có thực sự tiện lợi không? Bây giờ, bằng cách thay đổi nội dung trong file text.php, kết quả của file index.php sẽ khác hoàn toàn!

Bây giờ hãy nói về một thiết kế khác - bao gồm_một lần. Nó hoạt động chính xác giống như bao gồm, chỉ được tạo sau và trong những trường hợp không thể đưa lại tệp vào. Ví dụ: bạn sợ rằng do xảy ra lỗi, bạn có thể kết nối một tệp 2 lần trở lên, điều này sẽ ảnh hưởng đến thao tác sai trang và nhận được thông báo lỗi tương ứng.

Mã PHP

Bao gồm_once "text.php"; // file text.php sẽ chỉ được đưa vào một lần

// kết nối lại bên dưới sẽ không được tính đến và hiển thị
// và nó sẽ không hiển thị thông báo lỗi
include_once "text.php"; // sẽ không có chuyện gì xảy ra

yêu cầu và yêu cầu_một lần

Các hướng dẫn require và require_once hoạt động giống hệt nhau để bao gồm và include_once ngoại trừ chỉ một tính năng - nếu không tìm thấy tệp được bao gồm, việc thực thi tập lệnh sẽ bị dừng (tập lệnh sẽ không được đọc nữa), trong khi include và include_once chỉ hiển thị cảnh báo và tiếp tục thực hiện thêm tập lệnh.

Nếu bao gồm hoặc yêu cầu không hoạt động

Để hiểu lý do tại sao tính năng bao gồm không hoạt động, tôi khuyên bạn nên kiểm tra từng bước một. Cho dù những điểm dưới đây có rõ ràng và hời hợt đến đâu, hãy kiểm tra lại mọi thứ ngay từ đầu

1. Kiểm tra xem máy chủ và php của bạn có hoạt động không, có cái nào trong số chúng đang hoạt động không mã php Trực tuyến
2. Kiểm tra xem tệp bao gồm có tồn tại không
3. Kiểm tra xem tên tệp và phần mở rộng có được nhập chính xác trong kết nối không
4. Đảm bảo rằng tệp php đi kèm thực sự nằm ở địa chỉ bạn đã chỉ định
5. Cố gắng không chỉ định đường dẫn tương đối, nhưng tuyệt đối (đường dẫn đầy đủ tới tệp).

Ví dụ Mã PHP

Bao gồm "http://www.example.com/include/your_file.php";

// DOCUMENT_ROOT - biểu thị thư mục gốc của tài nguyên
bao gồm $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php";

6. Nếu file của bạn không kết nối và không hiển thị lỗi thì trong thư mục chứa file bạn đang kết nối tạo một file .htaccess với nội dung sau

Php_flag display_errors Bật
hoặc trong tập tin php, trước khi kết nối, dán dòng sau

Error_reporting(E_ALL);
Cả hai cài đặt sẽ buộc hiển thị lỗi

Khi phát triển bất kỳ trang web nào và bất kỳ sự phức tạp nào, trước hết bạn phải tập trung vào tính chính xác của mã. Ví dụ: nếu bạn tạo toàn bộ mã với nhiều tệp trên một trang sẽ dẫn đến nhầm lẫn và bất tiện lớn. Và để làm điều này, bạn cần sắp xếp các tệp thành các danh mục, sau đó kết nối chúng với mã chính ở đúng vị trí. Phương pháp này có thể được gọi là các tập tin được bao gồm. Đây là một cái tên khá đơn giản nhưng đối với một người lần đầu tiên tiếp xúc với chủ đề này thì có thể gọi như vậy. Và để có thể thu thập tất cả các tệp được bao gồm vào một mã, bạn cần áp dụng những gì được mô tả trong bài viết trước hoặc sử dụng hướng dẫn yêu cầu và require_onceđược mô tả trong văn bản này.

Hướng dẫn thực hành yêu cầu và require_once thực hiện các chức năng tương tự như hướng dẫn bao gồm và bao gồm_một lần, ngoại trừ một số điểm.

Cú pháp cho các hướng dẫn này là:

Require_once 'config.php'; - tập tin cài đặt
require_once 'header.php'; - tiêu đề trang web
yêu cầu 'left.php'; - Thanh bên trái
yêu cầu 'content.php'; - Nội dung trang web
yêu cầu 'footer.php'; - chân trang của trang web

Và sự khác biệt là thế này. Khi xử lý mã, trước tiên PHP chuyển đổi tập lệnh thành biểu diễn bên trong, sau đó nó bắt đầu xử lý từng dòng mã. Và nếu PHP tìm thấy một tệp trong mã được bao gồm trong lệnh bao gồm, sau đó sau khi tải tệp, nó hoàn toàn chuyển sang thực thi, chuyển đổi tệp thành biểu diễn bên trong và chỉ sau đó thực thi từng bước một...

Dưới đây là hướng dẫn yêu cầu hoạt động hơi khác một chút. Tệp được kết nối với sự trợ giúp của nó sẽ được dịch trước khi tập lệnh được thực thi, nói cách khác, tại thời điểm xử lý tất cả mã, tệp này đã được dịch!!! Và do đó kết luận - các tập tin được kết nối bằng hướng dẫn yêu cầu- sẽ hoạt động nhanh hơn. Và đối với tôi, chẳng hạn, hướng dẫn này thích hợp hơn. Nhưng tất nhiên, có một NHƯNG! Khi trình duyệt tải một trang, Internet có thể gặp sự cố và người dùng chỉ có thể xem phần đó của trang đã được tải. Hoặc nếu có một số lỗi xử lý nào đó, quá trình xử lý sẽ không tiến hành ngoài tệp bị đóng băng. Nhưng điều này hiếm khi xảy ra trên một trang web, vì vậy hướng dẫn này vẫn thích hợp hơn.

Tôi gần như quên mất. Hướng dẫn yêu cầu một lần- cũng đóng vai trò bao gồm một tệp trong mã tổng thể chỉ một lần, để không có sự lặp lại.

Đó gần như là tất cả những gì bạn cần biết về cách kết nối các tập tin với quy trình viết mã chung. Kiến thức sâu hơn thường đến từ quá trình học tập và tùy theo nhu cầu, điều đó đương nhiên tôi không thể đoán trước được. Cảm ơn bạn đã quan tâm và xin lỗi vì sự trình bày của tác giả về những chủ đề này.

tháng 3 năm 2019
Thứ hai W Thứ Tư Thứ năm Thứ sáu Đã ngồi Mặt trời
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

QUẢNG CÁO

    Câu lệnh include trong PHP, câu lệnh include_once trong php, các tệp được bao gồm. Khi phát triển một website động đơn giản, hoặc các chương trình cao cấp hơn, không thể

    Cấu trúc của công cụ trang web, công cụ trang web bao gồm những gì, bảng điều khiển trang web, công cụ tạo mẫu. Trong bài viết trước nó đã được mô tả rằng

    Website engine là gì, cách tạo website engine, hệ thống quản lý website bằng PHP. Để hiểu nó là gì