2012-07-13 11 views
11

El siguiente código es para consultar un diccionario de sinónimos en línea para un motor de búsqueda que estoy creando como un proyecto de la universidad, pero estoy teniendo problemas con file_get_contents"no se pudo abrir la corriente" errores. Cuando envío una palabra que el diccionario de sinónimos no reconoce, arroja un error. Estoy tratando de escribir un fragmento de código que hará ignorar el error y continuar sin la información.Ignorar errores en file_get_contents Contenedor HTTP?

$thesaurus_search="http://words.bighugelabs.com/api/2/0089388bb57f/".$this->formatted_query."/php"; 
$result_thesaurus=file_get_contents($thesaurus_search); 

me trataron:

if (file_get_contents($thesaurus_search) != NULL) 
{ // do stuff } 

... pero no su trabajo, ya que sigue devolviendo algún tipo de cadena.

¿Qué puedo hacer para manejar este tipo de casos?

+1

¿Qué es exactamente lo que volver cuando hay un error? Algunos html? xml? json? Tendría que analizar los datos devueltos para verificar los códigos de error; es poco probable que una API simplemente no devuelva nada. –

+0

* "Estoy tratando de escribir un fragmento de código que ignorará el error y simplemente continuará sin la información" *. ¿Cómo procedería sin la información? – netcoder

+0

Tal vez debería ser un poco más específico, este código es parte de una clase, la información que devuelve no es intrínseca al producto final, es solo una ventaja. Entonces, si file_get_contents devuelve un error (porque no coincide con la palabra) quiero salir de la clase por completo y no devolver ningún código. – shanahobo86

Respuesta

19

Si no desea file_get_contents reportar errores HTTP como advertencias PHP, entonces este es el limpia manera de hacerlo, usando un contexto de secuencia (hay algo específicamente para ese):

$context = stream_context_create(array(
    'http' => array('ignore_errors' => true), 
)); 

$result = file_get_contents('http://your/url', false, $context); 
+0

Gracias Netcoder eso es mucho mejor, agradezco su ayuda. También dejaré de golpear mi computadora con llaves :) – shanahobo86

+0

¡Muchas gracias! Lo encontré en el manual después de probarlo mucho, pero no me resultaba obvio que una opción de contexto podría ayudar. Sería bueno si esto estuviera en la página file_get_contents. – Errol

+0

esta es una de esas cosas que me han estado molestando por un tiempo, pero no me molesté hasta ahora. '@' debería funcionar pero no es estúpido. "** PHP admite un operador de control de errores: el signo at (@). Cuando se antepone a una expresión en PHP, cualquier mensaje de error que pueda ser generado por esa expresión será ignorado. **" parece bastante simple pero es una mentira. – billynoah

0

Si he entendido correctamente que están tratando de hacer una llamada a la API a http://words.bighugelabs.com. Necesita cURL para lograr esto, así que si tiene cURL instalado, entonces este código funcionará para usted.

$ch = curl_init(); 
$thesaurus_search="http://words.bighugelabs.com/api/2/0089388bb57f/".$this->formatted_query."/php"; 
$options = array(); 
$options[CURLOPT_URL] = $thesaurus_search; 
$options[CURLOPT_RETURNTRANSFER] = true; 
curl_setopt_array($ch, $options); 

// Print result. 
print_r(curl_close($ch)); 
+3

* "Necesita cURL para lograr esto" *, no, no lo hace. – netcoder

1

La solución más sencilla si estás bien con sólo el rescate de, sería:

if (empty($thesaurus_search)) { 
    return; 
} else { 
    //process with value 
} 

para manejar más plenamente, mirando el API, parece que se debe comprobar la response header , por ejemplo:

$thesaurus_search="http://words.bighugelabs.com/api/2/0089388bb57f/".$this->formatted_query."/php"; 
$result_thesaurus=file_get_contents($thesaurus_search); 
if ($http_response_header[0] = 'HTTP/1.1 200 OK') { 
    //code to handle words 
} else { 
    // do something else? 
} 
+0

Considerando que 'file_get_contents' ya devuelve' false' en caso de error, no creo que sea necesario. – netcoder

-1

Usted puede tratar de rizo:

function curl_get_contents($url) { 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 2); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $content = curl_exec($ch); 
    curl_close($ch); 
    return $content; 
} 
Cuestiones relacionadas