¿Cómo obtener el directorio público?

81

Soy un principiante aquí, así que perdóname por esta pregunta que estoy usando return File::put($path , $data);para crear un archivo en una carpeta pública en Laravel. Usé este fragmento de código del controlador, necesito saber el valor de $pathcómo debería ser.

Yasser Moussa
fuente
¿Estás usando Laravel 3 o Laravel 4?
Laurence

Respuestas:

206

Utilizar public_path()

Para referencia:

// 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
fuente
5
Solo para agregar que en public_path()realidad es bastante inútil, solo asume que todos sus archivos públicos están en un directorio llamado "público", incluso si no lo están. Por ejemplo, siempre tengo que cambiar el directorio "público" predeterminado a "public_html" (en línea con mi servidor). Laravel no reconoce esto. Así que no confíe en esto para hacer una determinación inteligente de cuál es realmente su directorio público. Solo estoy usando a $_SERVER['DOCUMENT_ROOT'];menos que alguien pueda sugerir por qué no debería hacerlo.
Iñigo
9
@inigo no es inútil, simplemente no lo estás usando como estaba previsto. Si desea cambiar el directorio de público, debe informar a Laravel al respecto: stackoverflow.com/questions/31758901/…
Justin
17

Puede usar base_path () para obtener la base de su aplicación, y luego simplemente agregar su carpeta pública a eso:

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

Nota: Tenga mucho cuidado al permitir que las personas carguen archivos en su raíz de public_html. Si suben su propio archivo index.php, se harán cargo de su sitio.

Laurence
fuente
1
es base_path definido en laravel ... lo usé, obtuve este error Llamada a la función indefinida base_path ()
Yasser Moussa
Sí, está definido en helpers.php. Probé en mi aplicación L4, funciona. Asegúrese de estar ejecutando la última compilación L4; es posible que no haya estado en las versiones anteriores.
Laurence
11

Sé que es un poco tarde, pero si alguien más se encuentra con este aspecto, ahora puede usar public_path (); en Laravel 4, se ha agregado al archivo helper.php en la carpeta de soporte, ver aquí .

Brent
fuente
6

La mejor manera de recuperar la ruta de su carpeta pública desde su configuración de Laravel es la función:

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

No es necesario tener todas las variables, pero esto es solo para fines demostrativos.

Espero que esto ayude, GRnGC

GCT
fuente