「アプリの総ステップ数が知りたい」と言われたので調べました。
find /var/www/app -name *.php | xargs cat | wc -l
少し時間がかかりますとか言いつつこれですませよう。
「アプリの総ステップ数が知りたい」と言われたので調べました。
find /var/www/app -name *.php | xargs cat | wc -l
少し時間がかかりますとか言いつつこれですませよう。
blog.xole.net : script language="php"だって、PHPならこんな風に書けるんですよ?
な、なんだtt(略
クライアントサイドスクリプトみたいに見える!いっそブラウザにPHPのエンジン積んでくれよ!
複数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作りました。
やっつけ仕事用に使います。
<?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でその2点だけが気に入らなかったんですよね!
ref: Raw Template Engine
単純フレームワークAwesomeFrameworkを更新。
変更点
依存性を緩やかにするといってもDIではなく、ブルース・テイトが言っていた「Ruby などの言語では DI コンテナや AOP は必要ない」 のはなんでなんだろう?と思って考えてみました。
また見たほうが早いのでコード。
index.php(フレームワーク本体):
<?php
define("AF_DEFAULT_ACTION", "default");
define("VERSION", "0.8.1");
$vars = array();
<strong>$dependency = array();
include_once "dependency.php";</strong>
forward(isset($_REQUEST["a"]) ? $_REQUEST["a"] : AF_DEFAULT_ACTION);
function forward($action) {
<strong> extract($GLOBALS["dependency"]);</strong>
extract($GLOBALS["vars"]);
include "$action.php";
}
function fetch($action) {
ob_start();
forward($action);
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
function redirect($action) {
header("Location: index.php?a=$action");
}
function assign($name, $value) {
$GLOBALS["vars"][$name] = $value;
}
function assign_by_ref($name, &$value) {
$GLOBALS["vars"][$name] =& $value;
}
?>
dependency.php(設定ファイル):
<?php
include_once "SampleCalculator.php";
$dependency["Calculator"] = "SampleCalculator";
?>
SampleCalculator.php(ロジック):
<?php
class SampleCalculator {
function add($var1, $var2) {
return $var1 + $var2;
}
}
?>
default.php(アクション):
<?php
$calc = new $Calculator();
assign("result", $calc->add(1, 2));
forward("view");
?>
view.php(ビュー):
<html>
<head><title>Hello Calculator</title></head>
<body>
1 + 2 = <?=$result?>
</body>
</html>
依存性を排除するには動的型付け言語の場合、単に依存するクラス名を変数にして設定ファイルに出せばいいんじゃないだろうか?これだと制御は反転しないし、依存性は注入されない。だからDIコンテナは要らないってことなんじゃなかろうか。
Code InjectionでAOPにCode Generateでメタプログラミング? これからはやっぱCode Replacementでしょ!!!
・・・トラブルの宝庫。
開発環境移行計画。
目指す環境: coLinux debian sarge emacs
これだけのことになんと時間を費やしてることか・・・。
coLinux, sargeインストール:
(略
sarge UTF-8化:
sudo apt-get install locales lv
cat "export LANG=ja_JP.UTF-8" >> ~/.bash_profile
ssh, cvs
sudo apt-get install keychain cvs
echo "keychain ~/.ssh/id_dsa" >> ~/.bash_profile
echo "source ~/.keychain/${HOSTNAME}-sh" >> ~/.bash_profile
echo "export CVS_RSH=ssh" >> ~/.bash_profile
emacs, utf-8, php:
sudo apt-get install emacs21 mule-ucs php-elisp
(set-language-environment "Japanese")
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
未解決:
phpのコードを書いてると関係無い部分の文字が壊れる。
タブ(インデント)の扱いがよくわからない。
emacs-lispの記述の意味がさっぱりわからない。
emacs + php説明の素敵なページはどこか!
emacsで混乱したときにvimを立ち上げると死ぬほど癒される。このままではっ、まずい・・・。
- GNU Emacsデスクトップリファレンス
- オライリー・ジャパン(1999-06)
- (著)デブラ キャメロン
- (原著)Debra Cameron
- (翻訳)日本ルーセントテクノロジー
- 定価:¥ 683
- 新品価格:¥ 683
- 中古価格:¥ 380
- ASIN:4900900931
blog.xole.net : pregとevalでPHP6にする!(ネタはいらない。 また、(...)や[...]でarray(...)に置き換えとかやってみた。 ( via: kunitの日記 – [PHP] 配列の簡易書式 ) いろんな構文を単にpreg_replace()でeval()してるだけ!
うける。 設定ファイルとかに使えないかな?
俺もそこ問題だと思います。
http://forum.mojavi.org/index.php?showtopic=1119&hl=e_user_notice自分ではここだけは2.0.3βから直して使ってますが、(略
とか言った手前、2.0.3bに対するパッチとパッチ当て済み2.0.3b2をアップしました。
*** mojavi.bk/opt/logging/ErrorLogger.class.php 2005-11-18 06:39:17.570000000 -0500
--- mojavi/opt/logging/ErrorLogger.class.php 2005-11-18 06:37:55.900000000 -0500
***************
*** 197,213 ****
switch ($level)
{
case E_USER_NOTICE:
$this->info($message, NULL, NULL, $file, $line);
break;
case E_USER_WARNING:
$this->warning($message, NULL, NULL, $file, $line);
break;
- case E_USER_ERROR:
default:
$this->fatal($message, NULL, NULL, $file, $line);
--- 197,216 ----
switch ($level)
{
+ case E_NOTICE:
case E_USER_NOTICE:
$this->info($message, NULL, NULL, $file, $line);
break;
+ case E_WARNING;
+ case E_CORE_WARNING:
+ case E_COMPILE_WARNING:
case E_USER_WARNING:
$this->warning($message, NULL, NULL, $file, $line);
break;
default:
$this->fatal($message, NULL, NULL, $file, $line);PHPエンジニア向けキャリアアップセミナーと登録説明会 – HotPHPPER News株式会社デジタルスケープによりPHPエンジニア向けキャリアアップセミナー&登録説明会が開催されます。 これは無料で参加できるセミナーで、講師として株式会社アシアルの田中さんが講師を担当されるようです。
む、ちょっと興味が。 行ってきた人の話聞いてみたい。