【问题标题】:PHP Script to MD5 Hash Each Line SeparatelyPHP 脚本到 MD5 单独散列每一行
【发布时间】:2019-06-28 22:08:47
【问题描述】:

我正在尝试创建一个可以 MD5 快速散列多行 (50,000+) 的脚本。我有一个我一直在尝试制作的脚本,但它有时会给我不同的输出,我不知道为什么。有什么想法吗?

  <?php  
     if(isset($_POST['btn'])){
            $value=$_POST['text'];
            $ids = explode(PHP_EOL, $value);
            $content = '';
            for ($i=0;$i<count($ids);$i++){
                $content .= md5($ids[$i]).'<br>';
            }

            echo nl2br($content);
     }
     ?>

当我尝试散列时:

apples  
bananas  
oranges  
pineapples

结果:

265f78fc274d8428fd63dabc24400cb4  
63a63ddf49984e0f1cef336aeb6ca39c  
229b1cc78a248c6cea47fa95565dc9ca  
019b111ec0c13ed923922715bfb1670a  

但我应该得到:

daeccf0ad3c1fc8c8015205c332f5b42  
ec121ff80513ae58ed478d5c5787075b  
91b07b3169d8a7cb6de940142187c8df  
019b111ec0c13ed923922715bfb1670a  

【问题讨论】:

  • 当你把明确的&lt;br&gt; 放在$content 中时,为什么还要使用nl2br()
  • 你的话后面有一些空格。删除此处的空格后,我得到了正确的结果:3v4l.org/njDvi
  • @Jeff CR,不是空格
  • @Barmar 我在复制和粘贴 OP 的代码时有空格。没有看到 CR...也许 3v4l.org 自动从 CR 中制作了 \n 和/或他们的服务器配置不同。无论如何,你的修剪似乎是最好的答案(一如既往)
  • SO问题中没有CR,CR->空格翻译可能是他这里粘贴的时候发生的。

标签: php md5


【解决方案1】:

输入字符串中的行由\r\n 分隔,但在您的服务器上,PHP_EOL 设置为\n。因此,当您将输入拆分为行时,除了最后一行之外,每行末尾都有一个\recho md5("apples\r"); 产生 265f78fc274d8428fd63dabc24400cb4

使用trim() 删除多余的空格。

$content .= md5(trim($ids[$i])).'<br>';

【讨论】:

    【解决方案2】:

    您的输入数据中有空格。并且不要在内存中收集所有 50k+ 的哈希值。
    试试这个

    <?php  
    if(isset($_POST['btn'])){
        $value=$_POST['text'];
        $ids = explode(PHP_EOL, $value);
        for ($i=0;$i<count($ids);$i++){
            echo nl2br(md5(trim($ids[$i])));
        }
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 2014-11-18
      • 2013-08-29
      • 1970-01-01
      • 2014-09-09
      • 2014-06-04
      • 2012-06-17
      • 2017-02-28
      • 2013-04-24
      相关资源
      最近更新 更多