2008-08-23 9 views
18

tôi có thể thiết lập các PHP bao gồm đường dẫn trong php.ini:Đặt PHP Bao gồm Đường dẫn trên cơ sở từng trang web?

include_path = /path/to/site/includes/ 

Nhưng sau đó các trang web khác bị ảnh hưởng do đó là không tốt.

tôi có thể thiết lập các PHP bao gồm trong đầu mỗi file:

$path = '/path/to/site/includes/'; 
set_include_path(get_include_path() . PATH_SEPARATOR . $path); 

Nhưng điều đó có vẻ như thực tế xấu và clutters mọi thứ lên.

Vì vậy, tôi có thể làm cho một bao gồm điều đó và sau đó đưa nó vào mỗi file:

include 'includes/config.php'; 

hoặc

include '../includes/config.php'; 

Đây là những gì tôi đang làm ngay bây giờ, nhưng bao gồm đường dẫn của config.php sẽ thay đổi tùy thuộc vào nội dung bao gồm nó.

Có cách nào tốt hơn không? Nó có quan trọng không?

Trả lời

16

Nếu bạn đang sử dụng apache làm máy chủ web, bạn có thể ghi đè (nếu bạn cho phép) cài đặt bằng cách sử dụng .htaccess tệp. Xem the PHP manual để biết chi tiết.

Về cơ bản, bạn đặt một tệp có tên là .htaccess vào thư mục gốc trang web của bạn, chứa một số giá trị PHP ini. Với điều kiện bạn đã định cấu hình Apache để cho phép ghi đè, trang web này sẽ sử dụng tất cả các giá trị trong cấu hình PHP của bạn, + các giá trị bạn chỉ định trong tệp .htaccess.

Có thể sử dụng chỉ với PHP_INI_ALLPHP_INI_PERDIR loại chỉ thị

như đã nêu trong trang tôi liên kết. Nếu bạn nhấp qua danh sách đầy đủ, bạn sẽ thấy đường dẫn bao gồm là chỉ thị PHP_INI_ALL.

0

Bạn cũng có thể đặt include_path trong tệp php.ini của mình. Tôi là một anh chàng perl, vì vậy tôi mong đợi để có thể tải bao gồm và có include làm điều đúng. Tôi có tất cả nội dung của tôi trong một thư mục cụ thể, được thêm vào include_path. Tôi có thể làm những việc như

require_once "ClassName.php"; 

Tôi không cần phải lo lắng về đường dẫn tương đối hoặc vị trí tệp.

Tôi cũng đã viết riêng CustomRequire để làm những việc của tôi như

function CustomRequire ($file) { 
    if(defined('MYINCLUDEPATH')) { 
     require_once MYINCLUDEPATH . "/$file"; 
    } else { 
     require_once $file; 
    } 
} 

Bằng cách đó tôi có thể thay đổi như thế nào tôi có vào một ngày sau đó. Tất nhiên, bạn vẫn cần phải tìm cách để bao gồm mã bao gồm của bạn :)

+0

Tại sao mọi người giải tán câu trả lời của Gary? Một thực tế tồi tệ ở đây tại SO theo ý kiến ​​của tôi - downvoting ý kiến ​​trong số những người "trí tuệ vô hạn" * mà không * giải thích nó trong phần ý kiến. – amn

+0

Meh. Đó là PHP cho bạn. Tôi vẫn đang sử dụng hệ thống này và nó hoạt động tốt với hiệu năng APC khôn ngoan. Nếu bạn có thể, hãy sử dụng bộ nạp tự động. Vấn đề với một bộ nạp tự động là bạn phải bastardize tên lớp của bạn nếu bạn muốn có bất kỳ loại cấu trúc để bố trí lớp học của bạn trên hệ thống tập tin (ví dụ http://www.php.net/manual/en/language. oop5.autoload.php # 49496). Tôi rất muốn nghe các lựa chọn tốt hơn! –

+0

Gary, tôi chỉ đơn thuần chỉ ra cách mọi người có xu hướng downvote công cụ mà không bình luận về nó. Theo như tôi lo ngại câu trả lời của bạn là hợp pháp. – amn

1

Tùy thuộc vào cách máy chủ của bạn được thiết lập, bạn có thể được phép đặt một tệp php.ini trong thư mục gốc của bạn với chỉ thị cấu hình bổ sung .

7

Erik Van Brakel đưa ra, IMHO, một trong những câu trả lời hay nhất.

Thêm, nếu bạn đang sử dụng Apache & Máy chủ ảo, bạn có thể thiết lập bao gồm trực tiếp trong đó. Sử dụng phương pháp này, bạn sẽ không phải nhớ để lại lệnh php_admin trong .htaccess của bạn.

4

Sử dụng tệp php.ini trong thư mục gốc của trang web nếu thiết lập của bạn sử dụng PHP là CGI (trường hợp thường xuyên nhất trên máy chủ dùng chung) với cú pháp giống như php.ini trên toàn máy chủ; đặt nó vào .htaccess nếu bạn có PHP như là một module Apache (làm một phpinfo() nếu không chắc chắn):

php_value include_path "bất cứ nơi nào"

Lưu ý rằng mỗi thư mục php.ini không ảnh hưởng đến các thư mục con.

+0

'php_value include_path" /var/www/somesite.com/include_path/ "' – velcrow

1

Ứng dụng của bạn phải có tệp cấu hình được viết bằng PHP. Sau đó, bao gồm điều đó với một trang tương đối vào mọi trang trong chương trình. Tệp cấu hình đó sẽ có biến cho đường dẫn đến thư mục bao gồm, thư mục mẫu, hình ảnh dir, v.v.

3

Tại sao bạn cho rằng thêm đường dẫn là hành vi xấu?

Mã này gần trên cùng của kịch bản gốc không nên là xấu ...

$path = '/path/to/site/includes/'; 
set_include_path($path . PATH_SEPARATOR . get_include_path()); 

IMHO lợi thế chính là nó di động và tương thích không chỉ với Apache

EDIT: Tôi thấy một nhược điểm của phương pháp này: tác động hiệu suất nhỏ. xem http://www.geeksengine.com/article/php-include-path.html

+0

Ngoài tác động hiệu suất bạn đề cập, khi tôi hỏi câu hỏi này tôi đã làm việc trên một trang web có nhiều tệp riêng biệt và không phải là một tập lệnh gốc duy nhất yêu cầu được chuyển đến. – Annan