複数Webサーバ、単一セッション管理時のsession_start()。
セッションIDがかぶるかもしれない問題用。

アドホック過ぎなのであってるかどうか心配です。

<?php
function session_start_uniq() {
    if (isset($_COOKIE[ini_get("session.name")])) {
        $sid = $_COOKIE[ini_get("session.name")];
    } elseif (ini_get("session.use_only_cookies") != 1 and isset($_GET[ini_get("session.name")])) {
        $sid = $_GET[ini_get("session.name")];
    } else {
        $server_addr = isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"] : "";
        $sid = md5($server_addr.uniqid(rand(), true));
    }
    session_id($sid);
    session_start();
    return $sid;
}
?>

ref: PHPのセッションID4

Raw Template Engine用のMojavi2 Renderer作りました。

やっつけ仕事用に使います。

RawRenderer.class.php

<?php
//
// RawRenderer - Renderer for Raw Template Engine.
//
// Copyright (C) 2005 Masaki Komagata <komagata@p0t.jp> 
//     All rights reserved.
//     This is free software with ABSOLUTELY NO WARRANTY.
//
// You can redistribute it and/or modify it under the terms of 
// the PHP License, version 3.0.
//
require_once "Raw.php";

class RawRenderer extends Renderer {
    function RawRenderer() {
        parent::Renderer();
        $this->engine =& new Raw;
    }

    function execute(&$controller, &$request, &$user) {
        if ($this->template === null) {
            trigger_error("A Raw template has not been specified", E_USER_ERROR);
        }

        $this->setAttributeByRef("controller", $controller);
        $this->setAttributeByRef("mojavi", $controller->getMojavi());
        $this->setAttributeByRef("request", $request);
        $this->setAttributeByRef("user", $user);

        if ($this->isPathAbsolute($this->template)) {
            $dir = dirname($this->template)."/";
            $this->template = basename($this->template);
        } else {
            $dir = ($this->dir === null) ? $controller->getModuleDir()."templates/" : $this->dir;
            if (!is_readable($dir . $this->template) && is_readable(TEMPLATE_DIR . $this->template)) {
                $dir = TEMPLATE_DIR;
            }
        }

        if (is_readable($dir.$this->template)) {
            $this->engine->template_dir = $dir;
            if ($this->mode  RENDER_VAR || $controller->getRenderMode()  RENDER_VAR) {
                $this->result = $this->engine->fetch($this->template);
            } else {
                $this->engine->display($this->template);
            }
        } else {
            trigger_error(””Template file $dir${this}->template does not exist or is not readable””, E_USER_ERROR);
        }
    }

    function &getAttribute($name) {
        $attribute =& $this->engine->template_vars[$name];
        return $attribute;
    }

    function removeAttribute($name) {
        unset($this->engine->template_vars[$name]);
    }

    function setArray($array) {
        $this->engine->assign($array);
    }

    function setArrayByRef(&$array) {
        $this->engine->assign_by_ref($array);
    }

    function setAttribute($name, $value) {
        $this->engine->assign($name, $value);
    }

    function setAttributeByRef($name, &$value) {
        $this->engine->assign_by_ref($name, $value);
    }
}
?>

FooView_success.php(使い方):

<?php
require_once(BASE_DIR."opt/renderers/RawRenderer.class.php");

class IndexView extends View {
    function &execute(&$controller, &$request, &$user) {
        $renderer = new RawRenderer();
        $renderer->setTemplate("Index.php");
        $renderer->setAttribute("message", $request->getAttribute("message"));
        return $renderer;
    }
}
?>

テンプレはRawと同じで。
デフォルトのRendererと違うところは、

  • 変数がグローバルに展開される。(Rendererは$template)
  • $controller, $request, $userが最初からassignされてる。(SmartyRendererと同じ)

デフォルトのRendererでその2点だけが気に入らなかったんですよね!

ref: Raw Template Engine

blog.xole.net : pregとevalでPHP6にする!(ネタ

はいらない。 また、(...)や[...]でarray(...)に置き換えとかやってみた。 ( via: kunitの日記 – [PHP] 配列の簡易書式 ) いろんな構文を単にpreg_replace()でeval()してるだけ!

うける。 設定ファイルとかに使えないかな?

PHPエンジニア向けキャリアアップセミナーと登録説明会 – HotPHPPER News

株式会社デジタルスケープによりPHPエンジニア向けキャリアアップセミナー&登録説明会が開催されます。 これは無料で参加できるセミナーで、講師として株式会社アシアルの田中さんが講師を担当されるようです。

む、ちょっと興味が。 行ってきた人の話聞いてみたい。

kunitの日記

・・・がPHPにもあればもっとすっきりかけるんだけどな。必ず「array(....)」とかかないといけないので見た目が複雑になる。これがRubyやPerlのように「[....]」とか「(.....)」のようにかけるとほんとすっきりするんだけどな・・・

これはほんとにほしい。

クラスが出てこないフレームワーク、AwesomeFrameworkを更新しました。

AwesomeFramework-0.7.0.tar.gz

変更点は

  • 余計なものを省いた。
  • assign, assign_by_ref関数追加。

というより短いのでソースコードを見たほうが早いです。

index.php:(フレームワーク本体)

<?php
//
// AwesomeFramework - extremely simple framework.
//
// Copyright (C) 2005 Masaki Komagata <komagata@p0t.jp> 
//     All rights reserved.
//     This is free software with ABSOLUTELY NO WARRANTY.
//
// You can redistribute it and/or modify it under the terms of 
// the PHP License, version 3.0.
//
define("AF_DEFAULT_ACTION", "default");
define("VERSION", "0.7.0");

$vars = array();
forward(isset($_REQUEST["a"]) ? $_REQUEST["a"] : AF_DEFAULT_ACTION);

function forward($action) {
    global $vars;
    extract($vars);
    unset($vars);
    include "{$action}.php";
}

function fetch($action) {
    ob_start();
    forward($action);
    $buffer = ob_get_contents();
    ob_end_clean();
    return $buffer;
}

function assign($name, $value) {
    global $vars;
    $vars[$name] = $value;
}

function assign_by_ref($name, &$value) {
    $vars[$name] =& $value;
}
?>

default.php:(サンプルアプリ:Action)

<?php
assign("message", "World");
forward("view");
?>

view.php:(サンプルアプリ:View)

<html>
<head><title>Hello World</title></head>
<body>
Hello <?=$message?>.
</body>
</html>

自分でライブラリやツールを書いた時、「本当にAwesomeFrameworkより便利か?」と自問して余計に複雑な物を作らないための戒め的存在!
自分で最小限の物を書いてみないと本当にわかったかどうか実感が持てないので地味に修正して行きたいです。

lighttpd FastCGI は mod_perl Apache1.3 より1割ほど高速 :: Drk7jp

PHP のインストール lighttpd で PHP を FastCGI として使う場合は、—enable-fastcgi オプションが必須。

lighttpdではFastCGIでPHP使えるんですね。 ちょっとやってみたい。

[php-study 125] php-studyの皆さんへの課題(仮)

勝手な提案ですが、近いうちにPHPerのRSSをあつめた Planetシステムを公開するのでPHP界のアルファブロガーの方は 自分のブログのPHPカテゴリだけを抽出したRSSフィードを作って下さい。

カテゴリPHPのFeed、前々から作らなきゃいけないと思ってたのでMTのテンプレで用意しました。 (PHPには全然関係無い方法なのでMLには投稿できない・・・。)

http://p0t.jp/mt/php.rdf

Matzにっき(2005-08-04)

PHPは言語じゃない。バッチ的にも使えるようになったけど、使うべきというわけじゃない。 私は(他のツールについて改めて学ぶのが面倒なので)PHPをバッチに使うこともあるけど。(Rasmus)

ちょwwwwww

PHP 観測所日誌 – Ethna に手を出してみた

いいね!

今は Ethna で何か作りつつ Haste のリリース待ちデス。

Ethnaの強力なエヴァンジェリストがっ!