2009-12-11 38 views
5

Cấu trúc cho các dự án hiện tại tôi đang làm việc trên là một cái gì đó như:PHP bao gồm bên trong một bao gồm (thư mục khác nhau)

  • root/index.php
  • root/includes/php/first.php
  • root/includes/php/functions.php

Vì vậy index.php bao gồm first.php:

<?php include_once("includes/php/first.php"); ?> 

Thông thường sau đó first.php tôi sẽ gọi các chức năng như:

<?php include_once("includes/php/functions.php"); ?> 

Giả sử tương đối vẫn sẽ từ trang index tuy nhiên khi di chuyển đến một máy chủ mới nó đã không làm việc. Tôi đã thử tạo đường dẫn tương đối từ first.php:

include_once("functions.php"); 

Và điều này có vẻ hoạt động ngay bây giờ.

Cách nào thường là cách chính xác để thực hiện việc này? Tôi muốn triển khai dự án này để mọi người có thể cài đặt dự án này.

Trả lời

11

bao gồm có liên quan đến tệp đang thực hiện bao gồm. Nếu bạn thực sự muốn chắc chắn và tránh bất kỳ sự mơ hồ, bạn có thể làm điều này:

include dirname(__FILE__) . "/functions.php"; 
+0

Cảm ơn bạn! Không chắc chắn lý do tại sao nó hoạt động trước một cách khác nhưng giải pháp này sẽ giải quyết các vấn đề trong tương lai – kilrizzy

+0

+1 - Tôi sẽ đề nghị sử dụng phần tử '$ _SERVER ['SCRIPT_FILENAME']' để làm tương tự, nhưng điều này tốt hơn nhiều. – Atli

+2

Tôi có xu hướng tạo một vài lỗi cho ứng dụng PHP của tôi và lưu trữ root_path và web_path của tôi ở đó để sử dụng trong suốt – Andrew

0

tôi luôn luôn sử dụng:

include ($_SERVER['DOCUMENT_ROOT']."/include/php/functions.php"); 

Bằng cách này bạn luôn biết được nơi bạn đang (đến từ root) và mã của bạn có thể được sao chép từ nơi này sang nơi khác.

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