nefunkční curl v cronu

nefunkční curl v cronu

autor Šimon Zajíček -
Počet odpovědí: 3

Zdravím všechny,

napsal jsem si vlastní plugin, ale narazil jsem na jednu takovou ošemetnost.

Pokud mi cron (moodle/admin/cli/cron.php) správně projde tasky všech modulů a pluginů. Tak v tom mém se zasekne na curl. 

Ten správně dojede k mému pluginu, načte classes/task ... a načte i knihovnu, ze které ten task čerpá a jede dokud nedojde k onomu curl a přejede to dál, jako by tam nic nebylo, ani nevrátí zprávu o neúspěchu, nebo cokoliv, prostě prázný response.

Co je na tom opravdu zajímavé je to, že kdekoliv jinde tento kód funguje a to jsem ho zkoušel "pěkně na prasáka" přidat i do samotného ... moodle/admin/cli/cron.php, tak se to v pořádku zavolá, ale v tom tásku to úplně odignoruje.

Na serveru samozřejmě curl rozšíření nainstalované je, jinak by to nefungovalo všude jinde.

Budu rád, za každé naťuknutí správným směrem.


A trocho kódu...

echo "sem to v dojde, url je platná";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 90); //timeout in seconds
    $response = curl_exec($ch);

    curl_close ($ch);

    if(!$response){

echo "spadne to sem do prázdné response, ale nevrátí mi ani žádný error";
        return curl_error($ch);
    }

    try {
        $xml = simplexml_load_string($response);
        return json_decode(json_encode($xml));
    } catch (Exception $e) {
        return $e->getMessage();
    }



Počet hodnocení: -
V odpovědi na Šimon Zajíček

Re: nefunkční curl v cronu

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři

No a jakou hodnotu má $response? Zkuste

$response = curl_exec($ch);
curl_close ($ch);
print_object($response); die();

p.s. Jako purista nemohu nezmínit, že Moodle má svůj vlastní wrapper ve třídě \curl() (lib/filelib.php) a doplňkům se doporučuje používat jej namísto nízkoúrovňového curl_init(). Jedním z viditelných rozdílů je, že tato instance respektuje související nastavení v administraci Moodle, např. proxy nebo blokované IP adresy apod.

V odpovědi na David Mudrák

Re: nefunkční curl v cronu

autor Šimon Zajíček -
Děkuji, vyzkouším moodlovský wrapper.
Nakonec to bylo ještě blbější, než jsem čekal. Cestku k URL API jsem skládal ze záznamů z databáze a stalo se to, že před URL mi uživatelé vložili mezeru. Zatímco v na testovacím prostředí a v testovacích skriptech ta mezera nebyla. Je ale zajímavé, že $response nebylo ani NULL, prostě to vůbec nedefinovalo.

Každopádně děkuji za podporu a zdravím.