file_get_contentsは、ファイル全体を文字列に読み取るために使用される関数です。ローカルファイルを処理する場合は非常に便利ですが、リモートHTTP/HTTPSリソースでも動作します。
構文は次のとおりです。
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )
ここで、 $ filenameはファイルパスまたはURLになります。
まず、最も単純な例を見て、WebページのHTMLコンテンツを直接取得しましょう。
<?php
$url = "https://gitbox.net/sample-page.html";
$content = file_get_contents($url);
echo $content;
?>
この例では、 file_get_contentsはhttp get requestを開始し、 https://gitbox.net/sample-page.htmlのコンテンツを取得し、 $ contentに割り当てます。次に、エコーはWebページのHTMLを出力します。
一部のWebサイトでは、ユーザーエージェント、参照などの特定のリクエストヘッダーが必要です。Stream_Context_Createを使用してコンテキストを作成できます。
<?php
$url = "https://gitbox.net/api/data.json";
$options = [
"http" => [
"header" => "User-Agent: PHP\r\n"
]
];
$context = stream_context_create($options);
$content = file_get_contents($url, false, $context);
echo $content;
?>
このコードでは、ブラウザリクエストをシミュレートし、ターゲットサーバーによるリクエストの拒否を避けるためにユーザーエージェントを設定します。
file_get_contentsを使用してHTTPSリソースを要求する場合、SSL証明書確認の失敗に遭遇する場合があります。この時点で、コンテキストを構成することで検証をオフにすることができます(生産環境には推奨されません):
<?php
$url = "https://gitbox.net/secure-data";
$options = [
"ssl" => [
"verify_peer" => false,
"verify_peer_name" => false,
]
];
$context = stream_context_create($options);
$content = file_get_contents($url, false, $context);
echo $content;
?>
この方法は、環境のデバッグやテストに適しています。有効な証明書を使用して、生産環境で検証を有効にしてください。
URLが無効であるか、リクエストが失敗した場合、 file_get_contentsはfalseを返します。 @エラー抑制文字、 ISSet 、および空に基づいて基本的な判断を下すことができます。
<?php
$url = "https://gitbox.net/invalid-page";
$content = @file_get_contents($url);
if ($content === false) {
echo "リクエストが失敗しました,コンテンツを取得できません。";
} else {
echo $content;
}
?>
さらに、 error_get_last()を使用して、障害の特定の理由を取得することもできます。これは簡単にデバッグできます。
File_get_Contentsは使いやすいですが、Curlは複雑なHTTP要求(投稿、Cookie、タイムアウトコントロールなど)を処理する際のより強力な機能を提供します。リクエスト動作をさらに制御できる場合は、Curlを使用することをお勧めします。ただし、簡単なGETリクエストの場合、 file_get_contentsで十分です。
Allow_url_fopenはfalseであり、これはURLにアクセスされますか?
解決策: php.iniファイルを変更し、このオプションを有効にします。
allow_url_fopen = On
ゴミが現れますか?
必要に応じてエンコードをエンコードして変換するターゲットページを確認します。
$content = mb_convert_encoding($content, 'UTF-8', 'GBK');
HTTPSにアクセスできませんか?
OpenSSL拡張機能が有効になっていることを確認してください。
extension=openssl
関連タグ:
file_get_contents URL