web-dev-qa-db-fra.com

PHP file_get_contents ne fonctionne pas sur localhost

Je travaille sur mon site Web à partir de localhost (http://172.16.65.1/), un serveur MAMP sous OSX.
Je souhaite charger des fichiers JSON à partir de Google et quelques tests simples montrent que j'ai un problème ici.

echo file_get_contents("http://www.google.com"); // FAILS
// PHP log: [07-Dec-2011 23:09:21] PHP Warning:  file_get_contents(http://www.google.com) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: Host is down in /Applications/MAMP/htdocs/-tests/get-json.php on line 3
echo file_get_contents("http://www.yahoo.com"); // FAILS

// echo file_get_contents("http://localhost"); // WORKS
// echo file_get_contents("http://172.16.65.1/"); // WORKS - My MAMP server

Que puis-je faire à ce sujet? Cela fonctionne bien sur mon serveur de fournisseurs d’hôte.

9
FFish

De la documentation pour file_get_contents :

Une URL peut être utilisée comme nom de fichier avec cette fonction si les wrappers fopen ont été activés. Voir fopen () pour plus de détails sur la manière de spécifier le nom de fichier. Reportez-vous aux protocoles et wrappers pris en charge pour obtenir des liens vers des informations sur les capacités des différents wrappers, des notes sur leur utilisation et des informations sur les variables prédéfinies qu'ils peuvent fournir.

Vérifiez votre php.ini pour que allow_url_fopen soit défini sur on.

EDIT:

Je n'avais pas remarqué que vous pouviez utiliser file_get_contents localement. Je pense donc que cela pourrait avoir quelque chose à voir avec votre firewall settings.

Essayez également de définir le user_agent dans votre php.ini si ce n’est déjà fait.

5
Cyclonecode

Vous devez également archiver le fichier PHP.ini

extension = php_openssl.dll

est activé ou non, sinon activez simplement cela en le supprimant; signe

allow_url_fopen = on
11
Niranjan

Essayez cette fonction à la place de file_get_contents ():

<?php

function curl_get_contents($url)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

Il peut être utilisé comme file_get_contents (), mais utilise cURL.

Installez cURL sur Ubuntu (ou un autre système d'exploitation de type Unix avec aptitude):

Sudo apt-get install php5-curl
Sudo /etc/init.d/Apache2 restart

Voir aussi cURL

3
Adelmar

Cela peut être un paramètre dans votre fichier php.ini. Il y a un paramètre pour allow_url_fopen qui active/désactive la possibilité d'ouvrir des fichiers distants à partir de php. Pour des raisons de sécurité, cette option est généralement désactivée par défaut. Vous pouvez l'activer dans votre php.ini en ajoutant la ligne suivante:

allow_url_fopen = 1

Encore une fois, soyez conscient des problèmes de sécurité lors de l'utilisation de cette fonctionnalité.

http://php.net/manual/en/filesystem.configuration.php

3
dchrastil

Dans le second cas, vous essayez d'ouvrir un fichier nommé localhost dans le dossier actuel, qui n'existe pas et génère donc une erreur. Utilisez http: // localhost à la place. Et pour que cela fonctionne, vous devez définir allow_furl_open.

1
CodeCaster

J'utilisais file_get_contents de cette façon: file_get_contents (" https://api.Twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name= ". Screen screen. " & count = 5 ");

Et cela ne fonctionnait pas, alors j’ai remplacé https par http et ensuite cela fonctionne bien.

file_get_contents("http://api.Twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=".$screenname."&count=5");
0
karambir