Làm thế nào để lấy thư mục công khai?


81

Tôi là người mới bắt đầu ở đây nên thứ lỗi cho tôi vì câu hỏi này tôi đang sử dụng return File::put($path , $data);để tạo tệp trong thư mục công khai trên Laravel. Tôi đã sử dụng đoạn mã này từ bộ điều khiển, tôi cần biết giá trị của $pathnó như thế nào.


bạn đang sử dụng Laravel 3 hay Laravel 4?
Laurence

Câu trả lời:


206

Sử dụng public_path()

Để tham khảo:

// Path to the project's root folder    
echo base_path();

// Path to the 'app' folder    
echo app_path();        

// Path to the 'public' folder    
echo public_path();

// Path to the 'storage' folder    
echo storage_path();

// Path to the 'storage/app' folder    
echo storage_path('app');

5
Chỉ cần nói thêm rằng điều đó public_path()thực sự khá vô dụng - nó chỉ giả sử tất cả các tệp công khai của bạn đều nằm trong một thư mục được gọi là "công khai" - ngay cả khi chúng không phải vậy. Ví dụ: tôi luôn phải thay đổi thư mục "public" mặc định thành "public_html" (phù hợp với máy chủ của tôi). Laravel không nhận ra điều này. Vì vậy, đừng dựa vào điều này để đưa ra bất kỳ xác định thông minh nào về danh bạ công cộng của bạn thực sự là gì. Tôi chỉ đang sử dụng $_SERVER['DOCUMENT_ROOT'];trừ khi ai đó có thể gợi ý lý do tại sao tôi không nên?
Inigo

9
@inigo nó không phải là vô dụng, bạn chỉ đang không sử dụng nó như dự định. Nếu bạn muốn thay đổi thư mục công khai, bạn cần nói với Laravel về điều đó: stackoverflow.com/questions/31758901/…
Justin

18

Bạn có thể sử dụng base_path () để lấy cơ sở ứng dụng của mình - và sau đó chỉ cần thêm thư mục chung của bạn vào đó:

$path = base_path().'/public';
return File::put($path , $data)

Lưu ý: Hãy rất cẩn thận về việc cho phép mọi người tải lên tập tin vào thư mục gốc của bạn trong public_html. Nếu họ tải lên tệp index.php của riêng mình, họ sẽ tiếp quản trang web của bạn.


1
được base_path quy định tại laravel .. i sử dụng nó tôi đã nhận lỗi này Call to undefined function base_path ()
Yasser Moussa

Có - nó được định nghĩa trong helpers.php. Tôi đã thử nghiệm trên ứng dụng L4 của mình - nó hoạt động. Đảm bảo rằng bạn đang chạy bản dựng L4 mới nhất - nó có thể không có trong các phiên bản trước đó.
Laurence

11

Tôi biết điều này là hơi muộn, nhưng nếu ai đó nhìn thấy điều này, bây giờ bạn có thể sử dụng public_path (); trong Laravel 4, nó đã được thêm vào tệp helper.php trong thư mục hỗ trợ xem tại đây .


6

Cách tốt nhất để truy xuất đường dẫn thư mục công cộng của bạn từ cấu hình Laravel của bạn là hàm:

$myPublicFolder = public_path();
$savePath = $mypublicPath."enter_path_to_save";
$path = $savePath."filename.ext";
return File::put($path , $data);

Không cần phải có tất cả các biến, nhưng điều này chỉ nhằm mục đích minh họa.

Hy vọng điều này sẽ hữu ích, GRnGC

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.