akkun_choi pedia
mindia › akkun_choi pedia › 単語

Phing

akkun_choi · 2009-11-02 更新 · 履歴(7)
第 2 版(2008-08-15 17:59:00 · akkun_choi)を表示しています。 最新版に戻る

PHP版ant。情報があんまりないなぁ…。Symfonyで使われてるみたいだけど。

http://phing.info/trac/

ユーザガイド
http://phing.info/docs/guide/current/

インストール

% pear channel-discover pear.phing.info
% pear install phing/phing

サンプル

例)temp,logディレクトリを作成して、777にする

build.xml
>|xml|
<?xml version="1.0"?>
<project name="myproject" default="install" basedir=".">
<target name="install">
<echo msg="Making directory" />
<mkdir dir="temp" />
<mkdir dir="log" />
<chmod file="temp" mode="0777" />
<chmod file="log" mode="0777" />
</target>
</project>
||<

build.xmlがあるディレクトリでコマンドを実行
% phing

タスク

CapsuleTask

テンプレートを使ってファイル生成する。例えば自分でscaffoldみたいなことが作れる。CapsuleというのはPhingが用意した素のPHPによるテンプレートエンジン。テンプレート内で<?php echo $var ?>とかやって変数出力する。素のPHPだからテンプレート内でコードも書けるので手軽。同じようなものにSmartyTaskがある。

指定しなければならないプロパティ

Zend_Config, Zend_DBを使ってmigrateするタスク

lib/DbMigrateTask.php
>|php|
<?php
include_once 'phing/Task.php';

class DbMigrateTask extends Task{
protected $connectorFile;

/**
* @var Zend_Db_Adapter_Abstract
*/
private $db;

/**
* @var FileSet
*/
private $filesets;
public function addFileset(FileSet $set) {
$this->filesets[] = $set;
}

function main(){
require_once('Zend/Config/Ini.php');
$config = new Zend_Config_Ini($this->connectorFile);

require_once('Zend/Db.php');
$this->db = Zend_Db::factory($config->database);

// deal with the filesets
foreach($this->filesets as $fs) {
$ds = $fs->getDirectoryScanner($this->project);
$srcDir = $fs->getDir($this->project);
$srcFiles = $ds->getIncludedFiles();

$this->run_sql($srcDir, $srcFiles);
}

}
function run_sql($dir, $files){
foreach ($files as $file){
$path = $dir . DIRECTORY_SEPARATOR . $file;
$this->log("load $path");

$sql = trim(file_get_contents($path));
$sqls = split('\s*;\s*', $sql);
foreach ($sqls as $s){
$manip = '';
$table_name = '';
if (!$s) continue;
if (preg_match('/create table(?: if not exists)? `(\w+)`/i', $s, $match)){
$manip = 'create table';
$table_name = $match[1];
}else if (preg_match('/alter table `(\w+)`/i', $s, $match)){
$manip = 'alter table';
$table_name = $match[1];
}
$this->db->query($s);
$this->log("$manip $table_name OK");
}
}
}

function setConnectorFile($file){
$this->connectorFile = $file;
}
}
?>
||<

build.xml
>|xml|
<project name="myproject" default="install" basedir=".">
<taskdef name="dbmigrate" classname="mindia.task.DbMigrateTask" classpath="lib" />
<target name="install">
<dbmigrate connectorFile="config/server.ini">
<fileset dir="application/db">
<include name="*.sql" />
</fileset>
</dbmigrate>
</target>
</project>
||<

config/server.ini
[database]
adapter = Pdo_MySQL
params.engine = mysql
params.username = akkun
params.password = password
params.host = localhost
params.dbname = mydatabase

後はapplication/dbディレクトリに実行したいsqlファイルをいれてphing!

履歴

タグ

「Phing」タグが付けられた単語