Libraryの使い方を調べていたが、CentOS上では上手くサンプルが動いたのでwindowsでもやってみた。見事にハマったので対策をまとめておく。OpenIDライブラリのインストール方法等は別を見てもらうとして(ぇ、サンプルをドキュメントルートに置いていきなり実行した所以下のWarningが出た。generatorどうやら『Auth_OpenID_RAND_SOURC』という定数の値がnullですよーということらしい。因みにエラーメッセージを返してきた該当箇所は以下のコードの中程にあるtrigger_error関数。$bytes;因みにこの関数が呼ばれる前に以下の処理が必ずコールされている。乱数が入った変数を返して終了ってな感じのようだ。そこまで難しい話ではないのだが、windowsには/dev/urandomなんてあるワケねーのに堂々とそんな処理をいれているのが問題。ググったところ*1、仕方ないので以下のようにコードを修正するのが対応するのが通例らしい。'/dev/urandom');}ほー。is_readableなんて関数があったのね。これでfalseだったらNULLを突っ込んでエラー処理になる部分を回避してしまうと。hubのマスターも直して欲しいところ。D:\php\includes\Auth\Yadis\Manager.php:416)というエラーが出た。なんて事はなく、PHPのマニュアルとか教本によく書いてある「header()を使う前にechoとかputで出力をしてはいけませんよ」という規約違反みたいなモンである。上記エラーメッセージの「すでにここでheaderを吐いてますよ」と示されている該当箇所のYadis\Manager.php:416を元に追ってみても、出力系の処理はしてないように見える。なんじゃい???とググりまくったところ、以下の記事を発見。PEAR::AUTHphp.iniのoutput_bufferingをOnにすることで回避できるとな?そもそもoutput_bufferingとは??私の環境のoutput_bufferingの値は以下のようになっていた。4096php.netには、output_bufferingについて以下のように説明がある。関して出力バッファリングを有効にすることができます。使用することができます。今の設定は最大で4096Byteまでバッファ出来るが、それ超えると(恐らく)headerが勝手に作成されてしまうということのようだ。OnOnにすると上限無くbufferを使用可能に出来る。(余談だが「Onにする時は気をつけて使ってね」とご丁寧にphp.iniのコメント欄に書いてある)この設定に変えたところこの問題についても回避することができた。ちなみに、問題なく動作したCentOS環境上のoutput_bufferingは4096のままで正常に動作した。何となく釈然としない気はする。windowsとlinuxの改行コードの解釈の仕方の違いかも知れないな。(1)検索リンクGitHubseri::diary::graduate_schoolseri::diary::competitive_programmingはてなブログをはじめよう!serihiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。