0

PHPとcURLを使用して$iWebサイトにアクセスし、それらのソースをデータベースに追加したいと思います。

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

したがって、この関数を使用して、Webサイトを$postで送信します。ご覧のとおり、curl_exec($ ch)を返します。ここで、curl_exec($ ch)をデータベースに入れたいと思います。どうすればいいですか?

$ sql = "INSERT INTOクロール(website_source)VALUES('$ str')";

これは機能しません(die();関数を返します。この場合は明らかに空白のページです)。Plzヘルプ。Webサイトのコンテンツを他にどのように保存できるかわかりません。Preg_matchはcurl_execでも機能しません。:/

4

2 に答える 2

0

実際にcurlを介してページ全体を取得し、文字列に格納していると仮定すると、mysql_real_escape_string()の呼び出しでページをラップして、ページに含まれる可能性のある引用符やセミコロンなど、SQLクエリを台無しにするすべてのものをエスケープする必要があります。ソース...

$str = mysql_real_escape_string($str); 

幸運を。あなたはあなたがあなたが同様に得ていると思うものを得るためにあなたのカールを微調整する必要があるかもしれません...

于 2012-07-16T04:08:02.390 に答える
0

カール応答で、トラブルシューティングできるように変数への応答を設定します。

$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インジェクションから保護するために機能しますが、mysqlが失敗した場合に備えて、挿入する前にaddslashes($ page)も使用する必要があるかどうかはわかりません。

于 2012-07-16T04:20:18.243 に答える