Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP: curl_setopt nefunguje na localhostu

Mám kód:

$conn = curl_init();
curl_setopt($conn, CURLOPT_URL, $url);
curl_setopt($conn, CURLOPT_HEADER, 0);
curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
$return = ((array) (json_decode(curl_exec($conn))));

Tento kód na serveru funguje bez problémů. Já jsem ovšem dostala za úkol aplikaci upravit a u mne na lokále nefungue. $return je prázdné pole.

curl_exec($conn)

vrátí

{"result":true,"data":"{\"subuser_id\":123,\"name\":\"Jan Cerveny\",\"group_id\":9,\"email\":\"xyz@gmail.com\"}"}

pokud do json_decode dám natvrdo to, co vrátí curl_exec, tak je vše OK:
$return = (array) json_decode('{"result":true,"data":"{\"subuser_id\ ":123,\"name\":\"Jan Cerveny\",\"group_id\":9,\"email\":\"xyz@gmail.com \"}"}');

V čem je problém? Musí být někde něco nastaveno v konfiguraci curl, php.ini apod.?
Curl je zapnuto a funguje, jen nefunguje zpracování výsledku pomocí json_decode.

Změna předmětu, původně: curl_setopt (host)

Předmět Autor Datum
Zkus použit curl_error, jestli vrátí chybu? http://www.php.net/manual/en/function.curl-error.p hp nový
host 31.05.2012 18:56
host
Nevrátí chybu nový
Anicka 31.05.2012 23:08
Anicka
UTF-8 BOM hlavička je zlo - odstráň je pred volaním funkcie json_decode. nový
los 31.05.2012 22:00
los
Bohužel nepomohlo, po úpravě $conn = curl_init(); curl_setopt($conn, CURLOPT_URL, $url); curl_setop… nový
Anicka 31.05.2012 23:29
Anicka
Nieco sa da vycitat aj tu: http://php.tonnikala.org/manual/en/function.json-d ecode.php nový
KiloViktor 31.05.2012 23:44
KiloViktor
Tak jsem debugem zjistila, že UTF-8 BOM se na začátek dala 2x(!), proto odstranění nefungovalo. Když… nový
Anicka 01.06.2012 00:08
Anicka
Ak je tá hlavička 2x priamo v odpovedi servera, tak potom je to otázka na toho, čo programoval ten s… poslední
los 01.06.2012 22:40
los

Bohužel nepomohlo, po úpravě

$conn = curl_init();
curl_setopt($conn, CURLOPT_URL, $url);
curl_setopt($conn, CURLOPT_HEADER, 0);
curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
$pom = curl_exec($conn);
if (substr($pom, 0,3) == pack('CCC',0xef,0xbb,0xbf)) { 
    $pom = substr($pom, 3); 
}
$return = (array) json_decode($pom);

taky vytvoří prázdné pole $return

Tak jsem debugem zjistila, že UTF-8 BOM se na začátek dala 2x(!), proto odstranění nefungovalo. Když jsem to přepsala tak, aby se UTF-8 BOM odstraňovala ve while cyklu dokud tam je, tak to začalo fungovat:-D. Zajímalo by mne, čím může být způsobeno, že se tam dostala 2x?

Ak je tá hlavička 2x priamo v odpovedi servera, tak potom je to otázka na toho, čo programoval ten server. Môže to byť napr. spôsobené tým, že jednu hlavičku obsahuje súbor so šablónou, ktorá sa posiela na výstup, a druhú samotný reťazec s JSON-om.

Zpět do poradny Odpovědět na původní otázku Nahoru