This is my code:
.env file:
UPLOAD_PATH=".var/uploads/docs"
MyController.php
$destination = getenv('UPLOAD_PATH');
/** @var UploadedFile $uploadedFile */
$uploadedFile = $form['file']->getData();
dump($uploadedFile->move($destination, $uploadedFile->getClientOriginalName()));
The dump output:
pathname: "./var/uploads/docs/test.txt"
realPath: "/var/www/html/public/var/uploads/docs/test.txt"
Actually my intention is to save it in var folder but it always ends up in public/var... every path I enter no matter how and what end up in public folder.
However when I try this it works fine:
$destination = $this->getParameter('kernel.project_dir').'/var/uploads/docs';
I want to use the first way with getenv and .env, is there any way to make it work and upload files to desired folder?
My Answer:
/uploads
Controller file:
php
$uploadPath = getenv('UPLOAD_PATH');
$targetPath = $_SERVER['DOCUMENT_ROOT'] . '/public' . $uploadPath;
// Rest of the file upload logic here
When using `getenv('UPLOAD_PATH')`, the path always begins with the `/public` folder because `getenv()` retrieves the value of an environment variable, which in this case is the `UPLOAD_PATH` variable set in the `.env` file.
To avoid this, you can modify the `UPLOAD_PATH` variable in the `.env` file to remove the `/public` prefix:
UPLOAD_PATH=/uploads
Then, in your controller file, you can concatenate the `UPLOAD_PATH` directly without adding the `/public` prefix:
php
$uploadPath = getenv('UPLOAD_PATH');
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $uploadPath;
// Rest of the file upload logic here
Rate this post
4 of 5 based on 9430 votesComments