2012-06-22 26 views
22

Tôi đã thực hiện khá nhiều tìm kiếm điều này, vì vậy tôi xin lỗi nếu đây là một bản dupe.
Dù sao, tôi cần lấy tên của thư mục tệp hiện tại. Ví dụ: tôi muốn chuyển đổi một cái gì đó như example.com/folder/subfolder/file.php thành subfolder.
Mã hiện tại của tôi là dirname($_SERVER['PHP_SELF']), nhưng trả về /folder/subfolder thay vì subfolder. Cảm ơn bạn!Nhận thư mục mẹ của tệp hiện tại PHP

Trả lời

47

Cách đơn giản nhất là:

basename(__DIR__); 

http://php.net/manual/en/language.constants.predefined.php

+2

Điều này có nên được đánh dấu là câu trả lời đúng không? '$ _SERVER ['PHP_SELF']' có thể trả về tệp có chứa "tệp hiện tại". "Tệp hiện tại" là __DIR__ phải không? Hoặc tôi có thiếu gì đó không? – taylorcressy

+0

@taylorcressy có vẻ như câu trả lời ở trên đã được đưa ra trước đây ... chúng tôi cũng không thực sự sử dụng hằng số ma thuật –

+2

@MarcelDjaman Tôi hiểu tại sao câu trả lời khác lại được đánh dấu đúng. Tôi chỉ đơn giản là làm rõ rằng đây là câu trả lời đúng. Về mặt kỹ thuật, câu trả lời đầu tiên không chính xác trong mọi trường hợp (ví dụ: trong một tệp đính kèm) – taylorcressy

-5

Chỉ cần sử dụng .. đó là một người truy cập tương đối có nghĩa là thư mục mẹ.

+0

Tôi biết điều đó, nhưng tôi muốn lấy tên của thư mục, không truy cập thư mục. – Andrey

+2

Ahah, làm theo ý muốn của bạn nhưng điều này rõ ràng sẽ làm tăng một lá cờ đỏ nếu tôi thuê bạn. Bạn có thể làm một thiết kế phù hợp mà không cần dựa vào toàn bộ hệ thống tập tin; chỉ sự kiên trì của nó. –

36

Bạn cần phải kết hợp mã hiện tại của bạn sử dụng dirname() với một cuộc gọi đến basename():

$parent = basename(dirname($_SERVER['PHP_SELF'])); 
4

dirname() sử dụng với basename() sẽ làm việc ... cũng này nếu bạn muốn để có được chúng tất cả:

$folders = explode ('/', $_SERVER['PHP_SELF']); 

Bây giờ $ thư mục sẽ chứa một mảng của tất cả các tên thư mục.

Chúc mừng.

+1

Nếu thực hiện điều này, bạn nên cẩn thận với phần tử rỗng tại chỉ mục 0, kết quả là đường dẫn bắt đầu bằng '/' – DaveRandom

+0

Điểm tốt - cảm ơn vì đã thêm suy nghĩ đó. –

+0

@DaveRandom Một lý do khác để thực hiện các kiểm tra trước khi đưa mã vào hoạt động! :) Nhưng yeah nếu đó là một người gây phiền nhiễu tôi đoán cách khác chỉ có thể sử dụng regex. – kiradotee

2
$folder = basename(dirname(__FILE__)); 
0
str_replace('/','',$_SERVER[REQUEST_URI]); 

Kết quả:
lib/hình ảnh /index.php

hình ảnh

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