PHPで携帯OpenSocial対応1 パスの書き換え

携帯のOpenSocialはプラットフォーム側がproxyの役割をする為パス変換がめんどうです。
これをphpのバッファリングを使って、プラットフォーム側からアクセスがあった場合だけ書き換えるようにしてみましょう。これでSAP側のURLで直接アクセスした場合は通常の携帯サイトとして動作し、携帯端末IDで認証するといったことができるようになり、デバックの際に便利です。

<?php
function url_rewrite($buf){
  function pf_url_rewrite($m){
    $qt  = $m[2].$m[4];
    $url = $m[3].$m[5].$m[6];
    $u   = parse_url($url);
    if($u['scheme']!='http'){
      // 絶対パス
      if(ereg('^/',$u['path'])){
        $rurl = 'http://'.$_SERVER['HTTP_HOST'].$u['path'];
      // 相対パス
      }else{
        $rurl = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['REQUEST_URI']).$u['path'];
      }
     /* http://から指定されている場合 */
    }else{
      $rurl = $u['scheme'].'://'.$u['host'].$u['path'];
    }
    parse_str($u['query'],$queries);
    if(session_name() and session_id()) $queries[session_name()]=session_id();
    $query = http_build_query($queries);
    if($query)         $rurl.='?'.$query;
    if($u['fragment']) $rurl.='#'.$u['fragment'];
    $rurl='?guid=ON&url='.urlencode($rurl);
    return $m[1].$qt.$rurl.$qt.$m[7];
  }
  $buf = preg_replace_callback('!(<(?:a|form).*?(?:href|action)\s*?=\s*?)(?:(")([^"]+)"|(\')([^\']+)\'|([^\s\t>]+))([^>]*?>)!i','pf_url_rewrite',$buf);
  return $buf;
}

// SNSプラットフォームからのアクセスだった場合URLを書き換える xxx.xxx.xxx.xxx/xxは適時書き換える
if(Net_IPv4::ipInNetwork($_SERVER["REMOTE_ADDR"],'xxx.xxx.xxx.xxx/xx')){
   ob_start('url_rewrite');
}

NDAが絡んでくるところがあるので一部意図的にプログラムを省いています。それぞれのSNSでカスタマイズが必須となるかと思いますのでこちらをベースに適時カスタマイズをお願いします。