・file_get_contents()
・fopen()
・simplexml_load_file()
・fopen()
・simplexml_load_file()
PHPで上記のような関数を使っている場合は、「allow_url_fopen =off」の環境では動作してくれません。
その場合は、
・allow_url_fopen をONにする方法
・PHPのソースを書き換える
の2つの解決方法があります。・PHPのソースを書き換える
ONにできるレンタルサーバーはそれで動作します。できないところでは、PHPのソースを少し変更すると動作するようになります。PHPのソース変更は、上記の部分をcurlを使用して、置き換えると動作させることが可能になります。
【本記事の内容】
・ソースの書き換え方
・allow_url_fopen をONにする方法
前半がソースの書き換え方です。後半がallow_url_fopen=ONにする方法です。
file_get_contents,fopenの場合
修正前
■ file_get_contents<?php
$url = "http://www.example.com/";
$data = file_get_contents($url);
echo $data;
?>
■ fopen
<?php
$url = "http://www.example.com/";
$fp = fopen($url,"r");
$data = "";
if ($fp) {
while (($buffer = fgets($fp, 4096)) !== false) {
$data .= $buffer;
}
fclose($fp);
}
echo $data;
?>
修正後
<?php
$url = "http://www.example.com/";
$data = "";
$cp = curl_init();
curl_setopt($cp, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cp, CURLOPT_URL, $url);
curl_setopt($cp, CURLOPT_TIMEOUT, 60);
$data = curl_exec($cp);
curl_close($cp);
echo $data;
?>
上記3つは、同じ動作をします。
simplexml_load_fileの場合
修正前
<?php
$rss = 'http://example.com';
$xml = simplexml_load_file($rss);
//var_dump($xml);
?>
修正後
<?php
$rss = "http://example.com/";
$data = "";
$cp = curl_init();
curl_setopt($cp, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cp, CURLOPT_URL, $rss);
curl_setopt($cp, CURLOPT_TIMEOUT, 60);
$data = curl_exec($cp);
curl_close($cp);
$xml = simplexml_load_string($data);
//var_dump($xml);
?>
allow_url_fopen をONにする方法
php.iniか.htaccessに以下のようなものを書きます。ただし、もともと許可していないレンタルサーバーではこの設定を書いても無効です。php.ini
allow_url_fopen = ON
.htaccess
php_flag allow_url_fopen on
各レンタルサーバーの説明
■ ロリポップの場合・PHP設定 / ユーザー専用ページ / マニュアル - ロリポップ!
■ さくらインターネット
さくらのコントロールパネルの「PHP設定の編集」で「allow_url_fopen = On」
■ ミニバード、ファイアバード、クローバー
・サポートマニュアル /格安・大容量レンタルサーバーのミニバード
・ユーザーサポート - サポートマニュアル /高機能な大容量レンタルサーバーのファイアバード
・サポートマニュアル /大容量・無制限レンタルサーバー クローバー
※スタードメインプラス、PHPAPPSは無理です。おそらく、ウェブクロウも無理だと思います。
スポンサーリンク
コメント一覧
名前:PHPでfopen関数が使えないときはcurl関数を使う。TwitterのストリーミングAPIでタイムラインを取得するときに気付いたこと – エコテキブログ :
[…] ぐぐって探してみると、curl関数で代替できるようです。こちらのサイトを参考にして実行すると、エラーの内容が変わりました。 […]
2014/09/06 20:21
名前:櫻井 :
すばらしいです。NTTコミュニケーションズのサーバーでしたが、ソースの書き換えで対応出来ました。ありがとうございました。
2014/12/03 17:46
名前:狩野 :
大変参考になりました。ありがとうございます。
WADAXレンタルサーバーもallow_url_fopenをONにできないようで困っていました。
2015/04/23 00:27
名前:通りすがり :
ウェブクロウにてcurl関数を用いた接続ができました!
ありがとうございました!
2016/10/20 09:47