PHP move_uploaded_file"无法移动"

时间:2015-04-10 22:33:57

标签: php html file upload

道歉,如果在其他地方已经回答了这个问题,并且在发布到move_upload_file()时我没有与我的失败相关联。 move_upload_file()正在回复2个错误,"无法打开流"并且"无法移动"。我试图尽可能简单地将其保持在测试目的(因为它不起作用)。本网站不会暴露在互联网上,也不会用于制作目的,而是用于学习。先发制人,谢谢你的耐心和有关我的麻烦的有用提示。

HTML表单帖子:

<!DOCTYPE html>
<html>
<body>

<form enctype="multipart/form-data" action="recv.php" method="POST">
  <!-- MAX_FILE_SIZE must precede the file input field -->
  <input type="hidden" name="MAX_FILE_SIZE" value="3000000" />
  <!-- Name of input element determines name in $_FILES array -->
  Send this file: <input name="userfile" type="file" />
  <input type="submit" value="Send File" />
</form>

</body>
</html>

recv.php:

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);

$uploaddir = '/var/www/html/Pictures/';
//$uploaddir = 'Pictures/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo "File: $uploadfile<br>\n";

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  echo "File is valid, and was successfully uploaded.\n";
}

echo 'print_r($_FILES):';
print_r($_FILES);

print "</pre>";

?>

结果:

File: /var/www/html/Pictures/test.jpg

Warning:  move_uploaded_file(/var/www/html/Pictures/test.jpg): failed to open stream: Permission denied in /var/www/html/recv.php on line 13

Warning:  move_uploaded_file(): Unable to move '/tmp/phpuA2sGA' to '/var/www/html/Pictures/test.jpg' in /var/www/html/recv.php on line 13

print_r($_FILES):
Array
(
    [userfile] => Array
        (
            [name] => test.jpg
            [type] => image/jpeg
            [tmp_name] => /tmp/phpuA2sGA
            [error] => 0
            [size] => 43434
        )

)

相关的安全性(或缺乏安全性):

drwxrwxrwt. 8 root   root   4096 Apr 10 16:00 /tmp
drwxrwxrwt. 3 root   root     35 Apr 10 16:00 /var/tmp/
drwxrwxrwt. 2 apache apache    6 Apr 10 16:53 /var/www/html/Pictures/

我可能无法关联的最重要的注意事项是,这最初确实有效,但我删除了html文件夹的内容。我注意到图片中的链接文件指向/var/www/html。我不小心删除了该链接,随后删除了/var/www/html中用于测试的少量文件。我按照上述规范重建了这些几个文件,但现在收到了尝试移动的警告。正如recv.php文件所示,我已经尝试了绝对路径和相对路径。我意识到很多这种情况被认为是最佳实践,但我需要在解决所有其他概念之前了解其中的内容。如果重要的话,Getenforce仍然会执行#34;

1 个答案:

答案 0 :(得分:0)

这是一个selinux许可问题。 chcon -R -t httpd_sys_rw_content_t Pictures解决了这个问题。

我意识到在打印is_writable('Pictures')的结果时,777权限不是问题。 setenforce 0证明我需要解决selinux之后的真正快速测试。