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