【问题标题】:mkdir permission denied on bluehost serverbluehost 服务器上的 mkdir 权限被拒绝
【发布时间】:2015-02-17 20:17:39
【问题描述】:

我有以下脚本来上传文件。除了 BlueHost 新配置的 VPS 之外,我已经能够成功运行它。代码如下:

// Creating image upload path
$destinationPath = public_path() . sprintf("/uploads/data/users/%d/", Auth::user()->getId());
$realPath = sprintf("uploads/data/users/%d/", Auth::user()->getId());

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

$fileName = str_random(16);
$fileName = str_replace('/', 'y', $fileName);
$image_url = $realPath . '/' . $fileName . '.' . $ext;

if ($file->move($destinationPath, $fileName . '.' . $ext)) {
    $p->display_pic = $image_url;
}

这是我不断收到的错误:

mkdir(): Permission denied 

父文件夹的文件夹权限设置为 755。为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 我不熟悉 BlueHost,但是您是否检查过您的服务器(我猜是 Apache 或 Nginx)是该目录的所有者?如果没有,755 将阻止服务器向该目录写入任何内容。
  • 我的猜测是/uploads/data/users/这个链中的其中一个文件夹还不存在,另外你不需要设置为0777脚本应该在suexec下执行
  • 请我对linux一无所知,请给我一些演示。
  • @Joel Hinz 我已经按照您的要求进行了检查,我的服务器确实是该目录的所有者。
  • @cmorrisey 文件夹“users”不存在,这就是 mkdir() 的全部意义,条件应该检查​​它是否存在,如果不存在,它应该在服务器上创建指定的文件夹权限,还是那样不行?

标签: php laravel file-upload vps bluehost


【解决方案1】:

当您购买域名时,通常会将其指向您服务器上的文件夹。

按照我在网上找到的关于如何安全地将我的 laravel 项目指向我的域名的说明,而无需先通过公用文件夹,例如:

yahoo.com/home 而不是 yahoo.com/public_html/home

我移动并重命名了我的域最初指向的文件夹,您会注意到我的代码:

$destinationPath = public_path() . sprintf("/uploads/data/users/%d/", Auth::user()->getId());

现在这通常意味着它会检查并创建指定的文件夹,如果在我的域指向的文件夹的根目录中不存在。

现在,由于我的域不再指向该文件夹,我假设它试图在我的服务器的“主”目录中创建该文件夹,因此“权限被拒绝”

取出前面的正斜杠后,它现在可以工作了。 :) 如果您想知道我在那里的“public_path()”函数,我尝试将它回显到页面上,结果它是空的,因为我不知道为什么其他人可以解释。

【讨论】:

    猜你喜欢
    • 2011-06-25
    • 2016-08-24
    • 2013-07-01
    • 2012-08-13
    • 1970-01-01
    • 2023-03-22
    • 2018-03-19
    相关资源
    最近更新 更多