2010-04-09 44 views
5

trong config.php của tôi, nơi tôi có tất cả các hằng số tôi đặt PATH thành đường dẫn tuyệt đối.sử dụng đường dẫn tuyệt đối hoặc tương đối?

nhưng điều này có nghĩa là khi tôi di chuyển thư mục ứng dụng của tôi, tôi phải thay đổi đường dẫn này.

tôi tự hỏi nếu nó tốt hơn để thiết lập một đường dẫn tương đối, theo cách đó bất cứ khi nào tôi di chuyển ứng dụng của tôi giữa thư mục sản xuất và phát triển, tôi không phải thay đổi nó.

các bạn làm cách nào khi di chuyển giữa các thư mục?

+0

thú vị - một câu hỏi cung cấp hai lựa chọn thay thế, có bốn câu trả lời. Btw, tương đối - mỗi lần (hmm, bạn có tính $ _SERVER [] là tương đối hay tuyệt đối không?) – Mawg

+0

Tôi chắc chắn điều này đã được yêu cầu trước đó. – staticsan

Trả lời

8

Cách tốt nhất mà tôi đã tìm thấy là phải làm như sau:

define("PATH", realpath(dirname(__FILE__))); 

Cung cấp cho bạn thư mục của tệp hiện tại. Nếu bạn làm điều này trong tập tin cài đặt/bootstrap/init của bạn, bạn sẽ có nó cho ứng dụng của bạn, và nó sẽ làm việc cho bất kỳ hệ thống tập tin nào.

+0

Phương pháp của tôi tương tự, ngoại trừ việc lồng các hàm. Liệu nó có quan trọng, hay tôi đã bỏ qua điều gì đó? – alex

+0

Ha ha, đẹp quá. Không, nó không thành vấn đề. – zombat

+0

realpath có nghĩa là gì? và điều gì xảy ra nếu không có nó? –

3

__FILE__ là bạn của bạn.

1

IMO, đường dẫn tuyệt đối là tin xấu. Ngay cả khi bạn không có kế hoạch di chuyển, nhà cung cấp dịch vụ lưu trữ của bạn có thể di chuyển bạn, như DreamHost gần đây đã làm với tôi. Tôi đã tốt .... Nhưng có những tài liệu tham khảo 14 tới "con đường" trên wiki của họ: http://wiki.dreamhost.com/Server_Moves

+1

Đây là lý do tại sao khai báo liên tục liên quan đến __FILE__, sẽ luôn hợp lệ, ngay cả khi máy chủ di chuyển về mặt vật lý. –

3
define('BASE_PATH', dirname(realpath(__FILE__))); 

Điều này sẽ làm cho tập lệnh của bạn dễ dàng hơn.

Bao gồm một tập tin như thế này

include BASE_PATH . 'includes/header.php'; 
1

tôi làm ba việc để giải quyết này:

  1. Đầu tiên là sử dụng đường dẫn tương đối đến tập tin hiện tại và bao gồm những thứ sử dụng dirname(__FILE__).

  2. Cách thứ hai là sử dụng trình tải bao gồm tất cả các tải trọng trang. Tệp này có một trách nhiệm: để tìm thư mục bao gồm, thường thông qua một cuộc gọi tương đối. Miễn là mối quan hệ tương đối này vẫn tồn tại, nó không cần thay đổi.

  3. Tôi cũng muốn hỗ trợ cài đặt tùy chỉnh thuộc về cài đặt thay vì codebase. Điều này được thực hiện bởi một cơ chế bao gồm và ghi đè một vài cài đặt sẽ cụ thể cho máy chủ mà mã được bật.

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