繁体   English   中英

mkdir(): 权限被拒绝 Laravel

[英]mkdir(): Permission denied Laravel

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

代码

$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(): Permission denied

在 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', '路径' => '/userdp/1/f12f298ab18d58a59c4ed8a589cd1cdc.jpg'))

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

尝试:

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

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

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

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

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

运行chmod -R 777可能不起作用,出于安全原因不应使用,这一直是一个警告。

=> 正如@bokino12 上面所述,这对你有用

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

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

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

这会将当前用户指定为目录的所有者。

错误:

  [ErrorException]            
  mkdir(): Permission denied 

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

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,所以我在创建项目时指定了版本。

请不要将模式更改为 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);
}

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

sudo chmod -R 755 public

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

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

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

问候

该命令的错误相同

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

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

sudo mkdir MyProject

sudo chmod -R 777 MyProject

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

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

chmod -R 777 

现在,虽然这将解决您的问题,但您绝对应该阅读设置上述权限时出现的问题,如以下评论中发布的此链接所示。 我也在这里发帖:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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