Câu trả lời được chấp nhận của Pekka là không đầy đủ và, trong bối cảnh chung, gây hiểu lầm. Nếu tệp được cung cấp dưới dạng một đường dẫn tương đối, cấu trúc ngôn ngữ được gọi include
sẽ tìm kiếm tệp đó theo cách sau.
Đầu tiên, nó sẽ đi qua các đường dẫn của biến môi trường include_path
, có thể được thiết lập với ini_set
. Nếu không thành công, nó sẽ tìm kiếm trong thư mục riêng của tập lệnh gọi dirname(__FILE__)
( __DIR__
với php> = 5.3.) Nếu điều này cũng không thành công, chỉ khi đó nó sẽ tìm kiếm trong thư mục làm việc! Nó chỉ ra rằng, theo mặc định, biến môi trường include_path
bắt đầu bằng .
, là thư mục làm việc hiện tại. Đó là lý do duy nhất khiến nó tìm kiếm đầu tiên trong thư mục làm việc hiện tại. Xem http://php.net/manual/en/ Chức năng.include.php .
Các tệp được bao gồm dựa trên đường dẫn tệp đã cho hoặc nếu không có đường dẫn nào được chỉ định, thì include_path được chỉ định. Nếu tệp không được tìm thấy trong include_path, thì cuối cùng, include sẽ kiểm tra trong thư mục riêng của tập lệnh gọi và thư mục làm việc hiện tại trước khi bị lỗi.
Vì vậy, câu trả lời chính xác cho phần đầu tiên của câu hỏi là nó nằm ở đâu tập lệnh gọi bao gồm. Câu trả lời cho phần cuối cùng của câu hỏi là thư mục làm việc ban đầu , trong ngữ cảnh máy chủ web, là thư mục của tập lệnh được gọi, tập lệnh bao gồm tất cả các thư mục khác trong khi được PHP xử lý. Trong ngữ cảnh dòng lệnh, thư mục làm việc ban đầu là bất kỳ thứ gì khi php được gọi tại dấu nhắc, không nhất thiết là thư mục chứa tập lệnh được gọi. Các hiện thư mục làm việc, tuy nhiên, có thể thay đổi thời gian chạy với chức năng PHP chdir
. Xem http://php.net/manual/en/ Chức năng.chdir.php .
Đoạn này được thêm vào để bình luận về các câu trả lời khác. Một số người đã đề cập rằng việc dựa vào include_path
là kém mạnh mẽ hơn và do đó tốt hơn là sử dụng các đường dẫn đầy đủ như ./path
hoặc __DIR__ . /path
. Một số còn nói rằng dựa vào .
chính thư mục làm việc là không an toàn, vì nó có thể bị thay đổi. Tuy nhiên, đôi khi, bạn cần dựa vào các giá trị môi trường. Ví dụ: bạn có thể muốn đặt include_path
trống, để thư mục của tập lệnh gọi là nơi đầu tiên mà nó sẽ tìm kiếm, ngay cả trước thư mục làm việc hiện tại. Mã có thể đã được viết và cập nhật thường xuyên từ các nguồn bên ngoài và bạn không muốn chèn lại tiền tố __DIR__
mỗi khi mã được cập nhật.