2011-12-29 52 views
70

Tôi có cấu trúc thư mục này trong dự án PHP của mình. (điều này được thể hiện trong ECLIPS)Nhận đường dẫn thư mục gốc của dự án PHP

-MySystem 
    +Code 
    +Data_Access 
    -Public_HTML 
     +css 
     +js 
     +Templates 
    -resources 

Khi tôi cố gắng mã này

echo $_SERVER['DOCUMENT_ROOT'] 

ra là

D:/workspace

Làm thế nào tôi có thể nhận được đường dẫn đến RootDirectory của hệ thống (MySystem), không có h ardcoding Tên thư mục?

Trả lời

106

Đối PHP> = 5.3.0 thử

PHP magic constants.

__DIR__ 

Và làm cho con đường của bạn tương đối.

Đối PHP < 5.3.0 thử

dirname(__FILE__) 
+3

điều này thật tuyệt vời, tôi đã thử $ _SERVER ['DOCUMENT_ROOT'], dirname(), $ _SERVER ['SCRIPT_NAME'] v.v. nhưng điều này làm việc xuất sắc! – webblover

+29

Nó phụ thuộc vào nơi bạn sử dụng '__DIR__'. Nó liên quan đến chính tệp đó, vì vậy nếu trong một bao gồm, bên trong một thư mục con, nó sẽ không chỉ trả lại thư mục gốc của bạn. – Iris

+0

Nó sẽ không cung cấp thư mục gốc – inrsaurabh

3

bạn có thể thử: $ _SERVER [ 'PATH_TRANSLATED']

quote:

Filesystem- (không ghi lại root-) có trụ sở đường dẫn đến kịch bản hiện nay, sau khi máy chủ đã thực hiện bất kỳ ánh xạ ảo tới thực nào. Lưu ý: Kể từ PHP 4.3.2, PATH_TRANSLATED không còn được đặt ngầm bên dưới Apache 2 SAPI ngược lại với tình huống trong Apache 1, nơi nó được đặt thành giá trị tương tự như biến máy chủ SCRIPT_FILENAME khi nó không phải là được điền bởi Apache . Thay đổi này được thực hiện để tuân thủ đặc điểm kỹ thuật CGI mà PATH_TRANSLATED chỉ nên tồn tại nếu PATH_INFO được định nghĩa là . Người dùng Apache 2 có thể sử dụng AcceptPathInfo = On bên trong httpd.conf để xác định PATH_INFO.

nguồn: php.net/manual

41

Khi bạn nói rằng

$_SERVER['DOCUMENT_ROOT'] 

chứa đường dẫn này:

D:/workspace 

Sau đó D: là những gì bạn đang tìm kiếm phải không? Trong trường hợp đó bạn có thể phát nổ chuỗi bằng dấu gạch chéo và trả lại người đầu tiên:

$pathInPieces = explode('/', $_SERVER['DOCUMENT_ROOT']); 
echo $pathInPieces[0]; 

chí đầu ra này thư mục gốc của máy chủ.

Cập nhật: Khi bạn sử dụng hằng số DIRECTORY_SEPARATOR thay vì dấu gạch chéo cứng ('/') mã này cũng hoạt động trong Windows.

Cập nhật 2: Biến toàn cầu không phải lúc nào cũng khả dụng. Trên dòng lệnh (cli) chẳng hạn. Vì vậy, bạn nên sử dụng __DIR__ thay vì $_SERVER['DOCUMENT_ROOT']. __DIR__ trả về đường dẫn của tệp php.

+2

Và bạn có thể sử dụng '__DIR__' thay vì' $ _SERVER ['DOCUMENT_ROOT'] '. – Armin

+0

Xin lỗi Nếu tôi không giải thích câu hỏi của tôi đúng, Điều tôi thực sự cần là 'D:/workspace/MySystem' – Nalaka526

+0

nếu đường dẫn thư mục gốc của bạn ở dạng/var/public/www ", sau đó sử dụng phương thức này chuỗi đầu tiên trong mảng sẽ trống (0)/(1)/(2)/(3). gốc sẽ là chuỗi thứ hai $ pathInPieces [1] – tbradley22

22

sử dụng chức năng PHP:

getcwd()

Gets thư mục làm việc hiện hành.

1
echo $pathInPieces = explode(DIRECTORY_SEPARATOR , __FILE__); 
echo $pathInPieces[0].DIRECTORY_SEPARATOR; 
4

Tôi muốn để trỏ đến cách Wordpress xử lý này:

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

Như Wordpress là rất nặng được sử dụng trên tất cả các trang web và cũng hoạt động tốt tại địa phương tôi có nhiều tin tưởng vào phương pháp này.

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