[PHP-users 22198]Re: file_get_contentsによるhttpsアクセスが失敗する

Hanzo hayato @ hayato.atso-net.jp
2004年 6月 13日 (日) 19:06:12 JST


>>Google で検索してみると、http://www.manucorp.com/archives/php-bugs/200405/msg00000.php
>>という記述も発見できました。
>
>その記述を読んで辿っていくと、対策は、
>
>(1)PHP5なら解決されているからPHP5を使う
>(2)PHP4をOpenSSLサポート付きで静的コンパイルする
> (つまりphp_openssl.dllの後付けではダメということ)
>(3)http://ftp.proventum.net/pub/php/win32/misc/openssl/
> からphp4ts.dllを持っていってそれを使う
>
>のどれかですが、(3)のURLはアクセス不可能な様子なので
>できるのは(1)か(2)ですね。
>
>下記はざっくり直訳。
>

早速、PHP5をインストールしてみたら https でのアクセスに成功しました。
環境は下記のとおりです。

Windows2000 SP4 + Apache 2.0.48 + PHP 5.0.0RC3 (built: Jun  7 2004 17:23:56)

しかし、PHP の log に下記のような物が出てきました。

[13-Jun-2004 18:49:56] PHP Warning:  file_get_contents() [<a href='function.file-get-contents'>function.file-get-contents</a>]: SSL: fatal protocol error in H:\Program Files\Apache Group\Apache2\htdocs\php\test2.php on line 2
[13-Jun-2004 18:50:00] PHP Warning:  file_get_contents() [<a href='function.file-get-contents'>function.file-get-contents</a>]: SSL: fatal protocol error in H:\Program Files\Apache Group\Apache2\htdocs\php\test2.php on line 6

原因をGoogleで検索してみると、

http://www.zend.com/manual/function.fopen.php

というサイトの下の方に

When using SSL, Microsoft IIS will violate the protocol by closing the connection without 
sending a close_notify indicator. PHP will report this as "SSL: Fatal Protocol Error" when 
you reach the end of the data. To workaround this, you should lower your error_reporting 
level not to include warnings. 

と書いてあったので、php.ini の設定を変更して画面には出さず
log ファイルに出力するようにして解決???しました。

; Print out errors (as a part of the output).  For production web sites,
; you're strongly encouraged to turn this feature off, and use error logging
; instead (see below).  Keeping display_errors enabled on a production web site
; may reveal security information to end users, such as file paths on your Web
; server, your database schema or other information.
display_errors = Off


プログラムはこんな感じです。

<?php
$s = file_get_contents("https://jizen.kuronekoyamato.co.jp/jizen/cr/jz/wb/CRJZWBJS0050.jsp");

echo $s;

$s = file_get_contents("https://bookweb.kinokuniya.co.jp/certif.cgi");

echo $s;
?>


最終的に https でアクセスする事が出来ました。
いろいろありがとうございました。

---------------------------------------------------------------------
Hanzo






PHP-users メーリングリストの案内