首页 >后端开发 >php教程 >php警告的原因

php警告的原因

WBOY
WBOY原创
2016-06-06 20:20:471449浏览

<code><form action="index.php" method="post">
    <input type="text" name="user">
    <input type="text" name="password">
    <input type="submit" value="submit">
</form></code>
<code><?php $user=trim($_POST['user']);
    $password=trim($_POST['password']);

    if(!$user || !$password){
        echo 'please make sure no empty input';
        exit;
    }
    //write to test.txt
    $handle=fopen('test.txt','rb+');
    if($handle){
        while(($buffer=fgets($handle))!==false){
            preg_match('/.*:(.*?)-/',$buffer,$array);
            if($array[1]===$user){
                echo 'user exist';
                exit;
            }
            fwrite($handle,'$user:'.$user.'------'.'$password:'.$password."\r\n");
            fclose($handle);
        }
    }else{
        echo 'fail to open file';
    }

?>


</code>

写的这个程序是向txt写入文字。可以实现功能,但会有警告。
Warning: fgets(): 5 is not a valid stream resource in C:\xampp\htdocs\index.php on line 13
这个警告什么意思。怎么消除?

回复内容:

<code><form action="index.php" method="post">
    <input type="text" name="user">
    <input type="text" name="password">
    <input type="submit" value="submit">
</form></code>
<code><?php $user=trim($_POST['user']);
    $password=trim($_POST['password']);

    if(!$user || !$password){
        echo 'please make sure no empty input';
        exit;
    }
    //write to test.txt
    $handle=fopen('test.txt','rb+');
    if($handle){
        while(($buffer=fgets($handle))!==false){
            preg_match('/.*:(.*?)-/',$buffer,$array);
            if($array[1]===$user){
                echo 'user exist';
                exit;
            }
            fwrite($handle,'$user:'.$user.'------'.'$password:'.$password."\r\n");
            fclose($handle);
        }
    }else{
        echo 'fail to open file';
    }

?>


</code>

写的这个程序是向txt写入文字。可以实现功能,但会有警告。
Warning: fgets(): 5 is not a valid stream resource in C:\xampp\htdocs\index.php on line 13
这个警告什么意思。怎么消除?

你这个写法就由问题,
把 fgets 写在 while 条件里,第一次读还是正常,但是正常读了之后你在 while 里把 $handle 就 close 了,那循环之后再次判断 while 的时候 fgets 读一个已经关闭的文件资源 当然就报这个警告了……

把 fclose 放在 while 之外

fclose($handle);
把这个放到while外面,你读了一次就关闭了,当然报错了

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn