« Googleマップの地図を好きな写真に簡単にさしかえられるツール | メイン | 「視線を導く」方法あれこれ »

PHPでSSL通信する時の注意点
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

yukiです。
今回はPHPでSSL通信したい時の注意点などを紹介します。

PHPでSSL通信を行う際には、

  • fsockopen
  • pfsockopen
  • file_get_contents
  • fopen
  • stream_socket_client

など様々であり、利用する場面がありますが、SSL通信が許可されている必要があります。
よくHTTP_Requestなどを利用してPOSTしたいがhttpsだとうまくいかない!という記事を見かけますが、参考になればと思います。

  • * allow_url_fopenが有効かどうか

上記の関数についてfile_get_contents・fopenでは上記設定が有効かを調べます。
php.iniで設定されていますが、通常デフォルトで使用可能なのですが、レンタルサーバーなどでは使えないこともありますので調べてみましょう。
phpinfo()関数を利用するか、コマンドラインでは
php -i | grep allow_url_fopen

で知ることが出来ます。
またphp4.0.3以前では
--disable-url-fopen-wrapper

でコンパイルされていると利用不可となっています。

  • サポートされているプロトコル・ラッパーを調べる
通信する際のプロトコル、及びラッパが使用可能かを調べます。この場合はhttps://(PHP4.3.0以降)が対象です。 phpinfo()ではRegisterd PHP Streamで確認できます。 SSL通信の場合OpenSSLがインストールされている必要があり、PHP4.3.0以降では静的にコンパイルされ組み込まれている必要がありますが、PHP5以降ではモジュールとしてコンパイルされていても使用できます。

レンタルサーバーなどでPHP4.3以降を利用し、かつOpenSSLサポートがなければ、管理者によってリコンパイルされなければなりません。

ですが、もしcurlコマンド(SSLが有効であること)が使える環境であれば、popen・proc_open関数から利用することもできます。(レスポンス速度等の問題はありますが)

なおOpenSSLのバージョンもPHPによって異なるので注意が必要です。

以下をまとめると次のような表になります。

PHP再コンパイルOpenSSL
~4.0.4×0.9.6~
4.0.5~4.2.3×0.9.5~
4.3.0~4.3.10.9.5~
4.3.2~0.9.6~
5.0.0~×0.9.6~

利用するなら、PHP5がお手軽なようです。

トラックバック

このエントリーのトラックバックURL:
http://www.unoh.net/mt32/mt-tb.cgi/950

コメントを投稿


画像の中に見える文字を入力してください。