PHP & cUrl - проблемы с POST в цикле while - PullRequest
0 голосов
/ 24 декабря 2010

У меня есть цикл while с cUrl внутри.(Я не могу использовать curl_multi по разным причинам.) Проблема в том, что cUrl, похоже, сохраняет данные, которые он ПОСТАВЛЯЕТ после каждого обхода цикла.Например, если параметр X равен One во время первого цикла, а если два - во втором цикле, cUrl выдает: «One, Two».Это должно просто POST "Two". (Это несмотря на закрытие и снятие ручки curl.)

Вот упрощенная версия кода (с удалением ненужной информации):

<?php   
  while(true){

           // code to form the $url. this code is local to the loop. 
          // so the variables should be "erased" and made new for each 
         // loop through.

    $ch = curl_init();
    $userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';
    curl_setopt($ch,CURLOPT_USERAGENT, $userAgent);
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST,count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $html = curl_exec($ch);
    curl_close($ch);
    unset($ch);

    $dom = new DOMDocument();
    @$dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    $resultTable = $xpath->evaluate("/html/body//table");

           // $resultTable is 20 the first time through the loop,
           // and 0 everytime thereafter because the POSTing doesn't work right 
           //with the "saved" parameters. 

Что я здесь не так делаю?


РЕДАКТИРОВАТЬ

Майкл был прав.Мне нужно было сбросить $ fields / $ fields_string.Новые данные были объединены со старыми данными.

Хотя я не понимаю, почему это происходит.$ fields является локальной переменной в цикле. Не следует ли удалить его из стека после окончания цикла, а затем создать новый?

1 Ответ

0 голосов
/ 24 декабря 2010

Вы пытались напечатать $ fields_string и $ fields, чтобы увидеть их значения на каждой итерации цикла? Возможно, один из них не очищается. Поскольку вы используете curl_init / curl_close каждый раз, проблема, скорее всего, не в самом curl.

...