За последние 24 часа нас посетили 17972 программиста и 1827 роботов. Сейчас ищут 1195 программистов ...

Ошибка при работе с CURL

Тема в разделе "Прочие вопросы по PHP", создана пользователем Astat, 13 дек 2010.

  1. Astat

    Astat Активный пользователь

    С нами с:
    13 дек 2010
    Сообщения:
    2
    Симпатии:
    0
    function post_content($url, $postdata) { //в этой функции устанавливаю опции для post запроса
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_ENCODING, "");
    curl_setopt($ch, CURLOPT_USERAGENT, $uagent);
    curl_setopt($ch, CURLOPT_TIMEOUT, 120);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header');

    $content = curl_exec($ch);
    $err = curl_errno($ch);
    $errmsg = curl_error($ch);
    $header = curl_getinfo($ch);
    curl_close($ch);
    }

    function read_header($ch, $string) //сдесь парсим входящие куки
    {
    global $cookiearr;
    global $ch;

    $length = strlen($string);
    if(!strncmp($string, "Set-Cookie:", 11))
    {
    $cookiestr = trim(substr($string, 11, -1));
    $cookie = explode(';', $cookiestr);
    $cookie = explode('=', $cookie[0]);
    $cookiename = trim(array_shift($cookie));
    $cookiearr[$cookiename] = trim(implode('=', $cookie));
    }
    $cookie = "";
    if(trim($string) == "")
    {
    foreach ($cookiearr as $key=>$value)
    {
    $cookie .= $key."=".$value.";";

    }
    curl_setopt($ch, CURLOPT_COOKIE, $cookie); // при попытке выставить распарсенные куки вылетает ошибка
    }
    return $length;
    }
    не могу понять что не нравиться CURLOPT_COOKIE, $cookie перед отправкой смотрел через var_dump() они такие же как сервер их устанавливает с помощью заголовка set-cookie.
    Warning: curl_setopt() expects parameter 1 to be resource, null given in
    Если кто может помочь плз тыкните пальцем, буду очень признателен.
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Переменная $ch создаётся внутри функции post_content() , соответственно только там она и доступна. Внутри функции read_header() просто нет этой переменной.
     
  3. Astat

    Astat Активный пользователь

    С нами с:
    13 дек 2010
    Сообщения:
    2
    Симпатии:
    0
    Слушай, спасибо тебе огромное, обьявил ее глобальной и все заработало.