<?php
$file1 = "./Words.dic"; // 基礎詞庫
$file2 = "./common_pass_mini.dic"; // 後綴詞庫
$file3 = "./Sys_Month_Date.Dic"; // 日期詞庫
$rfile = "./5.dic"; // 輸出
$n = 2000; // 產生筆數
$base = file($file1, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$ext = file($file2, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$ext2 = file($file3, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$out = [];
for ($i = 0; $i < $n; $i++) {
$name = $base[array_rand($base)] . "_" . $ext[array_rand($ext)];
$out[] = $name;
}
file_put_contents($rfile, implode("\r\n", $out));
echo "Write user succeed!";
?>
<?php
$outFile = "./result.dic";
$fp = fopen($outFile, 'a');
for ($i = 1; $i <= 5; $i++) {
fwrite($fp, file_get_contents("$i.dic"));
}
for ($i = 10; $i <= 11; $i++) {
fwrite($fp, file_get_contents("$i.dic"));
}
fclose($fp);
echo "Write Succeed";
?>
<?php
$src = "./result.dic";
$dest = "./target.dic";
$lines = file($src, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$lines = array_unique($lines);
$filtered = array_filter($lines, fn($s) => strlen($s) >= 6 && strlen($s) <= 16);
file_put_contents($dest, implode("", $filtered));
echo "Write succeed";
?>
file() 會將整檔讀入記憶體,大檔案請改用 SplFileObject 逐行處理或資料庫匯入。array_unique() 記憶體佔用大,百萬筆以上建議用 sort -u 系統指令或資料庫 DISTINCT。users 表並建立唯一索引,避免應用層再次去重。三階段管道化流程 (產生 → 合併 → 清洗) 結構清晰,易於擴充與維護。實務上可整合為單一 CLI 指令並加入進度條、錯誤重試、日誌記錄,構建健壯的批量帳號產生系統。