2015-06-25 16 views
8

Background:Chiama per URLFetch riuscita con errore di applicazione 5 per url x

Sto usando Google App Engine e sto avendo uno strano bug nel mio sito cingolato.

Ho un back-end che esegue automaticamente la scansione di un sito ogni notte. Questo è istigato da un'attività spinto a un pushQueue a causa dei limiti di tempo in php.

Problema:

Quando eseguo manualmente lo script che crea l'attività, l'attività viene completata come previsto senza errori. Tuttavia, quando cron lancia l'attività, ottengo il seguente errore.

Chiama per URLFetch riuscita con errore di applicazione 5 per url x

Codice:

function url_get_contents ($Url) { 
    global $retry; 
    try { 
     if (!function_exists('curl_init')){ 
      die('CURL is not installed!'); 
     } 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $Url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     $output = curl_exec($ch); 
     curl_close($ch); 
     return $output; 
    } catch (Exception $e) { 
     syslog(LOG_INFO, 'Caught exception: ', $e->getMessage()); 
     if($retry > 0){ 
      $retry -= 1; 
      return url_get_contents($Url); 
     } 
     else{ 
      return null; 
     } 
    } 
} 

Grazie a syslog posso vedere che il $ url va bene, che mi sta facendo impazzire come funziona quando lo stesso identico script viene avviato manualmente non tramite cron.

Come posso risolvere questo?

Grazie in anticipo.

+1

Verificare se il php ha corretta configurazione per l'ambiente CLI. – Inurosen

+1

Ah, potrebbe essere, non credo che tu sappia come controllare questo su GAE? Ho uno php.ini, ma come faccio a sapere se è quello che usa il cli php? – Grushton94

+1

Perché non utilizzare file_get_contents() - che utilizza anche il gestore URLFetch, ma ti dirà se il problema è cURL o meno. – Tom

risposta

1

EDIT: arricciatura è sicuramente installato, come hai una dichiarazione che lo controlla in primo luogo, quindi la mia risposta non sta più.

L'elenco di errori CURL http://curl.haxx.se/libcurl/c/libcurl-errors.html indica che l'errore 5 è CURLE_COULDNT_RESOLVE_PROXY. In qualche modo il tuo ricciolo non può accedere al web, probabilmente.

Probabilmente il ricciolo non è abilitato per l'ambiente CLI.

Controllare la configurazione qui:

php5/  phpmyadmin/ 
[email protected]:~# cd /etc/php5 
[email protected]:/etc/php5# ls 
apache2 cli conf.d mods-available 
[email protected]:/etc/php5# cd cli/ 
[email protected]:/etc/php5/cli# ls 
conf.d php.ini 
[email protected]:/etc/php5/cli# cd conf.d 
[email protected]:/etc/php5/cli/conf.d# ls 
10-pdo.ini 20-gd.ini  20-mssql.ini 20-mysql.ini  20-pdo_mysql.ini 
20-curl.ini 20-mcrypt.ini 20-mysqli.ini 20-pdo_dblib.ini 
[email protected]:/etc/php5/cli/conf.d# 
4

"errore di applicazione 5" significa che è stata superata la scadenza richiesta.

è possibile aumentare il termine per la richiesta utilizzando l'opzione CURLOPT_TIMEOUT, in modo da codice potrebbe essere simile:

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $Url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 60); // 60 second timeout 
    $output = curl_exec($ch);