Đâ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.
@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
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