Monthly Archives: 7月 2007

php.iniの設定はプログラムから変更できる

php.iniの設定で、ものによってはプログラムから変更できるもの*があります。
例えば、display_errorsは変更可能なので、

[php]
if (DEBUGMODE) {
ini_set(‘display_errors’, ‘On’); // エラーを表示する。
}
else {
ini_set(‘display_errors’, ‘Off’); // エラーを表示しない。
}
[/php]

普段はエラーを表示しないが、デバッグモード時はエラーを表示してデバッグに役立てる、というような使い方が出来ます。

*変更できる設定はマニュアルに載っています。変更の可否欄がPHP_INI_ALLとなっているものだけがプログラムから変更できます。

PHP Hacksのサンプルコード

オライリーのPHP Hacksは公式WEBサイト上で本書に載っているサンプルコードがそのままアップされており、なかなかお役立ちです。やりたいことの参考やヒントにコードを参考にさせていただいたりしてます。(目次を見つつ、サンプルコードを探し当てるのがコツでしょうか)
もちろんコードの解説はアップされていませんので、解説を見たい方は本書を手に入れましょう!

三項演算とは

このBlogでも時々出てきています三項演算。
どのようなものかというと、IF文を簡潔に書く、(ようなもの)というと分かりやすいでしょうか。
[php]
// 三項演算子の使用例
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

// 上記は以下の if/else 式と同じです。
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
[/php]
マニュアルにはこうあります。
$actionに代入される値は、$_POST['action']が存在しないならば文字列’default’、存在するならば$_POST['action']となります。

つまり、
($a==1) ? であればココの処理 : 違っていたらココの処理
のような条件判断を『?』と『:』で行います。

あまり複雑な条件式を書くには適していませんが、上記のような簡単な比較であれば、ソースがすっきりと読みやすくなりますし、同じ式をif文で書くよりも早く動作します。
今までご存知なかった人は、是非使ってみてください。

getParam()でRequestを取る際のデフォルト値

Zend FrameworkのコントローラでRequest値を受け取る処理をするのに、getParam()或いはgetParams()を使用して受け取るのが一般的だと思います。
getParamで受け取る時は値が無い場合の初期値を組み込むことが出来るので、是非活用しましょう。

[php]
/* $_REQUEST['page']に値がセットされていない場合、
文字列「index.html」が返される。
 #2番目の引数がそのまま返されるので文字列とは限りません。*/
$page = $this->getRequest()->getParam(‘page’, “index.html”);
[/php]

ソースを見ればすぐわかるのですが、
[php]
abstract class Zend_Controller_Request_Abstract…
public function getParam($key, $default = null)
{
$key = (string) $key;
if (isset($this->_params[$key])) {
return $this->_params[$key];
}
return $default;
}
[/php]
こういう仕組みになっているのに気づかずに、ただ値が入っていない場合はnullを返す、と思っており、

[php]
$page = $this->getRequest()->getParam(‘page’);
$page = !is_null($page) ? $page : “index.html”;
[/php]

という処理にしてました。ということでメモ。

Windowsでsqliteモジュールを組み込む時に気をつけること

Windowsでsqliteモジュールを組み込むには、PDOモジュールを先に組み込まないと
いけません。

extension=php_pdo.dll
extension=php_sqlite.dll

順番が逆(php_sqlite.dllを先に書く)だと、組み込みに失敗してしまいます。当たり前といえば当たり前なんですけど。extensionを書く場所がバラバラだったりすると意外と気づかずにハマってしまいそうです。

気をつけましょう。

Tidy無しのPHPでHMTL Parser

あえてか、仕方なくかでTidyが使えない場合、PHPでHTML Parserのようなことをするには、結構大変です。

そこで、HTMLを整形式のXML文書に修正するPHPクラス、HTMLScrapingを活用させていただきましょう!

さくらインターネットでPECL(PHP5の場合)

自分でコンパイルしたPHP5などで、PECLを使う場合のメモ。

おそらく、PHP本体があるbinディレクトにPECLもあると思うが、無い場合は、

pear config-show

PEAR executables directory bin_dir /home/hoge/YOUR-PHP-PATH

の行で確認する。

PECLからはPHPを使うが、binディレクトリにPHP5があってもPHPが無い場合があるかもしれない。

php5 -v

でバージョン情報を出し、

PHP 5.2.3 (cli) (built: Jul 2 2007 06:08:04)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

cli版であることを確認してリンクを作成しよう。

ln -s php5 php

これでPECLからphpへと無事アクセスできる。
以下、まだ試してないので引用。

参考URL
dozo dokuwiki.php

インストールの途中で出てくるphpizeというコマンドがあるのだが、
これがautoconfとautoheaderを利用する。
しかし、さくらインターネットのデフォルトではパスが通らないため、
あらかじめ環境変数を設定しておく必要がある。

bashの場合

$ export PHP_AUTOCONF=autoconf213
$ export AUTOHEADER=autoheader213

tcshの場合

$ setenv PHP_AUTOCONF autoconf213
$ setenv PHP_AUTOHEADER autoheader213

imagickインストール

ここではimagickを例に取る。
自身が使いたいPECLモジュールに置き換えて読むように。

$ pecl bundle imagick-0.9.13
$ cd imagick
$ phpize
$ ./configure
$ make
$ cp modules/imagick.so /home/dozo/extension/

後はphp.iniに

extension=imagick.so

と書く。

らしい。参考になります。

Zend FrameworkでAdminページを簡単に作るためのコントローラ習作

Zend Frameworkで管理者用の認証ぺージなどを作るための簡単なコントローラです。

[php]
require_once('Zend/Controller/Action.php');
class AdminController extends Zend_Controller_Action
{
public function init()
{
$session = new Zend_Session_Namespace('admin');
if (!$session->auth) {
$this->_forward(‘login’);
}
}

public function indexAction()
{
}

public function loginAction()
{
$session = new Zend_Session_Namespace(‘admin’);
$token = $this->getRequest()->getParam(‘token’);
$pass = $this->getRequest()->getParam(‘pass’);

if ($token === $session->token &&
‘YOUR-PASSWORD’ === $pass) {
$session->auth = true;
$this->_forward(‘index’);
}

$token = md5(mt_rand());
$this->view->token = $token;
$session->token = $token;

}
}
?>

[/php]

init()メソッドはコントローラで1番最初に(コンストラクタで)読み込まれますので、コントローラの初期設定などを入れ込んでおくのに適しています。

LoginAction用のHTMLテンプレートの中に、$tokenを埋め込むフォームを入れておきましょう!

[html]

[/html]

長いβを抜けてついにXdebug 2.0.0 リリース

Xdebug 2.0.0がリリースされたようです。おお、これは! ついにって感じです。長かったですね。
正式リリースを迎え、ついにPECLでinstallする時に-betaを付けなくていいぞわーい、、、ってそこを喜んでどうする>私。
これで勢いづいてPDTもXdebug対応になると嬉しいのですが。

Smartyならとても簡単にポップアップが出せる

世に色々なJavascriptツールチップライブラリがありますが、Smartyを使っている方ならとても簡単にポップアップが出せちゃいます。
とはいいつつも、Javascriptライブラリを使用するんですケド。

overLIB

上記のoverLIBを使用します。

ポップアップを使いたいSmartyテンプレートで
[smarty]
{popup_init src=”/scripts/overlib.js”}
[/smarty]
overlib.jsを呼び出して、

使いたいHTMLタグに付ける属性のような感じで{popup text=”"}を記入します。

[smarty]
this
[/smarty]

これなら気軽にポップアップを使用できますね。

とっても簡単なのでさくっと出来たサンプルを置いておきます。

[smarty]
this

sticky=true
caption="PHP-SeeD"
text="


snapx=10
snapy=10}>PHP-SeeD
[/smarty]

Smartyマニュアルにデザインの変え方など詳しい情報が載っていますのでより詳しく知りたい方はそちらをどうぞ。