次のコードが警告を返す理由を誰でも説明できますか:
<?php
echo file_get_contents("http://google.com");
?>
警告が表示されます:
Warning: file_get_contents(http://google.com):
failed to open stream: No such file or directory on line 2
コードパッドを参照
別の方法として、次のように cURL を使用できます。
$url = "http://www.google.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
参照: cURL
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 を使用します。
cURL を Ubuntu (または aptitude を備えたその他の UNIX ライクなオペレーティング システム) にインストールします。
sudo apt-get install php5-curl
sudo /etc/init.d/apache2 restart
cURLも参照
これは、PHP がファイル処理関数を使用して URL を開く機能を無効にできる構成設定が原因であることがほぼ確実です。
PHP.ini を変更できる場合は、allow_url_fopen
設定をオンにしてみてください。詳細については、fopen の man ページも参照してください(同じ制限がすべてのファイル処理関数に影響します)。
フラグをオンにできない場合は、Curl などの別の方法を使用して URL を読み取る必要があります。
このコードを実行すると:
<?php
print_r(stream_get_wrappers());
?>
http://codepad.org/NHMjzO5pには、次の配列が表示されます。
Array
(
[0] => php
[1] => file
[2] => data
)
Codepad.Viper - http://codepad.viper-7.com/lYKihIで同じコードを実行すると、http ストリームが有効になっているためfile_get_contents
、codepad.org では機能しないことがわかります。
Array
(
[0] => https
[1] => ftps
[2] => compress.zlib
[3] => php
[4] => file
[5] => glob
[6] => data
[7] => http
[8] => ftp
[9] => phar
)
上記の質問コードを Codepad.Viper で実行すると、Google ページが開きます。したがって、違いはhttp
、CodePad.org で無効化され、CodePad.Viper で有効化されるストリームです。
有効にするには、次の投稿HTTPS ストリーム ラッパーを有効にする方法 をお読みください。または、 を使用しますcURL
。
ホスト名の後にスラッシュを付けてみてください。
<?php
echo file_get_contents("http://google.com/");
?>
次のように一重引用符を使用してみてください。
file_get_contents('http://google.com');