PostgreSQL ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã¨ãƒªã‚¹ãƒˆã‚¢

PostgreSQL No Comments »

PostgreSQL ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã¨ãƒªã‚¹ãƒˆã‚¢æ–¹æ³•ã®ãƒ¡ãƒ¢

postgres ユーザã«ãªã‚‹

$ su - postgres
パスワードを設定ã—ã¦ã„れã°èžã‹ã‚Œã‚‹ã®ã§å…¥åŠ›ã™ã‚‹ã€‚(当然ã§ã™ãŒï¼‰

データã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—

$ pg_dump DATABASE_NAME > BACKUP_FILENAME

データã®ãƒªã‚¹ãƒˆã‚¢

$ psql -e DATABASE_NAME < BACKUP_FILENAME

データベースã®ä½œæˆ

$ createdb DATABASE_NAME

データベースã®å‰Šé™¤

$ dropdb DATABASE_NAME

phpPgAdmin ã§ãƒ­ã‚°ã‚¤ãƒ³ã§ããªã„

PostgreSQL No Comments »

普段㯠MySQL ã°ã‹ã‚Šä½¿ç”¨ã—ã¦ã„ã‚‹ã®ã§ã™ãŒã€PostgreSQL を使用ã™ã‚‹å¿…è¦ãŒã‚りã€phpPgAdmin を使ã†ã“ã¨ã«ã—ãŸã€‚
開発用ã®ã‚µãƒ¼ãƒã«ã¯ phpPgAdmin ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ãŒã€ãƒ–ラウザã§é–²è¦§ã§ãるよã†ã«ã¯ã¾ã ã—ã¦ã„ãªã‹ã£ãŸã€‚

Open Tech Press | phpPgAdmin:Web開発者å‘ã‘ã®Postgresクライアントツール ã‚’å‚考㫠/usr/share/phpPgAdmin ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ phpPgAdmin をブラウザã§ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã«ã—ãŸã€‚

/etc/http/conf/httpd.conf ã«ä¸‹è¨˜ã‚’追加

Alias /phppgadmin /usr/share/phppgadmin/
<DirectoryMatch /usr/share/phppgadmin/>
  Options +FollowSymLinks
  AllowOverride None
  order deny,allow
  deny from all
  allow from localhost
</DirectoryMatch>

ã“れã§ãƒ–ラウザã‹ã‚‰ http://example.com/phpPgAdmin/ ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã£ãŸã€‚
ã—ã‹ã—ã€PostgreSQL ã®ãƒ¦ãƒ¼ã‚¶ã§ãƒ­ã‚°ã‚¤ãƒ³ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã€‚

ã“れ㯠シン石丸ã®é›»è„³èŠ¸äº‹ãƒ‹ãƒƒã‚­: debian 3.1ã¸ã®phppgadminã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å¾Œã®è¨­å®š ã‚’å‚考ã«ã—ã¦è§£æ±ºã€‚

/etc/postgresql/pg_hba.conf ã«ä¸‹è¨˜ã‚’追加
host all all 127.0.0.1 255.255.255.255 trust

ã“れã§ç„¡äº‹ phpPgAdmin ã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãã¾ã—ãŸã€‚

CakePHP Security コンãƒãƒ¼ãƒãƒ³ãƒˆã®ã¾ã¨ã‚

CakePHP 1 Comment »

CakePHP ã® Security コンãƒãƒ¼ãƒãƒ³ãƒˆ ã®å‹•作を調ã¹ãŸã®ã§ã¾ã¨ã‚ã¦ãŠãã¾ã™ã€‚
ã“ã® Security コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’ã†ã¾ã使用ã™ã‚Œã°ã‚¯ãƒ­ã‚¹ã‚µã‚¤ãƒˆãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ•ォージェリ(CSRF) を防ãã“ã¨ãŒã§ãã‚‹ã§ã—ょã†ã€‚

トークンã®ä½¿ç”¨

フォームã«ãƒ¯ãƒ³ã‚¿ã‚¤ãƒ ãƒˆãƒ¼ã‚¯ãƒ³ã‚’実装ã™ã‚‹æ–¹æ³•ã§ã™ã€‚

コントローラ㮠beforeFilter メソッドã§ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’指定
function beforeFilter() {
    $this->Security->requireAuth('login');
}
ビューã®ãƒ•ォーム内ã«ãƒˆãƒ¼ã‚¯ãƒ³ã‚’設定

<?php echo $html->formTag(); ?>
トークン㌠hidden 属性ã§ç”Ÿæˆã•れる

トークンãŒä¸€è‡´ã—ãªã„å ´åˆ

requireAuth ã§æŒ‡å®šã—ãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã« POST ã§ã‚¢ã‚¯ã‚»ã‚¹ãŒã‚ã‚‹ã¨ã‚»ã‚·ãƒ§ãƒ³ã«ä¿å­˜ã—ãŸãƒˆãƒ¼ã‚¯ãƒ³ã¨ãƒ•ォームã‹ã‚‰é€ã‚‰ã‚Œã¦ããŸãƒˆãƒ¼ã‚¯ãƒ³ãŒä¸€è‡´ã™ã‚‹ã‹ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚ã¾ãŸãã®ã»ã‹ã«ãƒˆãƒ¼ã‚¯ãƒ³ã®æœ‰åŠ¹æœŸé–“ã‚‚ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚有効期間㯠CAKE_SECURITY ã®è¨­å®šã«ã‚ˆã‚Šé•ã„ã¾ã™ã€‚

CAKE_SECURITY 有効期間
high 10分
medium 100分
low 300分

トークンãŒä¸€è‡´ã—ãªã„㨠SecurityComponent ã® blackHole メソッドãŒå®Ÿè¡Œã•れã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã¯
header('HTTP/1.0 404 Not Found');
を出力ã—㦠exit ã—ã¾ã™ã€‚(画é¢ã¯ç©ºç™½ï¼‰

ä»»æ„ã®å‡¦ç†ã‚’実行ã—ãŸã„å ´åˆã¯ blackHoleCallback ã§ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯é–¢æ•°ã‚’指定ã—ã¾ã™ã€‚
設定ã§ãã‚‹ã®ã¯åŒã˜ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©å†…ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®ã¿ã«ãªã‚Šã¾ã™ã€‚

function beforeFilter() {
    $this->Security->blackHoleCallback = "securityError";
    $this->Security->requireAuth('login');
}

function securityError() {
	die("security error!");
}
トークンãƒã‚§ãƒƒã‚¯ã‚’ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’複数指定ã™ã‚‹ã¨ãã¯ã‚«ãƒ³ãƒžã§ã¤ãªã’ã‚‹

$this->requireAuth('login', 'delete');

特定ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã‹ã‚‰ã®ãƒã‚¹ãƒˆã®ã¿è¨±å¯ã™ã‚‹

$this->Security->allowedControllers = array("users");
ã“れを指定ã™ã‚‹ã¨ãŸã¨ãˆãƒˆãƒ¼ã‚¯ãƒ³ãŒä¸€è‡´ã—ã¦ã‚‚許å¯ã®ãªã„コントローラã‹ã‚‰ã®ãƒã‚¹ãƒˆã®å ´åˆã¯ blackHole メソッドを実行ã—ã¾ã™ã€‚

特定ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ã®ãƒã‚¹ãƒˆã®ã¿è¨±å¯ã™ã‚‹

$this->Security->allowedActions = array("action");
ã“れを指定ã™ã‚‹ã¨ãƒˆãƒ¼ã‚¯ãƒ³ãŒä¸€è‡´ã—ã¦ã‚‚許å¯ã®ãªã„アクションã‹ã‚‰ã®ãƒã‚¹ãƒˆã®å ´åˆã¯ blackHole メソッドを実行ã—ã¾ã™ã€‚

ãƒã‚¹ãƒˆã®ã¿å—ã‘付ã‘るよã†ã«ã™ã‚‹

$this->requirePost('login');
ã“れã¯ãƒˆãƒ¼ã‚¯ãƒ³ã¨ã¯é•ã„ã€POST ã®ã¿è¨±å¯ã—㦠GET ã§ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ä¸å¯ã«ã—ã¾ã™ã€‚
/users/login/ ã®ã‚ˆã†ãª URL ã§ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚‚ GET ãªã®ã§ä¸å¯ã«ãªã‚Šã¾ã™ã€‚
POST ã®å‡¦ç†ã ã‘を実行ã—ãŸã„よã†ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«ä½¿ç”¨ã—ã¾ã™ã€‚

CakePHP Textヘルパー㮠truncate を全角文字ã«å¯¾å¿œã•ã›ã¦ã¿ãŸ

CakePHP 1 Comment »

CakePHP ã® Text ヘルパー㫠truncate ã¨ã„ã†æŒ‡å®šã•ã‚ŒãŸæ–‡å­—列を任æ„ã®é•·ã•ã«çœç•¥ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ãŒã‚りã¾ã™ã€‚
ã—ã‹ã—ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯å…¨è§’文字を考慮ã—ã¦ã„ãªã„ãŸã‚全角文字ã«ç”¨ã„ã‚‹ã¨æ–‡å­—化ã‘ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚
ãã“ã§ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’全角文字ã«å¯¾å¿œã•ã›ã¦ã¿ã¾ã—ãŸã€‚

function truncate($text, $length, $ending = '…', $exact = true) {
    if (strlen($text) < = $length) {
        return $text;
    } else {
        mb_internal_encoding("UTF-8");
        if (mb_strlen($text) > $length) {
            $length -= mb_strlen($ending);
            if (!$exact) {
            $text = preg_replace('/\s+?(\S+)?$/', '', mb_substr($text, 0, $length+1));
            }
            return mb_substr($text, 0, $length).$ending;
        } else {
            return $text;
        }
    }
}

直接 Text ヘルパーを修正ã™ã‚‹ã¨ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¢ãƒƒãƒ—ãªã©ã®ã¨ãã«å›°ã‚‹ã®ã§ã€
cake/libs/view/helpers/text.php ã‚’ app/views/helpers/mb_text.php ã«ã‚³ãƒ”ーã—クラスåã‚’
class MbTextHelper extends Helper{
ã¨ã—ã¦ã€truncate メソッドを上記ã®ã‚ˆã†ã«ä¿®æ­£ã—ã¾ã—ãŸã€‚

使用ã™ã‚‹ã¨ãã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©å†…ã§ã€
var $helpers = array("MbText");
view ã§
echo $mbText->truncate("ã‚ã„ã†ãˆãŠã‹ããã‘ã“", 5, "…", true);
ã¨ã™ã‚‹ã¨
ã‚ã„ã†ãˆâ€¦
ã¨è¡¨ç¤ºã•れã¾ã™ã€‚

CakePHP find ã‚„ findAll ã®æ¡ä»¶æŒ‡å®šã«ã¡ã‚‡ã£ã¨ã ã‘便利㪠postConditions

CakePHP No Comments »

CakePHP 㮠コントローラ㫠postConditions ã¨ã„ã†ã¡ã‚‡ã£ã¨ã ã‘便利ãªãƒ¡ã‚½ãƒƒãƒ‰ãŒã‚りã¾ã—ãŸã€‚

cake/libs/controllers.php

function postConditions($data) {
    if (!is_array($data) || empty($data)) {
        return null;
    }
    $conditions = array();

    foreach($data as $model => $fields) {
        foreach($fields as $field => $value) {
            $conditions[$model . '.' . $field] = $value;
        }
    }
    return $conditions;
}

例ãˆã°æ¤œç´¢ã‚’ã™ã‚‹ãƒ•ォームãªã©ã§ User.name ã§æ¤œç´¢ã™ã‚‹ã‚ˆã†ãªå ´åˆ

view ã§
input('User/name');
ã¨æŒ‡å®šã™ã‚‹ã¨$this->data ã¯

Array
(
    [User] => Array
        (
            [name] => 山田
        )
)

ã“ã® $this->data ã‚’ postConditions ã«æ¸¡ã™ã¨
$data = $this->postConditions($this->data);
$data ã¯

Array
(
    [User.name] => 山田
)

ã¨ãªã‚Šã€ã“ã®ã¾ã¾ find ã‚„ findAll ã«æ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚
$this->User->find($data);

å‚考:CakePHP マニュアル
7.2. コントローラã®é–¢æ•°

11月ã«èª­ã‚“ã æœ¬

本 2 Comments »

最近ã¯ä»•äº‹é–¢ä¿‚ã®æœ¬ã‚„è‡ªå·±å•“ç™ºé–¢ä¿‚ã®æœ¬ãŒå¤šã„。特ã«ä»Šå¹´ã¯å°èª¬ã‚’読んã§ãªã„ã®ã§ã€ä»Šæœˆã¯å°‘ã—å°èª¬ã‚’読もã†ã¨æ€ã£ã¦ã„ã¾ã™ã€‚

決算書ãŒã‚¹ãƒ©ã‚¹ãƒ©ã‚ã‹ã‚‹ 財務3表一体ç†è§£æ³• (æœæ—¥æ–°æ›¸ 44) (æœæ—¥æ–°æ›¸ 44)

決算書ãŒã‚¹ãƒ©ã‚¹ãƒ©ã‚ã‹ã‚‹ 財務3表一体ç†è§£æ³• (æœæ—¥æ–°æ›¸ 44) (æœæ—¥æ–°æ›¸ 44)

ã‚ãŸã‚Šã¾ãˆã ã‘ã©ãªã‹ãªã‹ã§ããªã„仕事ã®ãƒ«ãƒ¼ãƒ« (アスカビジãƒã‚¹)

ã‚ãŸã‚Šã¾ãˆã ã‘ã©ãªã‹ãªã‹ã§ããªã„仕事ã®ãƒ«ãƒ¼ãƒ« (アスカビジãƒã‚¹)

ウェブ時代をゆã ─ã„ã‹ã«åƒãã€ã„ã‹ã«å­¦ã¶ã‹ (ã¡ãã¾æ–°æ›¸ 687)

ウェブ時代をゆã ─ã„ã‹ã«åƒãã€ã„ã‹ã«å­¦ã¶ã‹ (ã¡ãã¾æ–°æ›¸ 687)

ãªãœã€ã‚¨ã‚°ã‚¼ã‚¯ãƒ†ã‚£ãƒ–ã¯ã‚´ãƒ«ãƒ•ã‚’ã™ã‚‹ã®ã‹ï¼Ÿ

ãªãœã€ã‚¨ã‚°ã‚¼ã‚¯ãƒ†ã‚£ãƒ–ã¯ã‚´ãƒ«ãƒ•ã‚’ã™ã‚‹ã®ã‹ï¼Ÿ

ã¡ã‚‡ã„デキ! (文春新書 591)

ã¡ã‚‡ã„デキ! (文春新書 591)

ã™ã”ã„「実行力ã€

ã™ã”ã„「実行力ã€

ãªãœã€ã‚¨ã‚°ã‚¼ã‚¯ãƒ†ã‚£ãƒ–ã¯ã‚´ãƒ«ãƒ•ã‚’ã™ã‚‹ã®ã‹ï¼Ÿ

ãªãœã€ã‚¨ã‚°ã‚¼ã‚¯ãƒ†ã‚£ãƒ–ã¯ã‚´ãƒ«ãƒ•ã‚’ã™ã‚‹ã®ã‹ï¼Ÿ

ä»•äº‹ã«æ´»ã‹ã™!本200%活用ブック

ä»•äº‹ã«æ´»ã‹ã™!本200%活用ブック

WEB+DB PRESS Vol.41

WEB+DB PRESS Vol.41

ãŠé‡‘ã¯éŠ€è¡Œã«é ã‘る㪠金èžãƒªãƒ†ãƒ©ã‚·ãƒ¼ã®åŸºæœ¬ã¨å®Ÿè·µ (光文社新書)

ãŠé‡‘ã¯éŠ€è¡Œã«é ã‘る㪠  金èžãƒªãƒ†ãƒ©ã‚·ãƒ¼ã®åŸºæœ¬ã¨å®Ÿè·µ (光文社新書)

プログラミングPHP 第2版

プログラミングPHP 第2版

CakePHPガイドブック

CakePHPガイドブック

å¿™ã—ã„パパã®ãŸã‚ã®å­è‚²ã¦ãƒãƒƒãƒ”ーアドãƒã‚¤ã‚¹

å¿™ã—ã„パパã®ãŸã‚ã®å­è‚²ã¦ãƒãƒƒãƒ”ーアドãƒã‚¤ã‚¹

ケータイ業界52人ãŒèªžã‚‹ã€Œæˆ¦ç•¥ã€ã®è£å´

ケータイ業界52人ãŒèªžã‚‹ã€Œæˆ¦ç•¥ã€ã®è£å´

カリスマ・コンサルタントã®ç¨¼ãè¶…æ€è€ƒæ³• ~仕事ã¨äººç”Ÿã«åйã「å•題解決力ã€ãŒèº«ã«ã¤ã20ã®æ–¹æ³•~

カリスマ・コンサルタントã®ç¨¼ãè¶…æ€è€ƒæ³• ~仕事ã¨äººç”Ÿã«åйã「å•題解決力ã€ãŒèº«ã«ã¤ã20ã®æ–¹æ³•~

è‡ªè»¢è»Šç”Ÿæ´»ã®æ„‰ã—ã¿

è‡ªè»¢è»Šç”Ÿæ´»ã®æ„‰ã—ã¿

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン