2009-07-24 36 views
7

Ok, tôi đang tạo giao diện quản trị cho blog tùy chỉnh của tôi tại url/admin.Làm php bao gồm công việc trong một thư mục con

Tôi có thể sử dụng cùng một gói bao gồm (bao gồm tự động tải) làm thư mục gốc hay không.

Nếu có thể, tôi cũng muốn có thể tự động sửa các liên kết trong điều hướng sao cho chúng chuyển index.php vào/thay đổi thành ../index.php khi được truy cập từ/admin.

Cảm ơn, Nico

Trả lời

18

Các thực hành tốt nhất cho điều này là để xác định một hằng số 'ABSOLUTE_PATH' có chứa các thư mục đó tất cả mọi thứ nằm dưới. Sau đó, bạn có thể chỉ cần sao chép và dán tất cả mọi thứ, bởi vì nó được xác định đường dẫn 'đầy đủ', mà không thay đổi từ thư mục vào thư mục.

Ví dụ

define("ABS_PATH", $_SERVER['DOCUMENT_ROOT']); 

or 

define("ABS_PATH", dirname(__FILE__)); 
// This defines the path as the directory the file is in. 

Sau đó, bất cứ lúc nào bạn chỉ có thể làm điều này để bao gồm một tập tin

include(ABS_PATH . "/path/to/file"); 
+0

ah, nhưng làm cách nào để tìm hiểu đường dẫn này nên là gì? –

+1

Bạn có thể muốn xem thông tin PHP về biến máy chủ hoặc tự xác định. Nếu bạn tự xác định, hãy đảm bảo đó là thư mục mà TẤT CẢ các tệp nằm trong đó. –

3

Cách dễ nhất là nên sử dụng pathes tuyệt đối/URL.

Đối với các URL, xác định một hằng số/biến nơi nào đó, trỏ đến thư mục gốc của ứng dụng của bạn, như:

define('ROOT_URL', 'http://www.example.com'); 

hoặc

$root_url = 'http://www.example.com'; 

Và sử dụng nó trong mọi liên kết, như:

<a href="{$root_url}/my-page.php">blah</a> 

Bằng cách này, lúc nào cũng OK (và ngày bạn cài đặt dự án của bạn trên máy chủ khác, hoặc trong một subdirector y, bạn chỉ có một hằng số/biến để sửa đổi và mọi thứ vẫn hoạt động)

Để bao gồm/yêu cầu, luôn luôn sử dụng đường dẫn tuyệt đối; một giải pháp là sử dụng dirname, như thế này:

include dirname(__FILE__) . '/my_file.php'; 
include dirname(__FILE__) . '/../my-other-file.php'; 

__FILE__ là tập tin hiện tại, nơi mà bạn đang viết dòng này; dirname lấy đường dẫn (đường dẫn đầy đủ) đến thư mục chứa tệp đó.

Với điều đó, bạn không bao giờ phải lo lắng về đường dẫn tương đối của tệp của mình.

+0

+1 cho đường dẫn tuyệt đối –

+0

Đường dẫn abs có làm chậm bạn xuống không? Giả sử bạn không chỉ giữ liên kết của mình thẳng, mà còn trong luồng chương trình. – Smandoli

0

Một câu trả lời khác sẽ tương tự như kết hợp hai đề xuất đầu tiên. Bạn có thể xác định hằng số:

define('ABSPATH', dirname(__FILE__).'/'); 

Sau đó, giả định rằng config.php cần phải được bao gồm trong nhiều tác phẩm của trang web thì bạn có thể sử dụng câu lệnh sau để thực hiện điều này:

include(ABSPATH.'config.php'); 

Hope this helps.

0

Một tùy chọn khác mà tôi đã sử dụng cho functions.php trong quá khứ là trình nạp tự động lớp.

//Class Autoloader 
spl_autoload_register(function ($className) { 

    $className = strtolower($className); 
    $path = "includes/{$className}.php"; 

    if (file_exists($path)) { 

     require_once($path); 

    } else { 

     die("The file {$className}.php could not be found."); 

    } 
}); 

Điều này hoạt động trong những trường hợp nhất định và hữu ích với tôi trong quá khứ khi tôi không muốn xác định url gốc tuyệt đối.

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