XAMPP centos通过PHP上传的文件没有显示出来

时间:2015-06-28 11:38:38

标签: php centos xampp

我正在xampp 5.6.8专用计算机上运行Centos 7。 我开发了简单的脚本,通过机器上的PHP将任何文件上传到服务器,PHP代码:

<?php
if (is_uploaded_file($_FILES['uploadfile']['tmp_name'])) {
   echo "File ". $_FILES['uploadfile']['name'].'-'.$_FILES['uploadfile']["tmp_name"]." - uploaded successfully.<br>";
   echo disk_free_space('/');
}
?>

<html>
<head>
    <title>test</title>
</head>
<body>
    <div style="text-align:center;">
        <form action="" method="post" enctype="multipart/form-data">
            <input name="uploadfile" type="file">
            <input name="sendfile" value="upload" type="submit">
        </form>
    </div>
</body>
</html>

当我发送一个示例文件时echo返回:

  

文件sample.txt - / opt / lampp / temp / phpD58n0L - 已成功上传。

一些信息和事实:

  • 当我在xampp用户
  • 上运行daemon
  • /opt/lampp/temp/目录由daemon:daemon
  • 属于chown command
  • /opt/lampp/temp/设置为770权限
  • php.ini设置为允许文件最大为128mb,上传目录为/opt/lampp/temp/

1 个答案:

答案 0 :(得分:1)

使用is_uploaded_file()只检查它是否是上传的文件。它不会从/ temp /目录移动它。您可能想查看manual on POST uploads。例如:

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

也就是说,您应该使用move_uploaded_file()将上传内容移动到它所属的位置。否则,请说明手册,解释为什么在/ temp /目录中找不到文件:

  

如果文件尚未移走或重命名,该文件将在请求结束时从临时目录中删除。

函数is_uploaded_file()是对文件来源的安全检查,这就是它所做的一切。您可以将其与move_uploaded_file()一起使用,例如:

if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { 
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $destination_file)) {
        // Was moved
    }
    else {
        // Wasn't moved
    }
else {
    // Wasn't valid
}

这对于常规文件上传和移动可能是多余的,但我在手册的评论中注意到move_uploaded_file()在任何情况下都会进行检查。