Curl For Loop Read Only - последний элемент массива - PullRequest
2 голосов
/ 08 декабря 2011

Ниже приведен код, который я использую.

Он читает ссылки из текстовой области, а затем получает исходный код и, наконец, фильтрует метатеги.Однако он отображает только последний элемент в массиве.

Так что, если, например, я поместил 3 веб-сайта в текстовую область, он будет читать только последний, остальные просто будут показаны пустыми.

Потратил часы, пытаясь это сделать, пожалуйста, помогите.

function file_get_contents_curl($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

if(isset($_POST['url'])){
    $url = $_POST['url'];
    $url = explode("\n",$url);
    print_r($url);
    for($counter = 0; $counter < count($url); $counter++){
        $html = file_get_contents_curl($url[$counter]); // PASSING LAST VALUE OF ARRAY
        $doc = new DOMDocument();
        @$doc->loadHTML($html);
        $nodes = $doc->getElementsByTagName('title');
        $title = $nodes->item(0)->nodeValue;
        $metas = $doc->getElementsByTagName('meta');
        for ($i = 0; $i < $metas->length; $i++){
            $meta = $metas->item($i);
            if($meta->getAttribute('name') == 'description')
                $description = $meta->getAttribute('content');
            if($meta->getAttribute('name') == 'keywords')
                $keywords = $meta->getAttribute('content');
        }
        print
        ('
        <fieldset>
            <table>
                <legend><b>URL: </b>'.$url[$counter].'</legend>
                <tr>
                    <td><b>Title:</b></td><td>'.$title.'</td>
                </tr>
                <tr>
                    <td><b>Description:</b></td><td>'.$description.'</td>
                </tr>
                <tr>
                    <td><b>Keywords:</b></td><td>'.$keywords.'</td>
                </tr>
            </table>
        </fieldset><br />
        ');
    }
}                            

1 Ответ

4 голосов
/ 08 декабря 2011

Это была маленькая раздражающая ошибка, которую нужно было найти, но вот (смехотворно простое) решение:

Ваши URL добавляются к пробелам, для всех, кроме последнего URL, поэтому вам нужно его обрезать, вы можете сделать следующее:

curl_setopt($ch, CURLOPT_URL, trim($url));

Если доступно, вы могли бы просто использовать file_get_contents() (все еще требует, чтобы вы урезали URL).

Вторая проблема заключается в том, что если нет данных meta, то используются старые переменные (из предыдущего цикла), поэтому перед самым концом основного цикла после print() добавьте следующее:

unset($title,$description,$keywords);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...