allow_url_fopen =offのレンタルサーバーで、動作させるためのソースの変更方法について

・file_get_contents()
・fopen()
・simplexml_load_file()

PHPで上記のような関数を使っている場合は、「allow_url_fopen =off」の環境では動作してくれません。

その場合は、
・allow_url_fopen をONにする方法
・PHPのソースを書き換える
の2つの解決方法があります。

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は無理です。おそらく、ウェブクロウも無理だと思います。

スポンサーリンク

『allow_url_fopen =offのレンタルサーバーで、動作させるためのソースの変更方法について』へのコメント

  1. […] ぐぐって探してみると、curl関数で代替できるようです。こちらのサイトを参考にして実行すると、エラーの内容が変わりました。 […]

  2. 名前:櫻井 : 投稿日:2014/12/03 17:46

    すばらしいです。NTTコミュニケーションズのサーバーでしたが、ソースの書き換えで対応出来ました。ありがとうございました。

  3. 名前:狩野 : 投稿日:2015/04/23 00:27

    大変参考になりました。ありがとうございます。
    WADAXレンタルサーバーもallow_url_fopenをONにできないようで困っていました。

  4. 名前:通りすがり : 投稿日:2016/10/20 09:47

    ウェブクロウにてcurl関数を用いた接続ができました!
    ありがとうございました!

コメントを残す

メールアドレスは公開されません。
また、コメント欄には、必ず日本語を含めてください(スパム対策)。