2012-10-18 41 views
27

tôi có cấu trúc tập tin sau đây:PHP require() tương đối lỗi đường dẫn

 
rootDIR 
    dir1 
     subdir1 
      file0.php 
      file1.php 
    dir2 
     file2.php 
     file3.php 
     file4.php 

file1.php đòi hỏi file3 và file4 từ dir2 như thế này:

require('../../dir2/file3.php') 

file2.php đòi hỏi file1.php như thế này:

require('../dir1/subdir1/file1.php') 

NHƯNG sau đó yêu cầu trong tệp1 không mở được tệp3 và file4 (có thể do con đường relativeness)

Tuy nhiên, lý do là gì và những gì tôi có thể làm cho file2.php nên file1.php đúng yêu cầu file3 và file4

+2

http://stackoverflow.com/questions/11383960/how-to-refer-back-to-public-html-root-file-using-include-after-going-up-one-file Tại đây bạn tìm thấy giải thích rõ ràng. –

Trả lời

37

Hãy thử thêm dirname(__FILE__) trước con đường, như:

require(dirname(__FILE__).'/../../dir2/file3.php'); 

Cần bao gồm tệp bắt đầu từ thư mục gốc

+9

Nếu bạn đang ở trên 5.3 hoặc cao hơn, bạn nên sử dụng __DIR__, giống như dirname (__ FILE__) nhưng tiết kiệm cho bạn cuộc gọi dirname (tốn kém). –

+1

thanks..can bạn cho tôi biết sự khác biệt giữa '/../dir' và '../dir' –

+1

trong trường hợp này bạn sử dụng /../ bởi vì dirname (__ FILE__) trả về một chuỗi như: '/ root/dir1/dir2/dir3 ', thiếu'/'cuối cùng, vì vậy mà không có nó sáp nhập 2 đường dẫn nó sẽ trở thành' /root/dir1/dir2/dir3../ '. – Baronth

-1

Tôi nghĩ rằng CV của bạn là dir2. Hãy thử:

require("file3.php"); 
require("file4.php"); 
3

Một lời khuyên thích hợp ở đây, là để không bao giờ sử dụng những thứ như "../../" đường dẫn tương đối trong các ứng dụng web của bạn . Thật khó đọc và khủng khiếp để bảo trì.

  1. Khi bạn có thể chứng thực. Nó làm cho nó vô cùng khó khăn để biết những gì bạn đang trỏ đến.

  2. Nếu bạn cần thay đổi cấp thư mục của ứng dụng hoặc một phần của ứng dụng. Nó hoàn toàn dễ bị lỗi, và có khả năng sẽ phá vỡ một cái gì đó là khủng khiếp để gỡ lỗi.

Thay vào đó, define một vài hằng số trong file bootstrap của bạn cho con đường chính của bạn (s) và sau đó sử dụng:

require(MY_DIR.'/dir2/file3.php'); 

Di chuyển ứng dụng của bạn từ đó, dễ dàng như thay thế hằng MY_DIR của bạn trong một tệp duy nhất.

Các vấn đề liên quan