mkdir():许可Laravel

时间:2015-09-07 16:54:36

标签: php laravel

我正在运行以下脚本以在服务器中上传图像,并在localhost上完美运行时收到以下错误。

代码

$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);
}

错误

  

UploadController.php第605行中的ErrorException:mkdir():权限   拒绝

     

at HandleExceptions-> handleError('2','mkdir():Permission denied',   '/var/www/html/laravel/app/Http/Controllers/UploadController.php',   '605',数组('dp'=>对象(UploadedFile),'ext'=>'jpg','img'=>   object(图片),'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'))

我尝试了chmod 777 public并重新启动了服务器。但它没有用。

10 个答案:

答案 0 :(得分:3)

尝试:

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

答案 1 :(得分:2)

您正尝试将上传的文件移动到服务器根目录中的文件夹中。确保你获得正确的绝对路径。

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

答案 2 :(得分:1)

运行chmod -R 777可能无法正常工作,并且出于安全原因不应该使用它,这始终是警告。

=>如上面@ bokino12所述

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

=>如果由于某种原因它不起作用,可能是当前用户对该目录没有权限,请尝试

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

这会将当前用户分配为目录的所有者。

答案 3 :(得分:1)

错误:

  [ErrorException]            
  mkdir(): Permission denied 

如果您正在/WWW文件夹中创建Project,并且遇到上述错误,请尝试使用以下命令,它对我有用。

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

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

运行此命令后,尝试再次创建项目。

cd /var/www

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

因为我使用的是laravel 5.6,所以我在创建Project时已指定了版本。

答案 4 :(得分:0)

  

我尝试了chmod 777 public并重新启动了服务器。但它没有用。

请确保以递归方式使用CHMOD并使用管理员权限(如果可以)

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

此致

答案 5 :(得分:0)

我发现了一个非常有趣的解决方案。只需输入“。”像这样的例子。这个对我有用。

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

答案 6 :(得分:0)

请不要将模式更改为 777,因为这可能会导致一些严重的安全问题。而是尝试使用这些命令来更改文件夹的权限。

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

尝试上传 - 它会起作用 - 如果它失败尝试

$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);
}

答案 7 :(得分:0)

要解决这个问题,请进入您的 Laravel 项目,使您的公共目录可写。

const sendReport = () => {
  const spreadsheet = SpreadsheetApp.getActive();
  const activeSheet = spreadsheet.getActiveSheet();
  const sheets = spreadsheet.getSheets();
  
  //hide all sheets except the active sheet
  sheets.forEach(sh => {
    if (sh.getName() !== activeSheet.getName()) sh.hideSheet()
  })

  const message = {
    to: "maneeshsinghal9810@gmail.com",
    subject: "Monthly sales report",
    body: "Hi team,\n\nPlease find the monthly report attached.\n\nThank you,\nBob",
    name: "Bob",
    setName: "New",
    attachments: [spreadsheet.getAs(MimeType.PDF).setName('New Report')]
  }

  MailApp.sendEmail(message);

  //unhide all sheets
  sheets.forEach(s => s.showSheet());
}

答案 8 :(得分:-3)

命令

的错误相同
composer create-project --prefer-dist laravel/laravel MyProject

但它在以下命令之后起作用

sudo mkdir MyProject

sudo chmod -R 777 MyProject

或者更好地将composer create-project命令运行到某些不同于htdocs的路径

答案 9 :(得分:-6)

您必须递归执行chmod以确保所有子目录也具有相同的权限。请尝试运行此代码:

chmod -R 777 

现在虽然这会解决您的问题,但您应该仔细阅读设置上述权限时出现的问题,因为此链接在下面的评论中显示。不好发帖在这里:

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

编辑:这应该只在/var/www/html/laravel/storage内的Laravel存储目录中完成,并且永远不会在系统级别完成。我最初忘了提到这一点,因此都是所有的投票。