web-dev-qa-db-ja.com

file_get_contents()を使用すると500エラーが発生するのに、ブラウザーで動作するのはなぜですか?

$html = file_get_contents("https://www.[URL].com"); 
echo $html;

エラーログにこれを生成します:

PHP警告:file_get_contents(https:// www。[URL] .com)[function.file-get-contents]:ストリームのオープンに失敗しました:HTTPリクエストに失敗しました! 13行目の/Applications/MAMP/htdocs/test.phpのHTTP/1.1 500内部サーバーエラー;

ただし、ブラウザではサイトは正常に機能します。

私もcURLを使用してみました。ログファイルにエラーは表示されませんが、$htmlがエコーします。

「/」アプリケーションのサーバーエラー。
オブジェクト参照がオブジェクトインスタンスに設定されていません。

...さらにデバッグ情報

これを回避する方法はありますか?

35
bdev

この回避策を試してください。

$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n"));
$context = stream_context_create($opts);
$header = file_get_contents('https://www.example.com',false,$context);

これが機能しない場合は、httpsから読み取れないのでしょうか?

71
blang

ヘッダーにさらにデータを入力する必要がありました。

$opts = array('http' => array(
    'method' => "GET",
    'header' => "User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0\r\n"
    . "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    . "Accept-Encoding:gzip, deflate\r\n"
    . "Accept-Language:cs,en-us;q=0.7,en;q=0.3\r\n"
    . "Connection:keep-alive\r\n"
    . "Host:your.domain.com\r\n"
    ));
$context = stream_context_create($opts);
$html = file_get_contents($sap_url, FALSE, $context);
4
Racky