从表单中解析多个URL

时间:2011-10-23 21:39:55

标签: php parsing curl file-get-contents

我正在尝试制作一个脚本,该脚本会搜索电子邮件地址表单中提供的网址列表。谁能建议我怎么做?有没有替代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();

?>

编辑: 我试过卷曲。后续代码var_dump($电子邮件);显示:array(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 :(得分:0)

  

cURL有替代品吗?

file_get_contents,它不会向您提供任何错误消息(除非引发error_reporting),并且除非设置了ini_set("user_agent", ...),否则通常会被阻止。

或者在较新的PHP安装上HttpRequest

仍然curl不难使用。手册里有很多例子。

  

第一个“print_r(”show current_url:“。$ current_url);是空的

没有人能说出来。调试它是你的职责(特别是因为你没有在你的问题中提到受影响的网址)。使用curl或httprequest。

答案 1 :(得分:0)

好的,我已经修好了!!! :)

以下是代码:

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);





}