为了账号安全,请及时绑定邮箱和手机立即绑定

PHP上传文件信息获取问题

PHP上传文件信息获取问题

高山彝人 2017-11-09 09:00:56
        最近在学PHP,从最基础的一些基本操作在学起。今天正好学到文件上传,于是自己写了一个文件上传的表单,想要实现上传一张图片的功能,可是今天在PHP脚本当中获取上传文件信息时却遇到了一些问题,查了百度也没解决,麻烦大家帮看一下。        环境:win10 + apache2.4+php5.7        PHP脚本关键部分代码:(完整代码见最后)     HTML页面显示:            可以发现,第一点,echo语句输出is_file的值为空,而var_dump输出is_file函数的值却不为空,这是为什么?而且这儿居然是false?        第二点,echo输出文件大小却提示文件状态有问题?这是什么原因?        第三点,echo和var_dump有什么区别吗?        哪位朋友能帮忙解答一下?                       完整代码:           <!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1">    <title>添加分数</title>    <!-- Bootstrap -->    <link href="css/bootstrap.css" rel="stylesheet">  </head>  <body>  <div><div>    <div><?php//如果表单已经提交if(isset($_POST['submit'])){$bdc = mysqli_connect('localhost','root','','elvis_store') or die('数据库连接失败');    $username = $_POST['username'];    $score = $_POST['score'];    $screenshoot=$_FILES['screenshoot']['name'];//获取上传图片的文件名    if(!empty($username) && !empty($score) && !empty($screenshoot)){     $isFile=is_file($_FILES['screenshoot']['name']);     echo '上传文件返回结果代码:'.$_FILES['screenshoot']['error'].'<br />';     echo '临时文件路径:'.$_FILES['screenshoot']['tmp_name'].'<br />';     echo 'echo输出是否是文件:'.(is_file($_FILES['screenshoot']['name'])).'<br />';     var_dump(is_file($_FILES['screenshoot']['name'])) . "<br />";     echo 'filesize输出文件大小:'.(filesize($screenshoot)/1024).'kb<br />';     echo '文件大小:'.($_FILES['screenshoot']['size']/1024).'kb<br />';     echo '文件名称:'.$_FILES['screenshoot']['name'].'<br />';     echo '文件类型:'.$_FILES['screenshoot']['type'].'<br />';     if(is_file($screenshoot) && /*$_FILES['screenshoot']['size']>0或者*/ filesize($screenshoot)>0){      $query = "INSERT INTO score_list (id,name,score,date,screenshoot) VALUES (0,'$username',now(),'$score','$screenshoot')";    $result = mysqli_query($query) or die('数据库数据添加失败');    echo '<h2>数据添加成功</h2>';    }    else    echo "只能上传图片类型并且图片大小不能大于";    }    else    echo "请填写完所有表单信息再提交!";}?>    <h4>添加我的分数</h4><form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">  <!--利用HTML5创建一个文件上传大小限制,最大为10MB-->  <input type="hidden" name="MAX_FILE_SIZE" value="10240000">  <div>    <label for="username">姓名</label>    <input type="text" id="username" placeholder="姓名" name="username" value="<?php if(isset($username)) echo $username; ?>">  </div>  <div>    <label for="score">分数</label>    <input type="text" id="score" placeholder="分数" name="score" value="<?php if(isset($score)) echo $score; ?>">  </div>  <div>    <label for="screenshoot">分数截图上传</label>    <input type="file" id="screenshoot" name="screenshoot">  </div>  <input type="submit" name="submit" class="btn btn-info" value="提交"></form></div><div >     <a href="./list_scores.php" class="btn btn-success">返回高分列表</a>    </div></div>    <script src="./js/jquery-3.2.1.js"></script>    <script src="./js/bootstrap.js"></script>  </body></html>
查看完整描述

2 回答

已采纳
?
捷克轩

TA贡献60条经验 获得超21个赞

第一个问题 echo 打印false 就是在页面里什么显示不出来,var_dump可以具体详细信息。第二个问题is_file是让你判断他是不是个文件,你确定$_FILES['screenshoot']['name']这是个文件?还是一个路径?既然他是判断是不是个文件,那你传的参数应该是路径对+文件名 第三个问题 echo是语言结构他可以打印出PHP的简单数据类型 int float bool  复合类型就没办法了,object array只能用var_dump或者print_r明白了

查看完整回答
1 反对 回复 2017-11-16
  • 高山彝人
    高山彝人
    非常感谢,现在回过头来再看已经弄清楚了。 最后,我的PHP代码变成了这样: /*利用$_FILES全局变量来获取文件的有关信息*/ echo '上传文件返回结果代码:'.$_FILES['screenshoot']['error'].'<br />'; echo '临时文件路径:'.$_FILES['screenshoot']['tmp_name'].'<br />'; echo 'echo输出文件大小:'.($_FILES['screenshoot']['size']/1024).'kb<br />'; echo '文件名称:'.$_FILES['screenshoot']['name'].'<br />'; echo '文件类型:'.$_FILES['screenshoot']['type'].'<br /><br /><br />'; /*利用函数获取文件的相关信息*/ $pathString=$_FILES['screenshoot']['tmp_name']; echo '文件路径是:'.$pathString.'<br />'; echo 'echo输出是否是文件:'.(is_file($pathString)).'<br />'; var_dump(is_file($pathString)) . '<br />'; echo 'filesize输出文件大小:'.(filesize($pathString)/1024).'kb<br />'; var_dump(filesize($pathString)/1024) . 'kb<br />';
?
高山彝人

TA贡献1条经验 获得超0个赞

/*利用$_FILES全局变量来获取文件的有关信息*/

    echo '上传文件返回结果代码:'.$_FILES['screenshoot']['error'].'<br />';

    echo '临时文件路径:'.$_FILES['screenshoot']['tmp_name'].'<br />';

    echo 'echo输出文件大小:'.($_FILES['screenshoot']['size']/1024).'kb<br />';

    echo '文件名称:'.$_FILES['screenshoot']['name'].'<br />';

    echo '文件类型:'.$_FILES['screenshoot']['type'].'<br /><br /><br />';


    /*利用函数获取文件的相关信息*/

    $pathString=$_FILES['screenshoot']['tmp_name'];

    echo '文件路径是:'.$pathString.'<br />';

    echo 'echo输出是否是文件:'.(is_file($pathString)).'<br />';

    var_dump(is_file($pathString)) . '<br />';

    echo 'filesize输出文件大小:'.(filesize($pathString)/1024).'kb<br />';

    var_dump(filesize($pathString)/1024) . 'kb<br />';



查看完整回答
反对 回复 2017-11-23
  • 2 回答
  • 0 关注
  • 2502 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信