私の管理しているブログサイトは、サイト総合のtwo-cool.comへ更新PINGを送るようになっています。
ここでちょっとつまずく。
WordPressから更新Pingが送られてきたら、即座にレスポンスを返さないといけないのだが、それが思うように実行してくれないんですよ、なぜか。
header('Connection: close');
header('Content-Length: '.(string)ob_get_length());
header("Content-Type: text/xml;charset=utf-8");
ob_end_flush();
ob_flush();
flush();
こんな感じでやってるのですが、ここでコネクションが切れるっていろんなサイトに書いてあるのですが、普通にtwo-cool.comの代わりに更新PINGを送受信すると、なぜか「weblogUpdates.extendedPing」へのレスポンスが変になるのか、次の「weblogUpdates.ping」が送られてきてしまう。これも単純に2回受信するわけじゃなく、数個以上のPINGサイトに送ってるとなる感じ。
CGIなのでスレッドなんか使えないし、どうしたものかと思案した結果、「あれ?CLI版のPHPが使えれば、コードの修正は少ないのでは?」と思い、レンタルサーバーのヘルプを見るとあるじゃん、CLI版のPHPが。
早々に、一本目はWordPressからの更新PINGを受けて、レスポンスを返す。返した後に二本目をexecで実行し、そのなかで各更新PINGサイトへの送受信を行うことで解決しました。
ただ、ここでミソなのが
exec( "php 2.php > /dev/null &" );
で、nullに出力するところです。これがないと、やっぱり2回送られてきます。
でも、なんでこんな感じになるのかな。私には理解不可能!