PHP提取Gmail垃圾IP写入封禁文件末尾出现Array字符串求解决
问题原因
fetchEmails方法存在变量名大小写错误:赋值时使用变量$ip,推入数组时错误使用大写的$IP,PHP变量大小写敏感,此处会存入非预期的空值/未定义值。updateBlockList方法数组合并逻辑错误:fetchEmails返回的$ips本身就是一维IP数组,使用[$ips]包裹后再合并会生成二维数组。- 写入文件时直接传入数组:
file_put_contents要求传入字符串参数,传入数组时PHP会默认将数组转换为字符串Array,这是文件末尾出现多余字样的直接原因。
修复代码
1. 修正fetchEmails变量大小写
if ($ip) { echo $ip; array_push($found, $ip); // 改为小写$ip,和赋值变量保持一致 }
2. 修正updateBlockList合并与写入逻辑
private function updateBlockList($ips) { // 读取文件时忽略每行末尾的换行符,避免后续去重逻辑失效 $blockedIPs = file($this->blockFile, FILE_IGNORE_NEW_LINES); // 直接合并两个一维数组,去掉包裹$ips的方括号 $blockedIPs = array_merge($blockedIPs, $ips); $blockedIPs = array_filter($blockedIPs); $blockedIPs = array_unique($blockedIPs); sort($blockedIPs); // 将数组拼接为带换行的字符串后再写入 $this->writeFile( $this->blockFile, implode(PHP_EOL, $blockedIPs) . PHP_EOL ); }
writeFile方法无需修改,调整后传入的参数已经是符合要求的字符串格式。
内容的提问来源于stack exchange,提问作者senecaTheMeek
相关产品推荐
相关产品推荐

