【问题标题】:Force PHP to echo when loop finishes循环结束时强制 PHP 回显
【发布时间】:2013-10-29 07:11:01
【问题描述】:

我正在测试 PHP5.5 的新 password_hash 技术,出于调试目的,我希望每次我的 for 循环完成时都有 PHP 回显,而不是等待页面完成加载(或让 apache剪了它)。我正在使用 wamp 服务器进行调试,并启用了implicit_flush,并禁用了output_buffering

我的代码是:

<?php
    ob_start();
    $wordtohash = "rasmuslerdorf";

    //require ircmaxell's PHP5 backward compat lib (https://github.com/ircmaxell/password_compat)
    require 'lib/pw.php';

    echo "Beginning hashing: <br /><br /><hr /><br />";

    ob_flush();

    $options = [
        'cost' => 15
    ];

    for ($i=0; $i < 10; $i++) {
        if (isset($hashed)) {
            $wordtohash = $hashed;
        }

        //start counting
        $mtime = microtime();
        $mtime = explode(" ", $mtime);
        $mtime = $mtime[1] + $mtime[0];
        $start = $mtime;

        //hash
        $hashed = "Attempt {$i}: ".password_hash($wordtohash, PASSWORD_BCRYPT, $options);

        //end counting
        $mtime = microtime();
        $mtime = explode(" ",$mtime);
        $mtime = $mtime[1] + $mtime[0];
        $end = $mtime;
        $totaltime = ($end - $start);
        echo $hashed." (total time: ".$totaltime." seconds)<br /><br />";

        ob_flush();
    }
?>

这样做是对一个测试词“rasmuslerdorf”进行哈希处理,然后收集哈希值,然后将其发送回进行哈希处理(循环指定的次数)。

我为每个人设置了一个计时器,但希望每个人在完成测试后都显示在页面上。

我曾尝试在需要的地方使用ob_start(),然后使用ob_flush() 命令,但这不起作用(implicit_flush 应该使它在echoprint 上刷新,所以我处于损失),我也尝试过flush()

有没有人碰巧有任何额外的想法?非常感谢。

【问题讨论】:

  • 你到底为什么要重新散列 10 次?
  • @MarkBaker 测试速度,主要是。这都是一个测试。
  • 当然,您应该对原始密码进行 10 次哈希以测试速度,而不是重新哈希 10 次,因为您每次迭代都会更改起始值
  • 你的循环。您再次对哈希值进行哈希处理,而不再是“rasmuslerdorf”
  • 如果您只是在测试速度,从命令行而不是从网页执行总是要容易得多

标签: php hash password-encryption php-password-hash


【解决方案1】:

我会尝试使用 PHP 的 error_log() 函数:

$string = $hashed . " (total time: " . $totaltime . " seconds)" ;
error_log(print_r($string, true);

这会将您的调试消息实时打印到 PHP 错误日志中,而无需依赖应用程序的视图层或中断代码的执行。在 UNIX / Linux 系统或 OS X 上,您可以跟踪日志。如果您安装了 Cygwin 或其他 BASH 仿真器,您也可以在 Windows 中执行此操作:

tail -f /path/to/your/error.log 

您可以使用 phpinfo() 来确定 PHP 错误日志的位置。如果您没有在 php.ini 中为日志指定自定义设置,PHP 可能会默认将错误输出到 Apache 日志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2018-09-08
    • 1970-01-01
    相关资源
    最近更新 更多