【问题标题】:proper use of mkdir()正确使用 mkdir()
【发布时间】:2012-12-08 17:35:48
【问题描述】:

我有一个目录路径“/uploads/files”。当用户注册时,我试图将他们的 user_id 附加到路径的末尾以使其成为“uploads/files/user_id”,以便每个用户都有自己的上传文件夹要上传到。我正在使用 Laravel,我当前的代码看起来像这样......

mkdir("uploads/files/" . Auth::user()->id);

这是创建新文件夹的正确方法吗?我一直在玩各种不同的方法,但似乎没有任何工作。

【问题讨论】:

  • 当您尝试上述代码时会发生什么?如果您遇到某种类型的错误,请在此处提及。
  • 试图获取非对象错误的属性,与代码相同。
  • 首先尝试回显 Auth::user()->id,你提到的错误类型,我猜问题出在它上面。这只是一个建议。
  • 试试var_dump(Auth::user());exit;,这应该会给你一些想法......也许它会返回arraynull

标签: php mkdir laravel


【解决方案1】:

如果您不希望您的目录易于访问和猜测,您可以对您的 user_id 进行哈希处理,然后附加到它。作为一个简单的案例,这很好。但从安全角度来看,这可能是一种威胁。

只需使用md5()sha1() 以及作为salt 的随机复杂字符串,以确保您的目录安全且不会被猜到。

还有一件事是把它放在 if 条件中以检查文件夹是否已经创建。

$path = 'path_to_your_directory';
if(!file_exists($path)
{
     //then create the directory
}
else
{
    //do the upload here
}

编辑:如果您使用Auth::user()->id,用户必须登录到该站点。即会话必须存在。否则它不会工作。猜你知道。

【讨论】:

  • 仍然可以列出目录并破解匹配项。
  • @coryjacik,不要散列它。更好地保护您的服务器。
  • 您可以随时使用 htaccess 或简单的空白 index.html 来停止列出目录。在 .htaccess 中它会像 Options -Indexes 一样简单,不是吗?
  • .htaccess 不是首选方式,因为它是运行时的,谁说他的上传在文档根目录下?
  • 谢谢大家,这仍然是本地的..还没有开始考虑安全性,但你提出了一些好的观点。 Laravel 似乎内置了一些非常可靠的安全性,开箱即用
【解决方案2】:

mkdir 是要走的路。但是您需要记住,必须正确设置 linux 权限才能使其正常工作。确保你有写作权。您可以通过is_writable($dirPath) 查询。将权限设置为 755 或您认为最适合您的应用程序的任何内容。

您也可以使用下面的 linux 语法...对于更复杂的操作很方便。

 $path = '/uploads/files/user_id_dir';
 shell_exec("mkdir -p $path");

【讨论】:

  • 似乎无法让 linux 语法正常工作,但起作用的是 $path = 'uploads/files/' 。身份验证::user()->id; mkdir($path, 0700);
猜你喜欢
  • 2014-11-10
  • 2012-08-16
  • 2014-02-10
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
相关资源
最近更新 更多