allow_url_fopenに0が設定されたレンタルサーバーではPHPのfile_get_contentsなどを用いて外部のファイルが取得できません。これを回避して取得する方法を紹介します。
レンタルサーバーのセキュリティが厳しい
(今は亡き)ウェブクロウというPHPが動作する無料サーバーにてPHPのfile_get_contentsを用いて外部ファイルを取得しようとしました。しかし、php.iniにてallow_url_fopen=0に設定されており、取得ができませんでした。
次のようなエラーが発生します。
Warning: file_get_contents(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 Warning: file_get_contents(http://www.example.com/): failed to open stream: no suitable wrapper could be found
別の関数を使用する
外部ファイルを取得する方法として他にcURLライブラリを用いる方法があります。このライブラリ経由であれば、allow_url_fopenに0が設定されたレンタルサーバーでも外部ファイルを取得できます。ただし、cURLライブラリがインストールされていないサーバーでは使用できません。
下記ではexample.comの内容がそのまま取得できています。
下記はプログラムの例です。ユーザーエージェントやタイムアウトなどオプションが豊富なので公式マニュアルを参考に色々試してみてください。
<?php
$url="http://www.example.com/";
$cp = curl_init();
/*オプション:リダイレクトされたらリダイレクト先のページを取得する*/
curl_setopt($cp, CURLOPT_RETURNTRANSFER, 1);
/*オプション:URLを指定する*/
curl_setopt($cp, CURLOPT_URL, $url);
/*オプション:タイムアウト時間を指定する*/
curl_setopt($cp, CURLOPT_TIMEOUT, 30);
/*オプション:ユーザーエージェントを指定する*/
curl_setopt($cp, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
$data = curl_exec($cp);
curl_close($cp);
echo $data;
?>