【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【圧倒的 低コスト】Oracle Cloud 構築・運用保守・監視サービス

【圧倒的 低コスト】Oracle Cloud 構築・運用保守・監視サービス

【WordPress専用】高速 クラウド / サーバー『WebSpeed』

【WordPress専用】高速 クラウド / サーバー『WebSpeed』

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【SNSアプリ開発】LINE カスタムアプリ開発サービス

【SNSアプリ開発】LINE カスタムアプリ開発サービス

【ECアプリ開発】Shopify カスタムアプリ開発サービス

【ECアプリ開発】Shopify カスタムアプリ開発サービス

【音声アプリ開発】Twilio カスタムアプリ開発サービス

【音声アプリ開発】Twilio カスタムアプリ開発サービス

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【取材記事】サーバーサイド・バックエンドエンジニアを募集中

【取材記事】サーバーサイド・バックエンドエンジニアを募集中

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

PHPでAPI叩くなら、file_get_contentsでいいじゃない?

こんにちは。
開発チームのワイルド担当、まんだいです。

PHPのfile_get_contentsというメソッドをご存知でしょうか?
ファイルオープンの処理が簡潔に書けるため、重宝するメソッドかと思いますが、このメソッドにはファイル読み込み以外にも、簡単なウェブアクセスツールとしての使い方があります。
今日はこの辺りがどこまで使えるのか、限界を調査してみたいと思います。

 

file_get_contentsの基本

簡単なサンプルとして、弊社のトップページを取得するには、以下の様なソースになります。

<?php
$html = file_get_contents('https://beyondjapan.com');

 
これは問題ないと思います。
これがうまく動かない場合は、php.iniのallow_url_fopenの項目が以下のようになっているか確認してください。

allow_url_fopen = On

 

file_get_contentsの応用

file_get_contentsメソッドはHTMLをゲットする事しかできない訳ではありません。
次は、stream_context_createメソッドを使ってPOST送信をしてみます。

stream_context_createメソッドのマニュアルを見てみると、「ストリームコンテキストを作成する」とだけ記載されています。
このストリームコンテキストを操作する事で、POST送信できるようになります。

<?php
$data = [
    'title' => '送信テスト',
    'body' => 'テスト',
];

$opts = [
    'http' => [
        'method' => 'POST',
        'header' => implode("\r\n", [ 
            "User-Agent: hogehoge",
            "Accept-Language: ja",
            "Cookie: test=hoge",
        ]),
    ],
    'data' => http_build_query($data)
];

$ctx = stream_context_create($opts);

$response = file_get_contents('http://example.com/inquiry', false, $ctx);

 
POST送信したいデータはhttp_build_queryでURLエンコードとクエリ文字列変換を事前にしておきます。
JSONデータの場合は、json_encodeメソッドを通した後、urlencodeメソッドでURLエンコードする感じです。

 

file_get_contentsの真価

ストリームコンテキストでヘッダ情報を作れるので、先の例でも示しましたが、Cookieも思い通り!
Basic認証の突破や、セッションを使ったサイトの巡回などもできます。

また、Chatwork APIのようなヘッダ情報にAPI KEYを埋め込むタイプのAPIにも対応できます。

SSL通信を行いたい場合も特に考える必要はなく、プロトコルに 「https://」を指定するだけです。

また、これが言いたいがためにこのブログを書いた訳なのですが

file_get_contentsは、php-curlがインストールされていない環境でも動作するため、curlライブラリの代替処理としても使えます。
(もちろん、curlの方が高機能なのは言うまでもありません)

 
以上です。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
1
読み込み中...
1 票, 平均: 1.00 / 11
11,597
facebook twitter はてなブックマーク
【大阪 / 横浜】インフラエンジニア / サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア / サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

萬代陽一

ソーシャルゲームのウェブ API などの開発がメイン業務ですが、ありがたいことにマーケティングなどいろんな仕事をさせてもらえています。
なおビヨンド内での私の肖像権は CC0 扱いになっています。