zz log

zaininnari Blog

cakephp1.2でApp::importを使いapp/venderに置かれたPEAR::Net_UserAgent_Mobileを使う

参考:北青山通信 - from aoyama − CakePHPでPEARを使う

1.pearライブラリをapp/vendorsへコピー
app/vendors へ PEAR.phpをコピー。
app/vendors/Net/UserAgent へ PEAR::Net_UserAgent_Mobileをコピー
(app/vendors/Net/UserAgent/Mobile.php
app/vendors/Net/UserAgent/Mobile/色々という、配置

2.include_pathにapp/vendorsのパスを追加
参考:北青山通信 - from aoyama − CakePHPでPEARを使うでは、
[app/vendors/pear_init.php]

<?php
ini_set('include_path', ini_get('include_path'). PATH_SEPARATOR . dirname(__FILE__));
?>

とあるがうまくいかない。

参考:やっとこさ メモ: XAMPPのphp.ini内「include_path」についてを参考に
[app/vendors/pear_init.php]

<?php
//include_pathにapp/vendorsのパスを追加する
ini_set('include_path', dirname(__FILE__). PATH_SEPARATOR .ini_get('include_path') );
?>

とするとうまくいく。

使い方は、
App::import(cakephp1.2で推奨)で読み込むが、

<?php
App::import('Vendor', 'Net/UserAgent/Mobile');
?>

だとエラーがでる。(「Mobile」のフォルダと区別できないため?)

<?php
App::import('Vendor', 'Mobile', array('file' => 'Net'.DS.'UserAgent'.DS.'Mobile.php'));
?>

と書いてやるとうまくいく。

[app/controller/pages_controller.php]

<?php
App::import('Vendor', 'pear_init'); //先に読み込まないとパスが通らないよ!
App::import('Vendor', 'Mobile', array('file' => 'Net'.DS.'UserAgent'.DS.'Mobile.php'));


class PagesController extends AppController {
	var $name = 'Pages';

	function index()
	{
		$userAgent = new Net_UserAgent_Mobile;
		$userAgent->factory();
		if($userAgent->isDoCoMo()){
			//isDoCoMoの処理
		} else {
			//isDoCoMo以外の処理
		}
	}
 }
?>