Yawp

Yawp is Yet Another Web Programming foundation for PHP applications. It is one of the easiest ””frameworks”” you will ever see for PHP (even though it’s not really a framework). Yawp attempts to enhance your own style of programming, not impose a programming method on you.

MVCじゃない1ファイルアプリ向きフレームワークYawp。

ほとんどの機能はYawpクラスを通してPEARを使う感じです。でもリクエストへのアクセサのYawp::getGet, Yawp::getPostって名前はどうなんだろう。MVC嫌い向け。

昨年末からコソーリ始まっているZend PHP Certification日本語版本家ではSelf TestとしてWeb上でいくつかの問題を解くことができるようになったみたいです。それの回答など

以前PHPプロ・スタッフ ゴールドとかいうのを取りましたがこれはZend Japanが独自にやってる資格。Zend PHP Certificationの方は本家がやっている世界的な資格なので断然重要度高いです。

なんだか日本語の本はまったく見つからなかったので泣く泣く英語の方の購入ボタンを押しました。

The Zend Php Certification Practice Test Book: Practice Questions For The Zend Certified Engineer Exam
John Coggeshall Marco Tabini
Marco Tabini & Associates, Inc. (2005/01)
売り上げランキング: 142,851
通常3~5週間以内に発送

ref: Webアプリのセキュリティ

BMediaNode: Spike PHPCoverage

Kim PoleseがCEOを努めるSpikeSourceから、PHP用コードカバレッジツールPHPCoverageがリリースされました。

コードカバレッジとはテストに置いてコードの命令や分岐などをどのくらい網羅したかの指標だそうです。(via Software Testing)

組み込み系とかではかなりキチッとやりそう。興味あるので調べとこう。

PEAR :: Package :: PHP_Archive

Description
PHP_Archive allows you to create a single .phar file containing an entire application.

.pharという要するにJARのPHP版を作るパッケージ。といってもまだリリースされてません。

PHP_Archive gains maturity – Lot 49 – Greg Beaver’s blog

Now, .phar can truly be self-contained archives – no dependencies at all, so that shrink-wrapped applications can be distributed in a single file and run with

$ php app.phar

or in a web browser by associating .phar with php the same way you associate .php

JARとWARの中間みたいな感じで1ファイルにまとめてアプリケーションを実行できるようです。

require_once 'Calendar.phar';
require_once 'Logger.phar';
require_once 'phar://Calendar.phar/Calendar/Arabic.php';
require_once 'phar://Logger.phar/Logger/Mail.php';

こんなように.pharをrequireしたり、アーカイブの中のファイルを指定してrequireしたりできるようです。圧縮した.pharsも使えるようになったとか。
オープンソースのPHPウェブアプリのインストールがもっと簡単になりそうです。

神の子どもたちはみな腕を磨く: PHP

現在開発中のMojavi 2.0.0を使っている案件で$controller->forward()を実行しているアクションの挙動がおかしいので調べたところ、この事実を知ることになり驚愕しました。超ショック。

まさに、「ここはforward()のためにあったのね」でした。ためんなるわあ。

アレのやり方がわかったのでコレを作りました。

<?php
require_once("AllSession.php");
$allSession =& new AllSession();

echo "<pre>";
// セッションIDの配列
print_r($allSession->sessionId);
// $sessions["セッションID"] = セッションの中身
print_r($allSession->sessions);
echo "<pre>";
?>

session.save_pathからsess~というファイルを復元しています。
共有サーバなんかはsafe mode or CGI&SuEXECが必須かもしれないですね。

AllSession.php

ref: セパレータとして ””|”” を使ってるんですよ
ref: PHPのセッション自力復元

Mojavi + DB_DataObject使ってるとやっぱり、

$Member =& DB_DataObject::factory('Member');
$Member->get("userName", $request->getParameter("userName"));
if ($Member->password == md5($request->getParameter("password"))) {
    $user->setAuthenticated(true);
    $user->setAttribute("Member", $Member);
}

こんな感じで$userに$Memberを突っ込んだりしたくなるわけですよ。
でも悲しいことにPHPのセッションはリクエスト毎にファイルにserialize ⇒ ファイルからunserializeをしてるだけなのでunserializeするとき(session_start時)にクラスが宣言されて無いとPHP_Incomplete_Classという謎オブジェクトが。
Mojaviでsession_startはSessionContainer#loadでやっているのでFilterでは遅いようです。しょうがないので
PHP_Incomplete_Classが現れた時に動くコールバック関数を指定するunserialize_callback_funcを使って無理やり読み込むことにしました。

<?php
ini_set("unserialize_callback_func", "findIncompleteClass");

function findIncompleteClass($className) {
    $config = parse_ini_file(BASE_DIR."configs/DB_DataObject.ini", true);
    $name = str_replace(strtolower($config["DB_DataObject"]["class_prefix"]), "", $className);
    include_once($config["DB_DataObject"]["require_prefix"]."/".$name.".php");
}
?>

これもっといい方法無いのかな。

PEAR :: PEPr :: Details :: RSSBuilder

This is an RSS (Reach Site Summary) PHP Class, which make use of PHP DOM extension to produce valid RSS Feeds in one of the most common RSS formats such as ‘RSS 0.91’, ‘RSS 0.92’, ‘RSS 1.0’, ‘RSS 2.0’, ‘Atom’, ‘JavaScript’. The output maybe cached in a file. For more info take a look at ’./RSSBuilder/example.php’.

正しいRSSを作ってくれそうなRSSBuilderがPEAR proposalに。

書く方は普通に書いてもそんなに大変じゃないですが、コレ使ったら気持ちよさそう。

よくきたblog

xxxio : $_SESSION[‘foo’]の、fooの所に使える文字って、きまりありましたっけ?
xxxio : うーん。””|”“が入ってると上手く動かない気がする
xxxio : php5.0.3 / FC2 なんですけど、そもそも /tmp/sess_XXXXX の中って、
xxxio : セパレータとして ””|”” を使ってるんですよ

セッションの話。
そうそう、セパレータに””|”“を使ってるんですよね!

セッション変数名|中身をserializeしたやつ;セッション変数名|中身をserializeしたやつ;

ってなってるんですよね。これ簡単なパースのやり方無いかな。
このクラスができたら楽しいけどsafe modeじゃない共有レンタルサーバとかすっごい危険。

ref: PHPのセッション自力復元

PEAR :: PEPr :: Details :: Auth_TypeKey

The Auth_TypeKey package provides verification method using TypeKey Authentication. TypeKey is one of single sign-in service for weblog comments and others provided by Six Apart.

Blogネ申平田さんが以前公開されたPHPでTypeKeyを扱うクラスAuth-TypeKeyがPEARのProposaleに入っています。
認証で何気にTypeKey使ってたらおしゃれかもしれません。