Php 正确使用mkdir()
我有一个目录路径“/uploads/files”。当用户注册时,我试图将其用户id附加到路径的末尾,使其成为“uploads/files/user_id”,以便每个用户都有自己的上载文件夹要上载。我正在使用Laravel,我当前的代码如下所示Php 正确使用mkdir(),php,mkdir,laravel,Php,Mkdir,Laravel,我有一个目录路径“/uploads/files”。当用户注册时,我试图将其用户id附加到路径的末尾,使其成为“uploads/files/user_id”,以便每个用户都有自己的上载文件夹要上载。我正在使用Laravel,我当前的代码如下所示 mkdir("uploads/files/" . Auth::user()->id); 这是创建新文件夹的正确方法吗?我一直在用各种不同的方法来处理它,但似乎什么都没用。mkdir就是这样。但是,您需要记住,必须正确设置linux权限才能使其正常工
mkdir("uploads/files/" . Auth::user()->id);
这是创建新文件夹的正确方法吗?我一直在用各种不同的方法来处理它,但似乎什么都没用。
mkdir
就是这样。但是,您需要记住,必须正确设置linux权限才能使其正常工作。确保你有写作权。您可以使用检查是否可写($dirPath)
。将权限设置为755
或任何您认为最适合您的应用程序的权限
您也可以使用linux语法,如下所示。。。它对于更复杂的操作非常方便
$path = '/uploads/files/user_id_dir';
shell_exec("mkdir -p $path");
mkdir
是一条路要走。但是,您需要记住,必须正确设置linux权限才能使其正常工作。确保你有写作权。您可以使用检查是否可写($dirPath)
。将权限设置为755
或任何您认为最适合您的应用程序的权限
您也可以使用linux语法,如下所示。。。它对于更复杂的操作非常方便
$path = '/uploads/files/user_id_dir';
shell_exec("mkdir -p $path");
如果你不希望你的目录易于访问和猜测,你可以对你的用户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
,则用户必须登录到该站点。i、 e.会话必须存在。否则就不行了。我想你知道。如果你不想让你的目录易于访问和猜测,你可以对你的用户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
,则用户必须登录到该站点。i、 e.会话必须存在。否则就不行了。我猜您知道。当您尝试上述代码时会发生什么?如果您遇到某种类型的错误,请在此处提及。尝试获取非对象错误的属性,与代码行相同。首先尝试回显Auth::user()->id,您提到的错误类型,我想问题出在其中。不过这只是一个建议;退出代码>这应该会给你一些想法。。。可能它返回array
或null
当您尝试上述代码时发生了什么?如果您遇到某种类型的错误,请在此处提及。尝试获取非对象错误的属性,与代码行相同。首先尝试回显Auth::user()->id,您提到的错误类型,我想问题出在其中。不过这只是一个建议;退出代码>这应该会给你一些想法。。。可能它返回array
或null
仍然可以列出dir并破解匹配项。@coryjacik,不要散列它。更好地保护您的服务器。您可以始终使用htaccess或简单的blank index.html停止列出目录。在.htaccess中,它将像选项-索引一样简单,不是吗?.htaccess不是首选的方式,因为它是运行时的,谁说他的上传在文档根目录下?谢谢大家,这仍然是本地的。甚至还没有开始考虑安全性,但您提出了一些好的观点。Laravel似乎有一些非常可靠的安全性内置在它的开箱即用,仍然能够列出dir并破解匹配。@coryjacik,不要散列它。更好地保护您的服务器。您可以始终使用htaccess或简单的blank index.html停止列出目录。在.htaccess中,它将像选项-索引一样简单,不是吗?.htaccess不是首选的方式,因为它是运行时的,谁说他的上传在文档根目录下?谢谢大家,这仍然是本地的。甚至还没有开始考虑安全性,但您提出了一些好的观点。Laravel似乎有一些非常可靠的安全性内置在它的开箱即用的东西似乎无法让linux语法正常工作,但起作用的是$path='uploads/files/'。Auth::user()->id;mkdir($path,0700);似乎无法使linux语法正常工作,但起作用的是$path='uploads/files/'。Auth::user()->id;mkdir($path,0700);