парсинг нескольких URL из формы - PullRequest
0 голосов
/ 24 октября 2011

Я пытаюсь создать скрипт, который ищет список адресов, приведенных в форме для адресов электронной почты.Кто-нибудь может мне посоветовать, как это сделать?Есть ли альтернатива cURL?Я пытался сделать это с помощью file_get_contents, но скрипт анализирует только последний URL-адрес, указанный в форме: когда я вводю, например, два URL-адреса в форму, первый "print_r (" show current_url: ". $ Current_url); пуст идля второго он показывает содержание страницы (URL) (без картинок).

Я спрашивал на разных форумах, но не получил ответа. Действительно оценит вашу помощь.

Спасибо

$urls = explode("\n", $_POST['urls']); 

$db = new mysqli('localhost', 'root', 'root', 'urls');  

if (mysqli_connect_errno()) {
    echo 'Błąd: ';
    exit;
}


for ($i=0; $i<count($urls); $i++){

print_r("show link:". $urls[$i]."<br>");

$current_url = file_get_contents($urls[$i]);
print_r("show current_url:". $current_url); 


    preg_match( "/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $current_url, $email);//email


    print_r ("show email:".$email[0]);


    $query = "INSERT INTO urle set adres = '$email[0]' "; 

    $result = $db->query($query);




}

if ($query) {
    echo $db->affected_rows ."pozycji dodano.";
} else {
    echo mysql_errno() . ":" . mysql_error() .   "Wyst&#261;pi&#322; b&#322;&#261;d przy dodawaniu urli  ";
}

$db->close();

?>

РЕДАКТИРОВАТЬ: я пытался с curl. Var_dump ($ email); показывает: массив (0) {} Сценарий теперь отображает все URL-адреса, указанные в форме в браузере, но preg_match не работает, поэтому он не извлекает адреса электронной почты.

<?php


$urls = explode("\n", $_POST['urls']); 

$db = new mysqli('localhost', 'root', 'root', 'linki');  

if (mysqli_connect_errno()) {
    echo 'Błąd: ';
    exit;
}


for ($i=0; $i<count($urls); $i++){

    $url = $urls[$i];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
$output = curl_exec($ch);

preg_match( "/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $output, $email);//email
var_dump($email);

    $query = "INSERT INTO urle set adres = '$email[0]' "; 
    $result = $db->query($query);


curl_close($ch);



}//

if ($result) {
    echo $db->affected_rows ."pozycji dodano.";
} else {
    echo mysql_errno() . ":" . mysql_error() .   "Wystąpił błąd przy dodawaniu urli  ";
}

$db->close();

?>  

Ответы [ 2 ]

0 голосов
/ 24 октября 2011

Хорошо, я исправил это !!!:)

Вот код:

for ($i=0; $i<count($linki); $i++){

$url = $linki[$i];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result =curl_exec($ch);
curl_close($ch);

preg_match("/[-a-z0-9\._]+@[-a-z0-9\._]+\.[a-z]{2,4}/", $result, $email);//email
print_r($email);

    $zapytanie = "INSERT INTO urle set adres = '$email[0]' "; 
    $wynik = $db->query($zapytanie);





}
0 голосов
/ 24 октября 2011

Есть ли альтернатива cURL?

file_get_contents, который не выдает никаких сообщений об ошибках (если не вызывается error_reporting), и который часто блокируется, если не установлено ini_set("user_agent", ...).

В качестве альтернативы HttpRequest в более новых установках PHP.

Все еще curl не сложен в использовании. Руководство полно примеров.

первый "print_r (" show current_url: ". $ Current_url); пуст

Никто не может сказать. Это ваша обязанность отладить это (тем более, что вы не упомянули затронутый URL в своем вопросе). Используйте curl или httprequest.

...