allow_url_fopenが0のサーバーで外部ファイルを取得する方法

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;
?>

広告 (下に続く)

シェアする