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