2012-03-15 59 views
5

Tôi đang sử dụng một công cụ ủy quyền được tạo sẵn đơn giản để bảo mật trang web của mình. Công cụ này yêu cầu dòng mã này được áp dụng cho đầu mỗi trang .php. Auth.php sống ở cấp độ gốc.Đường dẫn tuyệt đối PHP trong requireonce

<?php ${(require_once('Auth.php'))}->protectme(); ?> 

Tôi cần có thể thêm dòng mã này vào mọi tệp, kể cả tệp trong thư mục con. Nhưng tôi không chắc chắn làm thế nào để áp dụng các phương pháp như thể hiện trong require_once in php để đảm bảo nó luôn luôn được liên kết hoàn toàn, cùng với protectme ​​(); chức năng.

Bất kỳ sự giác ngộ nào được đánh giá cao.

Chúc mừng.

+0

Mục đích của tính năng này là gì? – yoda

Trả lời

6

Đặt biến thành đường dẫn tuyệt đối. $ _SERVER ['DOCUMENT_ROOT'] là một biến toàn cầu PHP lưu trữ các máy chủ, đường dẫn gốc. Bạn chỉ cần chèn phần còn lại của thông tin đường dẫn vào tập lệnh. Ví dụ: nếu trang web của bạn tồn tại trên/var/www/và tập lệnh của bạn tồn tại ở/var/www/scripts, bạn sẽ làm như sau.

$path = $_SERVER['DOCUMENT_ROOT'] . '/scripts/Auth.php'; 
require_once($path); 
2

Bạn có thể sử dụng đường dẫn tương đối để truy cập.

Một mức lên: ../Auth.php

Hai cấp độ lên: ../../Auth.php

, vv

+0

Gợi ý là tốt, nhưng điều đó không phải lúc nào cũng hiệu quả. Nó hoạt động kết hợp với ['__DIR__'] (http://www.php.net/manual/en/language.constants.predefined.php). – hakre

+0

Xin chào. Cảm ơn, nhưng sẽ tốn quá nhiều thời gian để sắp xếp riêng lẻ. – fitzilla

+0

@fitzilla, Trong trường hợp đó, bạn nên làm theo các giải pháp của Hakre hoặc DampeS8N. Họ là những câu trả lời tốt cho vấn đề của bạn. Chỉ cần nhớ rằng bạn đang thực hiện thay đổi INI, điều này sẽ cần được thay đổi ở bất kỳ nơi nào khác mà mã của bạn được triển khai. – Brad

1

Thêm thư mục cấp gốc để include_path của bạn - PHP sẽ làm phần còn lại cho bạn. Không có biến phức tạp, hằng số hay bất kỳ thứ gì.

2

Bạn nên thay đổi php.ini của mình để thay đổi đường dẫn bao gồm thành đường dẫn đến tệp đó (tất cả các tệp khác) của bạn. Sau đó, bạn có thể bao gồm chúng mà không có đường dẫn trên mọi trang bất kể vị trí của chúng.

More Details

-1

Tại sao không chỉ sử dụng đường dẫn tuyệt đối?

require('/auth.php'); 

Có lẽ tôi hiểu lầm câu hỏi của bạn

+0

bởi vì nó sẽ không hoạt động –

0

Nếu bạn không có quyền truy cập vào php.ini, tôi đã sử dụng một cái gì đó như thế này trước khi

include $_SERVER['DOCUMENT_ROOT']."/"."include_me.php"; 
0

Cách đơn giản nhất vì nó là một trang web thay đổi lớn là thêm thư mục của nó trước tiên trong đường dẫn bao gồm trong php.ini.

Nếu bạn không thể thay đổi php.ini, có a few other options for adding it to the include path.

1

Ngoài tất cả mọi thứ đã được đề cập, tôi khuyên bạn nên tập trung tất cả các chức năng phổ biến. Tạo một tập tin, như common.php với tất cả bao gồm mà bạn cần cho bạn ứng dụng và sau đó bao gồm đó từ tất cả các kịch bản của bạn.

Ngoài ra, cách tốt nhất để thực hiện tương đối bao gồm là sử dụng hàm dirname() kết hợp với hằng số ma thuật __FILE__. Ví dụ:

require_once dirname(__FILE__) . '/../lib/common.php'; 
Các vấn đề liên quan