连接两个单独文件中的单词

时间:2017-10-13 15:00:15

标签: php scripting

我正在尝试将文件中的单词与另一个文件中的单词连接起来。但是,当我运行脚本时,我得到第一个文件的完整输出,然后是第二个文件的输出,然后我看到执行没有完成,所以我陷入无限循环。这是我的代码:

include 'passgen.txt';
include 'mycharset.txt';

$lines=file('passgen.txt');
$additions=file('mycharset.txt');

foreach($lines as $line){
        foreach($additions as $addition){

        $newPasswords=$line . $addition;

        }
}
file_put_contents('newPasswords.txt', print_r($newPasswords, true));

passgen.txt内容示例:

stack
5tack
St4ck
...

mycharset.txt内容示例:

1
1!
2
2!

我想要实现的预期结果:

stack1
stack1!
stack2
stack2!
5tack1
5tack1!
...

修改

添加Jay的完整代码回答:

#!/usr/bin/php
<?php
include 'passgen.txt';
include 'mycharset.txt';

$lines=file('passgen.txt');
$additions=file('mycharset.txt');

foreach($lines as $start) {
    foreach($additions as $end) {
        file_put_contents('newPasswords2.txt', $start.$end ."\r\n", FILE_APPEND);

    }
}
?>

来自Jay的示例输出回答:

St4ck
6!3

St4ck
6!4

St4ck
6!5

我试图删除\ r \ n但是仍然没有将6!5附加到下面所需格式的单词中:

St4ck6!4
St4ck6!5
...

2 个答案:

答案 0 :(得分:2)

您只是创建一条线,因此在每次迭代时都会覆盖$newPasswords,因此您将无法获得数组。我所做的是将连接的单词放入一个数组($word_array)。然后,您可以轻松地遍历数组并放入文本文件中:

修改

添加了trim()函数来解释我们可能不知道的文本文件中的任何空格字符:

$file1 = ['stack','5tack','St4ck'];
$file2 = ['1','1!','2'];

$word_array = array();
foreach($file1 as $start) {
    foreach($file2 as $end) {
        $word_array[] = trim($start).trim($end); 
    }
}
print_r($word_array);

返回:

Array

(
    [0] => stack1
    [1] => stack1!
    [2] => stack2
    [3] => 5tack1
    [4] => 5tack1!
    [5] => 5tack2
    [6] => St4ck1
    [7] => St4ck1!
    [8] => St4ck2
)

现在你可以将它们放在你的文本文件中:

foreach($word_array as $word) {
    file_put_contents('newPasswords.txt', $word."\r\n");
}

话虽如此,我提醒您不要因为任何原因使用它来生成密码。您实际上是根据您的评论创建彩虹表:

  

我正在使用弱密码查找器,我需要一个自定义密码列表来比较哈希是否很弱。

最好为用户提供密码强度指示器,以鼓励他们创建强密码。

缩短过程......

您可以通过在循环期间写入文件来完全缩短过程,这不需要数组:

foreach($file1 as $start) {
    foreach($file2 as $end) {
        file_put_contents('newPasswords.txt', trim($start).trim($end) ."\r\n", FILE_APPEND); 
    }
}

答案 1 :(得分:0)

您可以使用fgets()函数逐行读取文件。然后你可以连接它。 如下所示:

$count = 0;
while($word = fgets($lines, 4096)){
$word = $word . additions[$count];
echo $word;
$count++;
}