简体   繁体   中英

mkdir(): Permission denied Laravel

I'm running the following script for an image upload in a server and getting the following error while it works perfectly on the localhost.

Code

$user_id = Auth::id();
$logicpath = 'userdp/' . $user_id . '/';
$pubpath = 'userdp/' . $user_id . '/' . $dpFile;
$path = '/userdp/' . $user_id . '/' . $dpFile;

if (!file_exists($logicpath)) {
     mkdir($logicpath, 0777, true);
}

Error

ErrorException in UploadController.php line 605: mkdir(): Permission denied

at HandleExceptions->handleError('2', 'mkdir(): Permission denied', '/var/www/html/laravel/app/Http/Controllers/UploadController.php', '605', array('dp' => object(UploadedFile), 'ext' => 'jpg', 'img' => object(Image), 'mime' => 'image/jpeg', 'width' => '200', 'height' => '200', 'fileSize' => '17152', 'dpFile' => 'f12f298ab18d58a59c4ed8a589cd1cdc.jpg', 'user_id' => '1', 'logicpath' => 'userdp/1/', 'pubpath' => 'userdp/1/f12f298ab18d58a59c4ed8a589cd1cdc.jpg', 'path' => '/userdp/1/f12f298ab18d58a59c4ed8a589cd1cdc.jpg'))

I tried chmod 777 public and restarted the server. But it didn't work.

尝试:

sudo chown -R www-data:www-data /var/www/yoursite/public

I have found a very interesting solution to this problem. Just put "." sign like this example. It works for me.

$destinationPath = "./public/uploads"; // upload path
    if (!file_exists($destinationPath)) {
      mkdir($destinationPath, 0755, true);
    }
    $request->sub_category_attr_value->move($destinationPath, $picName);

You are trying to move the uploaded file a folder in the root of your server. Make sure you get the absolute path right.

$logicpath = public_path() . '/userdp/' . $user_id . '/';

Running chmod -R 777 may not work and should never be used for security reasons, this has always been a warning.

=> This will work of for you as stated above by @bokino12

sudo chown -R www-data:www-data /var/www/yoursite/public

=> if for some reason it doesn't work, that could be that the present user doesn't have permission over the directory, try

sudo chown -R $USER:$USER /var/www/yoursite/public

This will assign the current user as the owner of the directory.

ERROR:

  [ErrorException]            
  mkdir(): Permission denied 

If you are creating Project in /WWW folder and if you are encountering the above error, then try using following commands, It worked for me.

sudo chown -R www-data:www-data /var/www

sudo chown -R $USER:$USER /var/www

After Running this, Try Creating Project again.

cd /var/www

composer create-project laravel/laravel projectname "5.6.*"

since i'm using laravel 5.6 i have specified version while creating Project.

Please dont change mode to 777 as it may cause your some serious security issues. Rather try using these commands for changing permission of the folder.

sudo chown -R www-data:www-data /var/www
sudo chown -R $USER:$USER /var/www
chmod -R 755 </userdp> Your upload folder path

Try uploading - It will work - In case it fails try

$user_id = Auth::id();
$logicpath = '/userdp/' . $user_id . '/';
$pubpath = 'userdp/' . $user_id . '/' . $dpFile;
$path = '/userdp/' . $user_id . '/' . $dpFile;

if (!file_exists($logicpath)) {
     mkdir($logicpath, 0755, true);
}

为了解决这个问题,进入你的 Laravel 项目,让你的公共目录可写。

sudo chmod -R 755 public

I tried chmod 777 public and restarted the server. But it didn't work.

Be sure you use the CHMOD recursively and with administrator permissions (if you can)

SUDO CHMOD -R 777 /var/www/html/laravel/

Regards

Same error for the command

composer create-project --prefer-dist laravel/laravel MyProject

But it worked after the following commands

sudo mkdir MyProject

sudo chmod -R 777 MyProject

Or better run composer create-project command to some different path than htdocs

You have to perform chmod recursively to make sure all subdirectories also carry the same permissions. Try running this instead:

chmod -R 777 

Now while this will fix your issue, you should definitely read up on the problems that arise with setting the above permissions as this link posted in comments below shows. Ill post here as well:

http://stackoverflow.com/a/11271632/2790481

EDIT: This should only be done within the Laravel storage dir within /var/www/html/laravel/storage , for example and never be done at the system level. I forgot to mention that originally, hence all the downvotes.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM