2012-09-11 69 views
6

Tôi đang cố gắng tìm hiểu cách tốt hơn để quay lại thư mục gốc. Tôi nghe nói rằng việc sử dụng $ _SERVER không phải là cách an toàn nhất. Tôi tự hỏi nếu có một cách tốt hơn. để tôi có thể nhận được thông tin như thế này trên url example.com/exp/my.php

đây là những gì tôi có.

include ($_SERVER['DOCUMENT_ROOT'].'/cpages/cmain/func/init.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/cpages/toppart.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/cpages/boxes/image.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/cpages/bottonpart.php'); 

tôi thay đổi nó để

define ('DOCUMENT_ROOT', dirname(__FILE__)); 
include (DOCUMENT_ROOT.'/cpages/cmain/func/init.php'); 
include(DOCUMENT_ROOT.'/cpages/toppart.php'); 
include(DOCUMENT_ROOT.'/cpages/boxes/image.php'); 
include(DOCUMENT_ROOT.'/cpages/bottonpart.php'); 

nhưng bây giờ nó đem lại cho tôi một lỗi

Warning: include(C:\xampp\htdocs\backbone\image/cpages/cmain/func/init.php) 

($_SERVER['DOCUMENT_ROOT'] không đưa nó cho tôi lỗi đó là của họ một cách để sửa chữa nó?

+1

Tại sao ['$ _SERVER'] (http://www.php.net/manual/en/reserved.variables.server.php)' ['DOCUMENT_ROOT'] 'không an toàn? –

+3

Xem câu hỏi này: http: // stackoverflow.com/questions/390276/how-to-programmatically-defined-the-document-root-in-php –

+0

@JonathonReinhart không chắc chắn nhưng tốt hơn là tìm kiếm một cách an toàn hơn bạn kno –

Trả lời

4

Vấn đề là bạn không thể dựa vào anthing trong mảng $ _SERVER, vì bạn có thể nhận được tất cả các loại giá trị.

Vì vậy, bạn sẽ cần các quy tắc sau:

  1. Nếu viết mã công cộng, đưa đường dẫn trong file config. Sau đó, nếu $ _SERVER không đúng trên máy chủ của người dùng, họ có thể ghi đè lên nó. Bạn có thể giúp hoàn tất cấu hình của mình bằng cách sử dụng DOCUMENT_ROOT nếu bạn muốn sử dụng một số quy tắc đơn giản (xem bên dưới).

  2. Nếu viết mã cho mục đích sử dụng của riêng bạn sẽ chỉ nhảy giữa một máy chủ hoặc hai, thì giả sử DOCUMENT_ROOT là chính xác và viết nó nếu bạn di chuyển máy chủ và cần.


Làm thế nào để cung cấp mặc định DOCUMENT_ROOT nếu trước biên soạn một biến config.

  1. Trên Apache, hãy kiểm tra CONTEXT_DOCUMENT_ROOT. DOCUMENT_ROOT gần như luôn an toàn, nhưng có một vài nơi có thể sai - và đó là trường hợp trong liên kết bạn cung cấp. Nếu apache đang sử dụng mod_alias hoặc mod user_dir. Trong những trường hợp này, bạn cần sử dụng CONTEXT_DOCUMENT_ROOT an toàn hơn. Nhưng lưu ý rằng Apache chỉ đang thêm CONTEXT_DOCUMENT_ROOT trong một tháng hoặc lâu hơn, vì vậy trừ khi bạn có cài đặt mới nhất, bạn cần phải quay lại trên DOCUMENT_ROOT.
  2. DOCUMENT_ROOT - xem ở trên
  3. Sử dụng PATH_TRANSLATED (ít hơn chiều dài PHP_SELF) để tương ứng với đường dẫn đến thư mục làm việc hiện tại.
  4. Sử dụng SCRIPT_FILE_NAME (ít hơn chiều dài PHP_SELF) để đối chiếu đường dẫn đến thư mục làm việc hiện tại.
  5. Sử dụng biến toàn cục __DIR__ vào thư mục làm việc hiện tại

Sau đó, khi bạn có những thông tin chi tiết, kiểm tra cho một tập tin bạn biết tồn tại trong thư mục đó - và nếu có, bạn đã có thể nhận được con đường đúng đắn . Nếu không, hãy thử cái tiếp theo.

+0

cảm ơn ima thử rằng –

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