Laravel上传文件:无法写入目录

21

我正在将文件上传到我的系统中,在本地使用 Windows 和 XAMPP 时可以正常工作,但在托管在 Ubuntu 栈上时,我的文件无法上传。我收到一个错误消息,说它不能写入位于公共文件夹内的 'system' 目录。这是我的代码:

 $destinationPath = public_path().'/system'; // upload path
  $extension = Request::file('add_students')->getClientOriginalExtension(); // getting excel extension
  // dd($extension);
  $fileName = rand(11111,99999).'.'.$extension; // renameing excel file
  $file=Request::file('add_students')->move($destinationPath, $fileName); // uploading file to given path
  $path=$file->getRealPath();

在寻找解决方案之后,我发现我应该使我的目录可写,因此我在Putty中运行了以下命令:

chmod 770 /var/www/html/public/system

但是即使这样,我仍然遇到了一个错误:无法写入“/var/www/html/public/system”目录

我使用的是Laravel 5,我的主机是Digital Ocean。谢谢。


5
请尝试运行以下命令:chmod 755 /var/www/html/public/systemchown www-data:www-data /var/www/html/public/system。这将更改系统权限和所有者。 - codegenin
1
检查并打印目标路径,并给予完全权限777进行测试,然后再更改为755。 - user3737083
你在使用 Apache 服务器吗? - Vishal Sharma
4个回答

54

chmod 755 /var/www/html/public/systemchown www-data:www-data /var/www/html/public/system 如@JLPuro所述,完美地解决了问题。非常感谢各位。


9
如果想要递归执行该命令,可以加上-R标志。在我添加了这个标志之前,这个命令对我来说不起作用。 chown -R www-data:www-data /path/to/dir - andromeda

4

如果您使用的是Centos-7,则请使用以下方法:

sudo find directory_name -type f -exec chmod 644 {} \;
sudo find directory_name -type d -exec chmod 775 {} \;

sudo chown -R apache:apache var/www/html/directory_name
chcon -R -t httpd_sys_rw_content_t directory_name

其中directory_name是您项目的主目录。


谢谢。sudo chown -R apache:apache var/www/html/directory_name 应该是 sudo chown -R apache:apache /var/www/html/directory_name。 - Khadka Pushpendra

3

文件夹的权限:sudo chmod 777./(文件夹名称)

文件的权限:sudo chmod 777 -R ./(文件名称)


注意:请确保在输入命令之前,已经切换到了正确的目录。

3
请不要使用777,否则会引发灾难。这个命令允许任何人都能读取、写入甚至删除文件。实际上,这个命令会为黑客提供可乘之机。我建议避免使用它。 - Saddan

0

每当你需要创建一个目录时,请使用以下代码:

use File;
use Illuminate\Foundation\Bus\DispatchesJobs;

在控制器中使用此代码

if (!file_exists(public_path().'system')) {            
                if(File::makeDirectory(public_path().'system',0777,true)){                
                  }
                }

在你的函数中使用这个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接