web-dev-qa-db-ja.com

PHP file_get_contentsはローカルホストでは機能しません

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

これについて私は何ができますか?ホストプロバイダーサーバーでは正常に動作します。

9
FFish

file_get_contents のドキュメントから:

Fopenラッパーが有効になっている場合は、この関数でURLをファイル名として使用できます。ファイル名の指定方法の詳細については、fopen()を参照してください。さまざまなラッパーが持つ機能に関する情報、それらの使用法に関する注記、およびそれらが提供する可能性のある事前定義された変数に関する情報へのリンクについては、サポートされるプロトコルとラッパーを参照してください。

php.iniをチェックインして、 allow_url_fopenonに設定されるようにします。

編集:

実際にローカルでfile_get_contentsを使用できることに気づかなかったので、これはfirewall settingsと関係があるのではないかと考えています。

また、まだ行っていない場合は、user_agentphp.iniを設定してみてください。

6
Cyclonecode

PHP.iniファイルもチェックインする必要があります

extension = php_openssl.dll

有効かどうか。そうでない場合は、;を削除して有効にします。符号

allow_url_fopen = on
11
Niranjan

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

3
Adelmar

これは、php.iniファイルの設定である可能性があります。 phpからリモートファイルを開く機能を有効/無効にするallow_url_fopenの設定があります。セキュリティ上の理由から、これは通常デフォルトで無効になっています。次の行を追加することで、php.iniで有効にできます。

allow_url_fopen = 1

繰り返しになりますが、この機能を使用するときはセキュリティ上の懸念に注意してください。

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

3
dchrastil

2番目のファイルでは、現在のフォルダーにlocalhostという名前のファイルを開こうとしていますが、このファイルは存在しないため、エラーがスローされます。代わりに http:// localhost を使用してください。そして、それを機能させるには、allow_furl_openを設定する必要があります。

1
CodeCaster

私にとっての問題はfile_get_contentsは動作しませんでした https://domain.test.loc (localhostに解決されるドメイン)が動作しました http://domain.test.loc 。多分それは自己署名証明書が好きではありません。私は持っています allow_url_fopen ONに設定し、拡張子= php_openssl.dll。

0

私は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");
0
karambir