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 の内容がそのまま取得できています。
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;
?>

ホームプロフィール外部リンクのため、別ウインドウで開きますプライバシーポリシー

© 2023 Oishi Takanori / Made with Gatsby.js