PHPのfile_get_contentsでhttpsのurlにアクセスすると、以下のエラーが表示されます。


しかし、実際にそのurlにアクセスしてデータは取得できています。エラーじゃないのに、エラーを表示してしまっているようです。

@file_get_contentsとして、エラーを出力しないようにすればいいのですが、その他根本解決する方法はありませんでしょうか?

環境は CentOS5/PHP5+openssl付きインストール/apache2.2

---
■コード
$hoge = file_get_contents('https://hoge.com');

■エラー内容
Unexpected PHP error [file_get_contents() [<a href='http://php.net/function.file-get-contents'>function.file-get-contents</a>]: SSL: fatal protocol error] severity [E_WARNING] in

■参考情報
file_get_contentsによるhttpsアクセスが失敗する
http://ml.php.gr.jp/pipermail/php-users/2004-June/022720.html

回答の条件
  • 1人2回まで
  • 登録:2008/11/20 14:29:24
  • 終了:2008/11/20 17:56:24

ベストアンサー

id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402008/11/20 17:50:22

ポイント41pt

SSL: fatal protocol error] severity [E_WARNING]

エラーメッセージからするとSSLのプロトコル上問題があるが、通信自体は出来ていると読める。


PHP: HTTP と HTTPS - Manual

IIS のような、いくつかの標準に対応してない Web サーバは、PHP に警告を発生させるような手順でデータを送信します。

これに該当する可能性は無いですか?

id:cbic

まさに、これでした。https側のサーバーがIISでした!

2008/11/20 17:56:00

その他の回答(3件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/11/20 15:35:40

ポイント27pt

file_get_contents で https サイトからコンテンツを取得するには、ラッパとして SSL 通信がサポートされている必要があります。

そこで確認をお願いします。

phpinfo関数の結果を表示し、Registerd PHP Streamを見てください。httpsは含まれていますか?


サポートされていない場合は再コンパイルを検討した方が良いと思いますが、別のやり方としてCURL関数を使ったアクセス方法があります。「PHPセキュリティ対策:SSL通信を行う」を参考にしてください。

id:cbic

回答ありがとうございます。

Registered PHP Streams php, file, http, ftp, compress.bzip2, compress.zlib, https, ftps

となっていました。エラーが出るだけで、実際にhttpsへのfile_getはできているので、問題ないようにも思えますが、curl等別の手段でやったほうがいいですか?

2008/11/20 15:53:21
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/11/20 17:23:56

ポイント12pt

エラーが出るだけで、実際にhttpsへのfile_getはできているので、問題ないようにも思えますが

であれば、強いてCURLを持ち出す必要はないと思います。

E_WARNINGなので、実行時に何らかのトラブルが発生しているということですね。

相手のhttpsサーバ側の問題ということはないですか?

たとえば以下のようなことはありませんか。

  • SSL証明書の期限切れ⇒ブラウザでアクセスして証明書の期限を確認してみてください。
  • SSL証明書がDSAを使っている⇒うろ覚えなんですが、OpenSSLのバージョンによってはRSAしか対応していなかったように思います。これもブラウザで確認できます。
id:cbic

ありがとうございます。証明書は正規であり、RSA暗号でした。非常に謎ですが、現状エラー表示がでるだけで問題がないので、このままでいこうか検討してみます!

2008/11/20 17:36:36
id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402008/11/20 17:50:22ここでベストアンサー

ポイント41pt

SSL: fatal protocol error] severity [E_WARNING]

エラーメッセージからするとSSLのプロトコル上問題があるが、通信自体は出来ていると読める。


PHP: HTTP と HTTPS - Manual

IIS のような、いくつかの標準に対応してない Web サーバは、PHP に警告を発生させるような手順でデータを送信します。

これに該当する可能性は無いですか?

id:cbic

まさに、これでした。https側のサーバーがIISでした!

2008/11/20 17:56:00

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 goodvn 228 214 18 2008-11-20 17:53:44

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません