Analitycs

пятница, 9 сентября 2011 г.

Проблема в PHP+cURL+CURLOPT_POSTFIELDS - после обновления

Обновив PHP и cURL поймал забавность - старая конструкция, нормально работавшая несколько месяцев

 $data = array(
  'id' => $id,
 );
 
 $ch = curl_init();

 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&', $data));

 $result = curl_exec($ch);

 curl_close($ch);
  
 return json_decode($result);

перестала отправлять в POST данные.

Покурив маны, нашел ошибку в коде - не нужно implode на массив

 $data = array(
  'id' => $id,
 );
 
 $ch = curl_init();

 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

 $result = curl_exec($ch);

 curl_close($ch);
  
 return json_decode($result);

Нет, ну понятно - как бы косяк, но тогда вопрос - ПОЧЕМУ ЭТО РАБОТАЛО?

P.S. "Чем дальше в лес - тем толще партизаны" (с) Ненавижу...

3 комментария:

  1. Оно у тебя не могло работать.

    по тому что нужно было приводить это все в такой вид: "ключ массива"."="."значение массива"."&"

    а функция implode работает только со значениями, и не подставляет ни ключа ни равно...

    ОтветитьУдалить
    Ответы
    1. Парадокс в том что - РАБОТАЛО, так как на этот лохматой давности кусок кода даже внимания не обращал.

      А вот после обновления - вылезло

      Удалить
  2. А ещё значений надо делать urlencode()

    ОтветитьУдалить