先日、APIから値を取得するためにfile_get_contentsを使おうと思ったのですが、対象サイトはwpXサーバーで運用しており、wpXサーバーではセキュリティの都合上file_get_contentsが許可されていませんでした。
通常はphp.iniに「allow_url_fopen=on」を追加すればfile_get_contentsが使えるようになりますが、wpXサーバーではそもそもfile_get_contentsを利用可能にするための設定もできなくなっており、file_get_contents以外の方法で値を取得する必要があります。
そこで、cURLをfile_get_contentsの代替として使って値を取得できたので、備忘録として残しておきたいと思います。
ちなみに、環境は以下のような感じです。
- サーバー:wpX
- CMS:WordPress5.0.3
- PHPバージョン:PHP7.0.30
今回はwpXサーバー・WordPressを使っていますが、wpX・WordPress以外の環境でも有効です。
file_get_contentsが使えない時の対処法
まずは以下の関数を定義しましょう。WordPressの場合、functions.phpに以下コードを追加します。
function curl_get_contents( $url, $timeout = 60 ){ $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_HEADER, false ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout ); $result = curl_exec( $ch ); curl_close( $ch ); return $result; }
あとは、file_get_contentsをcurl_get_contentsに置き換えてあげるだけです。
$url = 'https://example.com/'; $curl_get_cont = curl_get_contents($url);
これで、file_get_contentsが使えない環境でも、同様の処理を行うことができるようになります。
あとがき
file_get_contentsが使えなくて困った!という場合はぜひお試しください。
「別ドメイン・別サーバーにインストールされたWordPressの内容を表示する方法」という記事の中でも使いましたが、cURL関数って便利ですね!