var_dump显示我意想不到的结果

时间:2017-01-05 16:22:11

标签: php windows

我想要创建一个简单的应用程序,使用基于文件的身份验证来测试登录和退出,但是我已经遇到了一些我无法解决的问题。

以下是用于测试我的应用程序的文本文件的内容,名为 filetest_02.txt

david, codeslave
chris, bigboss

我也使用PHP脚本来进行测试 以下是 login.php

的内容
    <?php

     $error = '';

    if ( isset($_POST['login']) ) {
    session_start();
    $username = trim( $_POST['username'] );
    $password = trim( $_POST['pwd']  );
    // location of usernames and passwords
    $userlist = 'C:/private/filetest_02.txt';
    // location to redirect on success
    $redirect = 'http://localhost/php/powers/solutions/ch09/menu.php';
    require_once './includes/authenticate.inc.php';
    }

   ?>
   <!DOCTYPE HTML>
   <html>
    <head>
        <meta charset="utf-8">
        <title>Login</title>
    </head>
    <body>
        <?php if ( $error ) : ?>
        <p><?php echo $error; ?></p>
        <?php endif; ?>
        <form id="form1" method="post" action="">
            <p>
                <label for="username">Username:</label>
                <input type="text" name="username" id="username">
            </p>
            <p>
                <label for="pwd">Password:</label>
                <input type="password" name="pwd" id="pwd">
            </p>
            <p>
                <input name="login" type="submit" id="login" value="Log in">
            </p>
        </form>
    </body>
</html>

以下是 authenticate.inc.php

的内容
<?php

if ( !file_exists($userlist) || !is_readable($userlist) ) {
    $error = 'Login facility unavailable. Please try later.';
} else {
    // read the file into an array called $users
    $users = file( $userlist );
    // loop through the array to process each line
    for ( $i = 0; $i < count($users); $i++ ) {
        // separate each element and store in a temporary array
        $tmp = explode( ', ', $users[$i] );
        var_dump($tmp);
        $name = trim($tmp[0]);
        $pwd = trim($tmp[1]);
        var_dump( $name, $pwd );
        var_dump( $_POST );
        // check for a matching record
        if ( $name == $username && $pwd == $password ) {
            $_SESSION['authenticated'] = 'Jethro Tull';
            session_regenerate_id();
            break;
        }
    }
    // if the session variable has been set, redirect
    if ( isset($_SESSION['authenticated']) ) {
        /* header( "Location: $redirect" );
        exit; */
    } else {
        $error = 'Invalid username or password.';
    }
}

麻烦的是当我点击 login.php 上的登录按钮时,我得到以下输出 enter image description here

为什么var_dump输出显示字符串&#39; david&#39;的长度?修剪后即使等于8甚至8?可能导致这一切的原因是什么? 谢谢。

1 个答案:

答案 0 :(得分:-1)

var_dump可能会向您显示带空格的david的初始化,但您可以看到它后来识别出它的剪切。这会在您的代码中执行任何不需要的操作吗?

此外,如果这是针对实际的网站,而您只是不玩游戏,我不会将密码存储在您的文件中,而不会对其进行腌制和散列。

另外,请参阅PHP手册:

  

string(32)“这些是几句话:) ......”   string(16)“示例字符串   “   string(11)“Hello World”

     

string(28)“这些是几句话:) ......”   string(24)“这些是几个字:)”   string(5)“o Wor”   string(9)“ello Worl”   string(14)“Example string”

var_dump显示了初始化和之后的修剪。