Apache PHP move_uploaded_文件权限被拒绝,尽管它似乎应该被拒绝
我正在学习PHP并尝试使用以下代码上载文件:Apache PHP move_uploaded_文件权限被拒绝,尽管它似乎应该被拒绝,apache,file-upload,php,Apache,File Upload,Php,我正在学习PHP并尝试使用以下代码上载文件: $destination = "uploads/".$_FILES['userfile']['name']; move_uploaded_file($_FILES['userfile']['tmp_name'], $destination); 但我面临着 无法打开流:权限被拒绝 我可以将“uploads”目录的权限更改为每个人都可以写,但这当然是一种糟糕的做法。 文件夹权限为: drwxr-xr-x 2 loai loai 4096 Dec 30
$destination = "uploads/".$_FILES['userfile']['name'];
move_uploaded_file($_FILES['userfile']['tmp_name'], $destination);
但我面临着
无法打开流:权限被拒绝
我可以将“uploads”目录的权限更改为每个人都可以写,但这当然是一种糟糕的做法。
文件夹权限为:
drwxr-xr-x 2 loai loai 4096 Dec 30 12:44 uploads
运行ps aux | grep httpd
loai 6728 0.0 0.0 4368 832 pts/1 S+ 18:37 0:00 grep --colour=auto httpd
那么apache进程不应该能够在给定的目录中进行写操作吗?
谢谢您可以尝试使用目标的完整路径。比如:
/var/www/project/uploads
如果您可以使用相对路径读取该目录,则只需浏览它:
cd $path_to_your_site_root
chown -R loai:loai uploads
首先,正如在对问题的评论中所指出的,您的
ps
输出显示的是grep
进程本身,而不是httpd
进程(或任何web服务器)。因此,这可能意味着您的web服务器正在以不同的用户身份运行,而不是以loai
的身份运行。更改uploads
文件夹的所有权或使其组可写,然后将web服务器的用户添加到相应的组中PHP进程的工作目录可能与您想象的不同。您的脚本极易受到目录遍历和远程脚本注入攻击。请记住,来自用户的所有内容都可能包含恶意数据,包括$\u文件
数组的名称
字段。Ohters than loai没有对目录的写访问权限。请查看访问权限。您的ps
输出仅显示您的grep
进程,而不是apache
。不要使用['name']
参数,除非您真的想要您的服务器pwn3d谢谢各位,我想正确的原因是Barmar,我以为ps显示apache进程属于loai,但是,谁拥有apache进程?或者它是作为独立用户启动的?但是如何了解web服务器用户呢?我正在自己的机器上运行它。@Loaighraba它应该在配置文件中。如果您使用apache,请打开/etc/apache/apache2.conf
或/etc/apache/httpd.conf
,然后搜索以用户
开头的行,通常类似于用户www-data
。