首页 > 解决方案 > 如何遍历文件PHP中的每一行

问题描述

我正在使用 PHP 制作一个用于教育目的的兑换密钥页面,只是为了看看它的功能。我将密钥存储在 txt 文件中,如下所示:

key1
key2

等等。我尝试了以下方法来遍历 txt 文件,将值插入到数组中并从那里开始工作。这是我所拥有的:

$gkey = $_GET["key"];

$file = fopen("./generatedkeys.txt", "a");
$generatedk = array();

// generate table from data in txt file
while(! feof($file)) {
   $generatedk[] = fgets($file);
}
    

foreach ($generatedk as $key){
   if ($key == hash("sha256", $gkey)){

      // Removing of key from data in txt file
      $contents = file_get_contents($file);
      $contents = str_replace($key, '', $contents);
      file_put_contents($file, $contents);
      fclose($file);

      $accfile = fopen("./accs.txt", "a");
      fwrite($accfile, hash("sha256", $key).",".hash("sha256", $hwid)."\n");

      break;
   }
}

然而,上面的代码似乎不起作用。根本没有检测到密钥,也没有从 generatekeys.txt 中删除。(不确定是否有任何错误,因为我看不到任何错误)。有没有明显的错误?任何帮助表示赞赏。谢谢你。

标签: php

解决方案


我认为这应该使过程更简单,file用于将整个文件一次读取到一个数组中,然后array_search()用于查找密钥是否存在(如果未找到,则返回 false,因此!== false)。

然后如果找到,它只是将使用的密钥附加到另一个文件,取消设置密钥的数组条目并覆盖原始文件......

$gkey = $_GET["key"];

$generatedk = file("./generatedkeys.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

if ( ($entry = array_search(hash("sha256", $gkey), $generatedk)) !== false )    {
    // Add key used, with whatever content you want
    file_put_contents("./accs.txt", $gkey.PHP_EOL, FILE_APPEND);
    // Remove found key from list in input file
    unset($generatedk[$entry]);
    // Overwrite input file with adjusted array
    file_put_contents("./generatedkeys.txt", implode(PHP_EOL, $generatedk));
}

推荐阅读