2009-12-24 35 views
7

Đây có phải là cách thích hợp để define đường dẫn bao gồm cho cả * nix và Windows?Cách thích hợp để đặt PHP bao gồm đường dẫn cho * Nix và Windows

define('INCPATH', realpath(dirname(__FILE__)) . '/'); 

Lưu ý dấu gạch chéo về phía trước tôi đã bao gồm ở trên. Là dấu gạch chéo chuyển tiếp cho bao gồm/yêu cầu giống nhau cho cả hai hệ điều hành, là tốt?

EDIT (CẬP NHẬT VỚI ĐÁP):

Từ những gì tôi có thể thu thập, mã của tôi dưới đây là cách thích hợp để phổ biến xác định một bao gồm/yêu cầu con đường cho cả * nix và Windows OS của. Vui lòng sửa bất cứ điều gì trong phần bình luận bên dưới.

Điều khiến tôi nhầm lẫn là nhiều ví dụ tôi thấy hiển thị thay thế back-slashes (\) thành forward-slashes(/). Dựa trên một số câu trả lời dưới đây, điều này là không cần thiết.

Vì vậy, các mã chính xác cuối cùng (cho purist) là:

define('INCPATH', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR); 

Đó là mã tạo ra kết quả như sau:

*nix: /path/to/the/file/

Windows: C:\Path To\the\file\

Một giải thích ngắn gọn, chúng tôi làm việc cách từ bên trong (__FILE__) ra (realpath()):

FILE Đường dẫn đầy đủ và tên tệp của tệp. Luôn luôn chứa đường dẫn tuyệt đối với các liên kết tượng trưng được giải quyết.

dirname() Chuỗi được trả về là đường dẫn với bất kỳ dấu rãnh/thành phần nào bị xóa. Chịu trách nhiệm xóa tên tệp.

realpath() Trả về tên đường dẫn tuyệt đối được chuẩn hóa (chuẩn hóa/chuẩn hóa) thành công. Đường dẫn kết quả sẽ không có liên kết tượng trưng, ​​các thành phần '/./' hoặc '/../'. Tôi cho rằng điều này được bao gồm vì tính toàn diện bởi vì __FILE__ đã giải quyết các liên kết tượng trưng. Hoặc có thể nó được bao gồm để giải quyết các đường dẫn tương đối? Dù bằng cách nào, nó dường như củng cố mục tiêu của chúng tôi.

Trả lời

7

Chuyển tiếp dấu gạch chéo sẽ hoạt động đối với cả hai hệ điều hành và đó là cách để thực hiện.

Tôi không thể tìm thấy tham chiếu tuyệt đối cho điều này, nhưng nó được chỉ ra ở một số nơi trong hướng dẫn sử dụng PHP, như herehere. Và, nó hoạt động cho tôi, một người dùng Windows & Linux.

Cuối cùng, bạn có thể chỉ định các đường dẫn hỗn hợp trên Windows, như c:\\apache\\htdocs\\myapp/index.php, và tất cả đều hoạt động tốt.

+0

@Derek, thông tin tốt - cảm ơn. Tôi sẽ giả định định nghĩa của tôi ở trên hoạt động trên cả hai hệ điều hành. – Jeff

+1

Tôi thường tự hỏi tại sao dấu gạch chéo ngược vẫn được sử dụng, vì nó gây ra nhức đầu thoát và dấu gạch chéo về phía trước cũng sẽ hoạt động. – Ether

2

Để nhiều người ngạc nhiên, / hoạt động tốt trên Windows — và MSDOS. Trong các tên đường dẫn, nó hoạt động ngay cả trên OpenVMS.

Tuy nhiên, nếu bạn đang làm điều gì đó trong PHP cho đường dẫn, mảng sẽ là cấu trúc thuận tiện hơn chuỗi.

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib'); 
4

Hoặc bạn có thể sử dụng hằng số được xác định trước DIRECTORY_SEPARATOR của PHP, sẽ cung cấp cho bạn dấu phân cách thư mục dành riêng cho hệ điều hành. Xem thêm http://www.php.net/manual/en/dir.constants.php.

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