OSX上のMAMPサーバーであるlocalhost(http://172.16.65.1/)から自分のWebサイトで作業しています。
GoogleからJSONをロードしたいのですが、いくつかの簡単なテストで、ここで問題が発生していることがわかりました。
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
これについて私は何ができますか?ホストプロバイダーサーバーでは正常に動作します。
file_get_contents
のドキュメントから:
Fopenラッパーが有効になっている場合は、この関数でURLをファイル名として使用できます。ファイル名の指定方法の詳細については、fopen()を参照してください。さまざまなラッパーが持つ機能に関する情報、それらの使用法に関する注記、およびそれらが提供する可能性のある事前定義された変数に関する情報へのリンクについては、サポートされるプロトコルとラッパーを参照してください。
php.ini
をチェックインして、 allow_url_fopen
がon
に設定されるようにします。
編集:
実際にローカルでfile_get_contents
を使用できることに気づかなかったので、これはfirewall settings
と関係があるのではないかと考えています。
また、まだ行っていない場合は、user_agent
にphp.ini
を設定してみてください。
PHP.ini
ファイルもチェックインする必要があります
extension = php_openssl.dll
有効かどうか。そうでない場合は、;を削除して有効にします。符号
allow_url_fopen = on
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;
}
File_get_contents()と同じように使用できますが、cURLを使用します。
Ubuntu(または適切なUNIXライクなオペレーティングシステム)にcURLをインストールします。
Sudo apt-get install php5-curl
Sudo /etc/init.d/Apache2 restart
参照 cURL
これは、php.iniファイルの設定である可能性があります。 phpからリモートファイルを開く機能を有効/無効にするallow_url_fopenの設定があります。セキュリティ上の理由から、これは通常デフォルトで無効になっています。次の行を追加することで、php.iniで有効にできます。
allow_url_fopen = 1
繰り返しになりますが、この機能を使用するときはセキュリティ上の懸念に注意してください。
2番目のファイルでは、現在のフォルダーにlocalhostという名前のファイルを開こうとしていますが、このファイルは存在しないため、エラーがスローされます。代わりに http:// localhost を使用してください。そして、それを機能させるには、allow_furl_openを設定する必要があります。
私にとっての問題はfile_get_contents
は動作しませんでした https://domain.test.loc (localhostに解決されるドメイン)が動作しました http://domain.test.loc 。多分それは自己署名証明書が好きではありません。私は持っています allow_url_fopen
ONに設定し、拡張子= php_openssl.dll。
私はfile_get_contentsを次のように使用していました:file_get_contents( " https://api.Twitter.com/1/statuses/user_timeline.json? include_entities = true&include_rts = true&screen_name = "。$ screenname。"&count = 5 ");
そしてそれは機能していなかったので、httpsをhttpに変更し、その後はうまく機能しています。
file_get_contents("http://api.Twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=".$screenname."&count=5");