2009-06-26 34 views
30

Đây phải là một câu hỏi đơn giản, nhưng tôi không thể nhớ lại API có liên quan. Tìm kiếm trên google có cụm từ "combine directory name php" không mang lại bất kỳ kết quả nào. Vì vậy, tôi đoán tôi đang làm cả bản thân mình và cộng đồng lập trình một dịch vụ bằng cách đặt câu hỏi này.Kết hợp thư mục và tên tệp trong PHP (tương đương với Path.Combine trong .Net)

Làm cách nào để kết hợp tên thư mục và tệp để tạo đường dẫn tệp đầy đủ trong PHP? Giả sử tên thư mục là "D:\setup program" và tên tệp là "mj.txt". Phương thức này sẽ trả lại cho tôi, trên Windows "D:\setup program\mj.txt". Tất nhiên, phương thức này sẽ trả lại đường dẫn tệp chính xác trong Linux hoặc hệ điều hành khác.

Chức năng liên quan trong .Net là Path.Combine, nhưng trong PHP, tôi không thể nhớ lại, mặc dù trước đây tôi phải xem nó.

Trả lời

33
$filepath = $path . DIRECTORY_SEPARATOR . $file; 

Mặc dù trong các phiên bản PHP mới hơn, dù bạn có sử dụng dấu gạch chéo đều không sao.

Bạn có thể nhận đường dẫn tuyệt đối chính xác bằng cách sử dụng realpath(), thao tác này cũng sẽ xóa những thứ như dấu gạch chéo không cần thiết bổ sung và giải quyết các tham chiếu như ../. Nó sẽ trả về false nếu đường dẫn không hợp lệ.

+0

Tôi không nghĩ rằng PHP chấp nhận dấu gạch chéo trên windows có liên quan đến PHP. Bạn có thể nhập dấu gạch chéo về phía trước trong các phiên bản Windows mới hơn trong trình bao/trình khám phá. – soulmerge

+1

Hãy coi chừng điều đó ''. DIRECTORY_SEPARATOR. 'foo.txt' sẽ chuyển đổi đường dẫn tương đối thành đường dẫn tuyệt đối. – Dwayne

+1

Điều gì sẽ xảy ra nếu $ file đã là đường dẫn tuyệt đối? Path.Combine giao dịch với điều này, nhưng chuỗi nối đơn giản sẽ không. – yoyo

0

Bạn chỉ có thể nối nó với hằng số php DIRECTORY_SEPARATOR hoặc chỉ sử dụng dấu gạch chéo về phía trước. Cửa sổ có thể sẽ không nhớ = D

+3

Điều đó có thể không hoạt động nếu $ folderPath kết thúc bằng '/' - do đó đường dẫn được tạo sẽ là "/ var/somepath // fileName". – Dai

8

Tôi nghĩ rằng cách sạch sẽ và linh hoạt nhất để làm điều đó sẽ được sử dụng chức năng cộng với hằng số DIRECTORY_SEPARATOR tham gia:

$fullPath = join(DIRECTORY_SEPARATOR, array($directoryPath, $fileName)); 
Các vấn đề liên quan