[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 メーリングリストの案内