PHP上传文件信息获取问题

        最近在学PHP,从最基础的一些基本操作在学起。今天正好学到文件上传,于是自己写了一个文件上传的表单,想要实现上传一张图片的功能,可是今天在PHP脚本当中获取上传文件信息时却遇到了一些问题,查了百度也没解决,麻烦大家帮看一下。

        环境:win10 + apache2.4+php5.7

        PHP脚本关键部分代码:(完整代码见最后)

http://img2.mukewang.com/5a03a78300014b7b13250737.jpg

     HTML页面显示:

    http://img3.mukewang.com/5a03a7db00011ac312050721.jpg

        可以发现,第一点,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>


高山彝人
浏览 2587回答 2
2回答

捷克轩

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

高山彝人

/*利用$_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 />';
打开App,查看更多内容
随时随地看视频慕课网APP