无法从 PHP 上传文件到 Centos 服务器?

Moh*_*Ali 0 php apache file-upload centos

我在将文件从 PHP 上传到 Centos 7.0 Apache 服务器时遇到问题

\n\n

PHP代码

\n\n
  <html>\n<head>\n  <title>Upload your files</title>\n</head>\n<body>\n  <form enctype="multipart/form-data" action="index.php" method="POST">\n    <p>Upload your file</p>\n    <input type="file" name="uploaded_file"></input><br />\n    <input type="submit" value="Upload"></input>\n  </form>\n</body>\n</html>\n<?PHP\n  if(!empty($_FILES[\'uploaded_file\']))\n  {\n    $path = "/var/www/html/";\n    $path = $path . basename( $_FILES[\'uploaded_file\'][\'name\']);\n    if(move_uploaded_file($_FILES[\'uploaded_file\'][\'tmp_name\'], $path)) {\n      echo "The file ".  basename( $_FILES[\'uploaded_file\'][\'name\']). \n      " has been uploaded";\n    } else{\n        echo "There was an error uploading the file, please try again!";\n    }\n  }\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意 php.ini 中的 file_uploads 已启用

\n\n

并且文件夹“/var/www/html/”的权限为0777,其所有者是apache

\n\n

我尝试了stackoverflow中几乎所有的解决方案,

\n\n
chmod -R 0777 /var/www/html\n\nchown apache /var/www/html\n\nfind /var/www/html/ -type f -print0 | xargs -0 chmod -v 777 \n
Run Code Online (Sandbox Code Playgroud)\n\n

文件上传仍然失败,并在 HTTPD error_log 中收到此错误

\n\n
[Tue Mar 19 10:34:21.257969 2019] [:error] [pid 27446] [client 172.20.20.41:61798] PHP Warning:  move_uploaded_file(/var/www/html/Scan.pdf): failed to open stream: Permission denied in /var/www/html/index.php on line 23, referer: http://10.104.25.70/index.php\n[Tue Mar 19 10:34:21.258095 2019] [:error] [pid 27446] [client 172.20.20.41:61798] PHP Warning:  move_uploaded_file(): Unable to move \'/tmp/php64POiK\' to \'/var/www/html/Scan.pdf\' in /var/www/html/index.php on line 23, referer: http://10.104.25.70/index.php\n
Run Code Online (Sandbox Code Playgroud)\n\n

的输出

\n\n
ls -l \n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
drwxrwxrwx. 3 apache root 34 Mar 18 13:24 html\n
Run Code Online (Sandbox Code Playgroud)\n\n

的输出

\n\n
stat html\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
  File: \xe2\x80\x98html\xe2\x80\x99\n  Size: 34              Blocks: 0          IO Block: 4096   directory\nDevice: fd00h/64768d    Inode: 67281951    Links: 3\nAccess: (0777/drwxrwxrwx)  Uid: (   48/  apache)   Gid: (    0/    root)\nContext: system_u:object_r:httpd_sys_content_t:s0\nAccess: 2019-03-19 09:09:19.056277906 +0300\nModify: 2019-03-18 13:24:45.504174727 +0300\nChange: 2019-03-19 10:37:18.901089085 +0300\n Birth: -\n
Run Code Online (Sandbox Code Playgroud)\n

小智 5

Selinux需要配置上下文

cd /var/www/html
mkdir upload
chown apache:apache upload
chcon -t httpd_sys_rw_content_t upload
ls -Z /var/www/html
Run Code Online (Sandbox Code Playgroud)