kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

PHPのエラーが発生

PHP Google Analytics Zend_View

Google Analyticsのコードを埋め込んだページで以下のようなエラーが発生した

Setting private or protected class members is not allowed
Zend_View_Abstract->__set('__utmz', '1234567890.12387...')

エラーメッセージから原因が全然つかめなかったので、特定するまでに苦労した。
最初からスタックトレースみてれば早かったかも。

$data = $_REQUEST;
foreach ($data as $key => $val) {
 $this->view->$key = $val;
} 

$_REQUESTでとった配列を、なんのフィルターも掛けずに、Zend_Viewのプロパティにセットしていたためだった。

$_REQUESTでcookieも取ってきてたため、Google Analyticsが生成したcookieを取得してしまっている。
それを、セット関数とか使わずに単にプロパティとしてアクセスしていたため、__setが作動している。また、cookieのキー名に__(_が2つ)から始まるキー名があり、それをプロパティ名として使ったために起きていたと思われる。

Zendの関数を使ってPOSTだけを取得し、さらに意図したキー名のみ取得するように変更。