Jak zdobyć katalog publiczny?

90

Jestem tu początkującym, więc wybacz mi za to pytanie, którego używam return File::put($path , $data);do tworzenia pliku w folderze publicznym na Laravel. Użyłem tego fragmentu kodu z kontrolera, muszę znać wartość, $pathjak powinno być.

Yasser Moussa
źródło
czy używasz Laravel 3 czy Laravel 4?
Laurence,

Odpowiedzi:

217

Posługiwać się public_path()

Na przykład:

// 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');
Justin
źródło
5
Dodam, że public_path()jest to całkiem bezużyteczne - zakłada po prostu, że wszystkie twoje pliki publiczne znajdują się w katalogu o nazwie „public” - nawet jeśli nie są. Na przykład, zawsze muszę zmieniać domyślny katalog „public” na „public_html” (zgodnie z moim serwerem). Laravel tego nie rozpoznaje. Więc nie polegaj na tym, aby w inteligentny sposób określić, jaki jest twój katalog publiczny. Po prostu używam, $_SERVER['DOCUMENT_ROOT'];chyba że ktoś może zasugerować, dlaczego nie powinienem?
Inigo
9
@inigo nie jest bezużyteczne, po prostu nie używasz go zgodnie z przeznaczeniem. Jeśli chcesz zmienić katalog publiczny, musisz powiedzieć o tym Laravelowi: stackoverflow.com/questions/31758901/ ...
Justin
18

Możesz użyć base_path (), aby uzyskać podstawę swojej aplikacji - a następnie po prostu dodaj do tego swój folder publiczny:

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

Uwaga: bądź bardzo ostrożny, pozwalając ludziom przesyłać pliki do Twojego katalogu głównego public_html. Jeśli prześlą własny plik index.php, przejmą kontrolę nad Twoją witryną.

Laurence
źródło
1
jest base_path zdefiniowana w laravel .. Użyłem go Otrzymałem ten błąd Wywołanie niezdefiniowanej funkcji base_path ()
Yasser Moussa
Tak - jest to zdefiniowane w helpers.php. Testowałem na mojej aplikacji L4 - działa. Upewnij się, że korzystasz z najnowszej kompilacji L4 - mogła nie mieć jej we wcześniejszych wersjach.
Laurence,
11

Wiem, że jest trochę za późno, ale jeśli ktoś inny natrafi na ten wygląd, możesz teraz użyć public_path (); w Laravel 4 został dodany do pliku helper.php w folderze wsparcia patrz tutaj .

Brent
źródło
6

Najlepszym sposobem na odzyskanie ścieżki do folderu publicznego z konfiguracji Laravel jest funkcja:

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

Nie ma potrzeby posiadania wszystkich zmiennych, ale służy to tylko celom demonstracyjnym.

Mam nadzieję, że to pomoże, GRnGC

GCT
źródło