Я делаю сканер PHP, который сканирует URL для адресов электронной почты. Но почему-то ему не хватает адресов электронной почты, и он возвращает пустые массивы мест.
код:
function curl($url){
$ch = curl_init( );
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$return = curl_exec($ch);
curl_close ($ch);
return $return;
}
if(isset($_POST['go']))
{
if($_POST['url'] != ''){
$data = curl($_POST['url']);
preg_match("/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})/i", $data, $matches);
echo "<h1>Handmatig gezocht</h1><hr>";
$tely = count($matches);
for ($y=0; $y<=$tely; $y++)
{
if(!empty($matches[$y]))
{
echo $matches[$y] ."<br>";
}
else
{
echo "Lege array :(<br>";
}
}
echo "<hr>";
}
}
Я сделал простую веб-страницу на своем локальном хосте с 5 электронными письмами
<p>[email protected]</p>
<p>[email protected]</p>
<p>[email protected]</p>
<p>[email protected]</p>
<p>[email protected]</p>
И массив, который я получаю от моего сканера, выглядит так:
Array ( [0] => [email protected] [1] => [2] => [3] => .nl )
Это происходит потому, что вы используете preg_match (см. документация).
Вы должны использовать preg_match_all вместо.
Других решений пока нет …