如何将curl_exec添加到数据库中

时间:2012-07-16 03:57:01

标签: php mysql curl

我想使用PHP和cURL访问$ i网站并将其源代码添加到数据库中。

  function curl_grab_page($site,$proxy,$proxystatus,$post)
  {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    if ($proxystatus == 'on') {
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
        curl_setopt($ch, CURLOPT_PROXY, $proxy);
    }
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0");
    curl_setopt($ch, CURLOPT_URL, $site);
    ob_start();      
    return curl_exec ($ch); 
    ob_end_clean();
    curl_close ($ch);
}

所以我使用这个函数来获取$ post发送的网站。如你所见,它返回curl_exec($ ch)。现在我想把curl_exec($ ch)放在数据库中。我该怎么办?

$ sql =“INSERT INTO已抓取(website_source)VALUES('$ str')”;

这不起作用(返回die();函数,在这种情况下,它显然是一个空白页面)。 Plz的帮助。我不知道如何保存网站内容。 Preg_match也不适用于curl_exec。 :/

2 个答案:

答案 0 :(得分:0)

假设你实际上是通过curl抓取整个页面并存储在一个字符串中,你需要通过调用mysql_real_escape_string()来包装它,以逃避所有会搞乱SQL查询的事情,比如可能是引号和分号在页面源...

$str = mysql_real_escape_string($str); 
祝你好运。你可能需要调整你的卷曲以获得你认为你得到的东西......

答案 1 :(得分:0)

在curl响应中,设置对变量的响应,以便您可以进行故障排除:

$output = curl_exec($ch);
$info = curl_getinfo($ch);

然后你可以查看$ output和$ info并确定返回的内容。

就插入数据库而言,您将在函数中返回$ output,并且调用代码将连接到数据库并执行插入查询。您可能希望将website_source列的字段类型设置为TEXT。

// get connection to database

// iterate through list of websites to be crawled

// crawl site (call your function)
$page = curl_grab_page(...);

// check if content valid
if...blah

// insert into database
$query = sprintf("INSERT INTO crawled ( website_source ) VALUES '%s'",
        mysql_real_escape_string($page));

mysql_query($query);

你可能想用try catch包围并做一些错误处理。 msyql_real_escape_string用于防止sql注入,但我不确定你是否还需要在插入之前使用addslashes($ page)以防万一你遇到mysql失败。