PHP file_get_contents devolviendo falso

2 minutos de lectura

avatar de usuario
Sr. Fldig

Tal vez he estado sentado aquí demasiado tiempo mirando esto, pero ¿POR QUÉ lo haría? file_get_contents devolver false ¿aquí? ¿He cortado y pegado la URL y funciona bien?

$url = "http://jobs.github.com/positions.json?search=" . $as_any . "&location=" .       $location;
// URL contains http://jobs.github.com/positions.json?search=Project Manager&location=London
var_dump($url);
$json = file_get_contents($url);
var_dump($json);
$results = json_decode($json, TRUE);
var_dump($results);
exit;

EDITAR:

he comprobado allow_url_fopen y definitivamente está encendido.

  • posible duplicado del Problema al obtener contenidos/archivos usando file_get_contents de url o Problema en la codificación geográfica inversa

    – mario

    10 de febrero de 2013 a las 20:01

  • Ninguna de las respuestas allí parece aplicarse a esta pregunta.

    – Barmar

    10 de febrero de 2013 a las 20:21

Prueba esto:

$query = http_build_query(array('search'=>$as_any, 'location'=>$location));
$url = "http://jobs.github.com/positions.json?" . $query;

El problema es que no estaba codificando en URL el término de búsqueda, que contiene un espacio. La solicitud devolvía un error 400 del servidor, que habría notado si tuviera habilitado el informe de errores.

  • En resumen, te amo… Intenté hacer $url = urlencode(….) pero no pareció funcionar, ¿cuál es la diferencia?

    – Sr. Fldig

    10/02/2013 a las 20:35

  • Eso codificará todos los caracteres delimitadores en la URL, por lo que no se reconocerán como delimitadores.

    – Barmar

    10 de febrero de 2013 a las 20:37

Es posible que deba habilitar allow_url_fopen en su php.ini

http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

De la documentación:

Esta opción habilita los envoltorios fopen con reconocimiento de URL que permiten acceder a objetos de URL como archivos.

Es posible que su servidor le impida abrir un archivo ubicado en una URL usando file_get_contents.

  • Actualmente /etc/php.ini tiene allow_url_fopen = Activado

    – Sr. Fldig

    10 de febrero de 2013 a las 20:04

  • si file_get_contents() devuelve falso, entonces no podría leer el archivo. Si el valor es NULL, la función en sí está deshabilitada.

    – Nikhil Mark

    7 de noviembre de 2017 a las 8:36

  • Parece que no es cierto @NikhilMk, obtuve falso pero después de habilitar obtuve los datos

    – Fanky

    26 de septiembre de 2021 a las 8:27

Probablemente allow_url_fopen en su php.ini: http://php.net/manual/en/filesystem.configuration.php

Necesita ser permitido.

En mi caso reemplazar archivo_obtener_contenido() en esta sencilla función

function get_content($URL){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $URL);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

A veces si file_get_contents devolver falso (no encontrado) deberías ver si la url es codificado.

ejemplo:

http://test.net/демо/

Debiera ser:

https://test.net/%D0%B4%D0%B5%D0%BC%D0%BE/

¿Ha sido útil esta solución?