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.
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.
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
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
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é.
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.
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");