访问被拒绝 - PHP move_uploaded_file - Ubuntu LAMP / var / www

时间:2014-01-25 23:07:34

标签: php linux ubuntu permissions

我发现我的 tmp 文件夹或我在/ var / www文件夹中创建的 images 文件夹的权限存在某种问题。我知道/ var / www最初具有root访问权限。我一直在关注一些在线教程,试图解决这个问题并将我的权限更改为谁知道过去一小时左右的内容。

尝试使用PHP / MySQL从HTML表单上传文件时收到此错误:

Warning: move_uploaded_file(images/verified-gw.gif): failed to open stream: Permission  
denied in /var/www/addscore.php on line 40 Warning: move_uploaded_file(): Unable to move 
'/tmp/phpla4QCP' to 'images/verified-gw.gif' in /var/www/addscore.php on line 40 cannot 
move uploaded file or something beavis

所以我认为/ var / www / images文件夹上的权限不正确,或者 tmp 文件夹的权限是root,而ubuntu的内核不允许php脚本从此移动root拥有的文件到 images 文件夹,根据我的知识,该文件夹具有我的用户帐户的权限,并且在组nobody中。

我很迷茫,任何帮助都绝对值得赞赏。

Ubuntu Linux gnome screenshot of permissions of a folder

上面你可以看到我试图将文件从tmp目录移动到的images文件夹的权限图片。

哦,这是失败的PHP脚本:

if (!empty($screenshot)) { 
move_uploaded_file($_FILES['screenshot']['tmp_name'], $target) 
or die (' cannot move uploaded file or something beavis'); 

此致,

用户

3 个答案:

答案 0 :(得分:11)

使用USER DIR mod

如果这是开发者机器,我认为是,不要尝试使用/ var / www(总会有权限问题) 尝试使用user dir

您将把所有文件和项目保存在家中,并且不存在权限问题。

使用Apache root dir

好的,所以如果你不能使用用户目录,你必须设置这样的文件系统:

1。找出apache所有者用户名。如果您使用Ubuntu,它应该是www-data。转到终端并键入:

$ ps aux | grep apache

你应该在下面得到这样的东西。第一列是用户名。

www-data 2070 0.0 0.0 463244 7788 ? S sty25 0:00 /usr/sbin/apache2 -k start

2. 找出apache用户组。再次终端,输入:

$ sudo groups www-data

你应该在下面得到这样的东西。第二列是组名。

www-data : www-data

3. 为apache root目录设置RIGHT所有者用户和所有者组:

$ sudo chown -R www-data:www-data /var/www/

4. 为apache root目录设置RIGHT权限:

$ sudo chmod -R 775 /var/www/

现在您已清理系统,我们尝试修复您的用户以访问/ var / www目录。

5. 将apache组添加到您的用户:

$ sudo usermod -a -G www-data {YOUR_USER_NAME}

警告!不要忘记-a开关!这样,您可以将新组附加到现有列表,而不是用新组替换旧组列表。

现在您具有对位于apache根目录中的文件的读/写访问权限。我们需要告诉apache新文件对组成员来说应该是可读/可写的

6. 将umask命令添加到apache环境配置:

$ sudo echo umask 002 >> /etc/apache2/envvars

或使用图形编辑器:

$ gksudo gedit /etc/apache2/envvars

并将umask 002作为此档案中的最后一行

7。 Voila

$ sudo apache2ctl restart

祝你好运!

答案 1 :(得分:6)

这解决了我的问题:http://ubuntuforums.org/showthread.php?t=1842090&s=8b97ec72fe7cd753910f488329a90f0f&p=11239688#post11239688

tl:dr - 我输入了这个:sudo chown -R www-data:www-data /var/www

我认为这不是尝试chmod chmp tmp目录和这个的组合。我认为只是更改/ var / www文件夹中保留所有LAMP文件的权限。

现在PHP脚本工作并将图像文件扔到我制作的目录中。如果Ubuntu在用户目录中安装了像这个LAMP堆栈这样的测试服务器而不必学习文件权限,比如我正在保护我的文件免受纳粹攻击,那将会更容易。潜艇。

答案 2 :(得分:-3)

试试这个:sudo chown -R 777 /var/www/images

你需要给文件一个公共权限777或755,这样文件就可以上传到指定目录了它的唯一权限