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