モバイルAdSenseができない(解決)

2009年12月3日
By 石間

モバイルAdSenseができない、ずっと引きずったままの問題。
ようやく解決できました。本当に長い時間がかかった。
わかってしまえば簡単な事。でも原因が判明するまでが大変でした。

PHP5環境で携帯でAdSenseできない人には参考になるはずです。

事の発端はサーバの移動とWordPressのサイトの立ち上げでした。今までNucleusで動いていたサイトとは別にWordPressのサイトを立ち上げたのと、PHP5環境に慣れるためにPHP4環境のサーバからPHP5環境に移ったのがはじまり。

WordPressにKtaiStyleを入れたが、なぜかモバイルAdSenseが表示されない。なぜ?と思ったのが運の尽き。KtaiStyleで簡単にAdSenseをやっている人はいるのに私だけできない・・・。原因も不明。

結局原因も突き止められず、その間AdSenseの収益は落ちていきました。
が!今日ようやく解決できました。
解決の糸口はKtaiStyleにAdSenseの関数を埋め込もうと考えたところからでした。
まず、

/wp-content/plugins/ktai_style/tags.php

にモバイルadsenseのコードを貼り付ける。最終的なコードはページ下部にあるのでここには記述しない。
ただし、ただ貼り付けるのではダメでadsenseの各関数の名称をks_を頭につけてやる必要がある。この理由はわからないが、とにかくこうしないとダメだった。つまり下記のコードをtags.phpの頭に貼り付けることになる。最後にAdSenseを表示させる部分も関数にしてしまう(ここではks_adsenseという関数名にした。)ことでKtaiStyleのテーマの中で <?php ks_adsense(); ?> で呼び出して使えるようになる。AdSenseのグローバル変数は自分のものに変更する。

しかし、これでも問題は解決せず携帯でアクセスすると真っ白だった。
そこで上記のAdSenseコードをたどっていく。
自分で設定したks_adsense関数内のfopenの@を外すと携帯でエラーが2つ下記のように出るようになった。fopenまわりのようだ。実はここが問題の原因だった。

URL file-access is disabeld in the server configuration in ・・・ failed to open stream: no suitable wrapper could be found in ・・・

上のエラーを調べていくとどうやらサーバがPHP5環境になった際にphp.iniのallow_url_fopenがデフォルトでOffになっているのが問題のようだ。

NucleusでもWordPressでもどうりで携帯サイトにAdSenseが表示されないわけだ。
しかし、これはphp.iniでしかいじれない。ということは共用サーバではどうしようもない。

そしてさらに解決策を探すことになるが、ここからは早かった。
今回とった方法はSnoopyというライブラリを使う方法。http://sourceforge.net/projects/snoopy/ からダウンロードできます。

ダウンロードして解凍したらSnoopy.class.phpを/wp-content/plugins/ktai_styleにコピーする。

あとはこのSnoopy.class.phpをtags.phpで呼び出して使えるようにする。
結果的には下記のコードをtags.phpの頭に貼り付けることでモバイルAdSenseが利用できるようになる。 
例えばKtaistyleのデフォルトテーマのヘッダに表示させたいのであれば
/wp-content/plugins/ktai_style/themes/default/header.php
の21行目の下あたりに貼り付ければ記事のタイトルの上に表示できるようになる。 

ks_page_title();
ks_adsense();  //これがAdSenseを呼び出す

下がtags.phpに貼り付けたコード。このまま貼り付けて使えます。
$GLOBALS['google']['channel']や$GLOBALS['google']['client']は自分のものに書き換えてください。
本当に時間かかったけど、解決できたので嬉しい!(^^)/
これで解決できないことはないと思うが、その場合はcurlを使う方法もあるようだ。allow_url_fopen = off 対策ということですね。最後はここで助けられました。

require_once dirname(__FILE__) . '/Snoopy.class.php';

$GLOBALS['google']['ad_type']='text_image';
$GLOBALS['google']['channel']='xxxxxxxxxx';
$GLOBALS['google']['client']='pub-xxxxxxxxxxxxxxxx';
$GLOBALS['google']['format']='mobile_single';
$GLOBALS['google']['https']=ks_read_global('HTTPS');
$GLOBALS['google']['ip']=ks_read_global('REMOTE_ADDR');
$GLOBALS['google']['markup']='xhtml';
$GLOBALS['google']['oe']='utf8';
$GLOBALS['google']['output']='xhtml';
$GLOBALS['google']['ref']=ks_read_global('HTTP_REFERER');
$GLOBALS['google']['url']=ks_read_global('HTTP_HOST') . ks_read_global('REQUEST_URI');
$GLOBALS['google']['useragent']=ks_read_global('HTTP_USER_AGENT');
	$google_dt = time();

function ks_read_global($var) {
  return isset($_SERVER[$var]) ? $_SERVER[$var]: '';
}

function ks_google_append_url(&$url, $param, $value) {
  $url .= '&' . $param . '=' . urlencode($value);
}
function ks_google_append_globals(&$url, $param) {
  ks_google_append_url($url, $param, $GLOBALS['google'][$param]);
}

function ks_google_append_color(&$url, $param) {
  global $google_dt;
  $color_array = split(',', $GLOBALS['google'][$param]);
  ks_google_append_url($url, $param,
                    $color_array[$google_dt % sizeof($color_array)]);
}
function ks_google_set_screen_res() {
  $screen_res = ks_read_global('HTTP_UA_PIXELS');
  if ($screen_res == '') {
    $screen_res = ks_read_global('HTTP_X_UP_DEVCAP_SCREENPIXELS');
  }
  if ($screen_res == '') {
    $screen_res = ks_read_global('HTTP_X_JPHONE_DISPLAY');
  }
  $res_array = split('[x,*]', $screen_res);
  if (sizeof($res_array) == 2) {
    $GLOBALS['google']['u_w'] = $res_array[0];
    $GLOBALS['google']['u_h'] = $res_array[1];
  }
}
function ks_google_set_muid() {
  $muid = ks_read_global('HTTP_X_DCMGUID');
  if ($muid != '') {
    $GLOBALS['google']['muid'] = $muid;
  }
  $muid = ks_read_global('HTTP_X_UP_SUBNO');
  if ($muid != '') {
    $GLOBALS['google']['muid'] = $muid;
  }
  $muid = ks_read_global('HTTP_X_JPHONE_UID');
  if ($muid != '') {
    $GLOBALS['google']['muid'] = $muid;
  }
  $muid = ks_read_global('HTTP_X_EM_UID');
  if ($muid != '') {
    $GLOBALS['google']['muid'] = $muid;
  }
}

function ks_google_get_ad_url() {
  $google_ad_url = 'http://pagead2.googlesyndication.com/pagead/ads?';
  foreach ($GLOBALS['google'] as $param => $value) {
    if ($param == 'client') {
      ks_google_append_url($google_ad_url, $param,
                        'ca-mb-' . $GLOBALS['google'][$param]);
    } else if (strpos($param, 'color_') === 0) {
      ks_google_append_color($google_ad_url, $param);
    } else if (strpos($param, 'url') === 0) {
      $google_scheme = ($GLOBALS['google']['https'] == 'on')
          ? 'https://' : 'http://';
      ks_google_append_url($google_ad_url, $param,
                        $google_scheme . $GLOBALS['google'][$param]);
    } else {
      ks_google_append_globals($google_ad_url, $param);
    }
  }
  ks_google_append_url($google_ad_url, 'dt',
                    round(1000 * array_sum(explode(' ', microtime()))));
  return $google_ad_url;
}

function ks_adsense(){

	$snoopy = new Snoopy();
	$URL = ks_google_get_ad_url();
	$snoopy->fetch($URL);
	$BUFF = $snoopy->results;
	print $BUFF;
//これがもともとのAdSenseコード
//	$google_ad_handle = @fopen(ks_google_get_ad_url(), 'r');
//	if ($google_ad_handle) {
//  	while (!feof($google_ad_handle)) {
//   	echo fread($google_ad_handle, 8192);
//  	}
//  	fclose($google_ad_handle);
//	}

	return;
}

人気度: 4%


こんな記事も読まれています

Nucleusで特定のカテゴリのみhttps://にする - 2009年10月13日
FLASH LITE1.1の限界を超える - 2009年11月16日
掲示板のスパム対策 本文にURLを禁止している場合 - 2009年10月22日

Tags: ,

Comments are closed.