0

PHP の cURL を使用して、さまざまな URL からタグ情報を取得しています。リクエストが機能する場合もありますが、まったく機能しない場合もあります。コードが機能しない理由はありますか? (simple_html_dom も使用していることに注意してください):

$webpage = 'http://www.some_url.com';

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $webpage);  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);

$str = curl_exec($curl);  
curl_close($curl);  

$html = '';

if( !empty($str) )
{
    require_once( 'simple_html_dom.php');

    $html= str_get_html($str);
    $element = $html->find('h1', 0);
    $webpage_name = strip_tags($element);

    $item = $html->find('meta[name=description]', 0);
    $description =  $item->content;
}

// save $description to database
// save $webpage_name to database

私が試した URL の約半分では、説明と webpage_name がデータベースに保存されていますが、残りの半分では保存されておらず、スクリプトが停止するだけです。つまり、ユーザーが自分の Web サイトに URL を送信すると、URL が自分のサイトにアップロードされている間、進行状況バーが表示されます。次に、進行状況バーが消え、URL の送信が完了すると、ユーザーが確認できるように Web ページに URL が表示されます。厄介な URL の場合、プログレス バーは表示されなくなりますが、リンクはページに表示されず、データベースには何も保存されません。私は何が欠けていますか?

4

3 に答える 3

0

私のエラー ログには、「未定義関数 mb_detect_encoding() の呼び出し」と表示されています。この関数では、mbstring 拡張が有効になっている必要があります (simple_html_dom.php で必要です)。MAMPにはデフォルトでこれがインストールされているため、開発サーバーでは機能しますが、本番サーバーでは機能しません。私は Linux 実稼働サーバーで mbstring を有効にするように要求しました。これが実際に問題であったかどうかを全員に知らせます。同じ問題を抱えている人がオンラインでいくつかの投稿を見たので、これが多くの人に役立つことを願っています.

于 2012-08-05T16:18:40.090 に答える
0

curl_getinfo電話をかける前に使ってみてくださいcurl_close。他の多くの有用な情報に加えて、リクエストで何が起こっているかを知らせる HTTP ステータス コードが表示されます。これにより、必要な答えが得られるはずです...そのCURLOPT_FAILONERROR設定を必ず削除してください(またはに設定してくださいfalse)。

于 2012-08-05T04:59:47.677 に答える