php - PHP:从 txt 文件中列出的 url 列表中抓取电子邮件
问题描述
我正在尝试从 txt 文件中列出的 url 中提取电子邮件。
但只有 txt 文件的最后一个 url 显示了他的相关电子邮件。
输出如下所示:
网址1
网址2
网址3
网址4
电子邮件:电子邮件地址1
电子邮件:电子邮件地址2
我不明白我做错了什么。
我有什么明显的遗漏吗?谢谢您的帮助。
编码 :
<?php
$handle = fopen("url-list.txt", "r");
if ($handle) {
while (($url = fgets($handle)) !== false) {
// process the line read.
echo "<br>";
echo $url ;
echo "<br>";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
$result = curl_exec($ch);
curl_close($ch);
$emails = extract_emails_from($result);
foreach(array_unique($emails) as $email) {
echo "email: ", trim($email);
echo "<br>";
}
}
fclose($handle);
} else {
// error opening the file.
}
function extract_emails_from($string) {
preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $string, $matches);
return $matches[0];
}
?>
解决方案
这是一个范围问题。
$emails = extract_emails_from($result);
该$emails
变量在循环的每次迭代中都会被重写while
。
解决方案:
在循环之外创建一个新数组并将结果合并到其中。
$allEmails = [];
while (($url = fgets($handle)) !== false) {
// ... rest of your code
$emails = extract_emails_from($result);
$allEmails = array_merge($allEmails, $emails);
}
推荐阅读
- javascript - 如何使用 lodash 编写嵌套的 for 循环?
- git - 提交信息的首字母大写
- javascript - 带有 Promise 的同步 Javascript 函数无法正常工作
- html - 如何在 BS4 中制作一个注册表单,提示用户使用他们的 instagram 或 facebook 帐户?
- algorithm - NP到P的转变
- python - 命令冷却忽略用户
- python - 将字节存储在文本文件中
- android - Esri Native Xamarin Android 上的对象已拥有异常
- c# - 文件上传时丢失身份验证
- javascript - 一次激活一个主菜单隐藏其他主菜单