p0t: 地味コード

PHP::Compatを使わぬとは! PEARへの愛が足りぬ!

投稿者 halt : 2006年02月07日 14:52

haltさんの叱咤によりPEAR愛が高まったというかPHP::Compatに俄然興味が出たので調べてみました。

PHP::Compatのcompatはcompatibility(互換性)の略で、後のバージョンで新しく出来た関数や定数をヘボイバージョンにも提供してくれる素晴らしいライブラリだそうです。 特に前述のPATH_SEPARATOR(: or ;)やDIRECTORY_SEPARATOR(/ or \)やPHP_EOL(\n or \r\n or \r)などの無いと激しく萎える存在を提供してくれるのでありがたい。関数も単体でloadできるのでシンプルで良い。 アプリに手を入れずに古いPHPで動かしたい場合にiniのauto_prepend_fileディレクティブにこれらの読み込みファイルを設定してみるっつーのも試してみる価値ありそう!

ついでに気になったPHP_CompatInfoも調べてみました。

PEAR :: Package :: PHP_CompatInfo

>> Description PHP_CompatInfo will parse a file/folder/script/array to find out the minimum version and extensions required for it to run. Features advanced debug output which shows which functions require which version and CLI output script

こっちはPHPのコードを調べてバージョンいくつ以上で動くのか調べてくれるらしい。試しにmojavi-all-classes.phpを調べてみました。

fakemac:~/src/mojavi-2.0.0% cat ~/project/php-examples/compat/compatinfo.php
#!/usr/bin/env php
<?php
require_once("PHP/CompatInfo/Cli.php");
$ci = new PHP_CompatInfo_Cli();
$ci->run();
?>
fakemac:~/src/mojavi-2.0.0% ~/project/php-examples/compat/compatinfo.php --file=mojavi-all-classes.php
+------------------------+---------+------------+------------------+
| File                   | Version | Extensions | Constants/Tokens |
+------------------------+---------+------------+------------------+
| mojavi-all-classes.php | 5.0.0   | session    | implements       |
|                        |         |            | interface        |
|                        |         |            | protected        |
|                        |         |            | private          |
|                        |         |            | __LINE__         |
|                        |         |            | final            |
|                        |         |            | clone            |
|                        |         |            | throw            |
|                        |         |            | catch            |
|                        |         |            | abstract         |
+------------------------+---------+------------+------------------+

5.0.0?んなこたぁないハズ。おれの理解が間違ってるのかも!

debian woodyのPHP 4.1.2でPATH_SEPARATORが無いとお嘆きの方へ。

!defined("PATH_SEPARATOR") and strtoupper(substr(PHP_OS, 0, 3) !== "WIN") ? define("PATH_SEPARATOR", ":") : define("PATH_SEPARATOR", ";");

php4以外にもlibphp-でいくつかあるということを知りました。 気になったのがその中にあるlibphp-diogenes。

diogenesって何だと思って調べてみました。

Polytechnique.org Free Software -Diogenes-

diogenesってCMSがあってそれに使われてるライブラリだそうです。

diogene-2.png

diogene-1.png

これで作られてるサイト例、

  • x-org.polytechnique.org
  • dev.jerryweb.org
  • doc.polytechnique.org

と、いわれてもどれも知らんな・・・。 ぱっと見wysiwygエディタが目を引いた。 といってもEkitというGPLのappletを使ってるらしい。 ここはひとつJSでがんばって欲しいところ。 残念ながらソースを見る気力が無かったのでここまで!

ref: PHP関連のパッケージ

Fedora Core 5はPHPの環境が充実している – よくきたblog

今少しだけFedora Core 5 test 2を試用しているんだけどphp関連のパッケージが結構充実しています

smartyやadodbまでパッケージになってるとは。こういうとこが地味に嬉しかったりするので気になる。

Debian etchではどうなってんのか調べてみた。

colinux:~% apt-cache search ^php4
php4 - server-side, HTML-embedded scripting language (meta-package)
php4-apd - PHP code execution profiler and debugger
php4-cgi - server-side, HTML-embedded scripting language (CGI binary)
php4-clamavlib - PHP ClamAV Lib - ClamAV Interface for PHP4 Scripts
php4-cli - command-line interpreter for the php4 scripting language
php4-common - Common files for packages built from the php4 source
php4-curl - CURL module for php4
php4-dev - Files for PHP4 module development
php4-domxml - XMLv2 module for php4
php4-gd - GD module for php4
php4-gpib - libgpib php bindings
php4-idn - PHP api for the IDNA library
php4-imagick - ImageMagick module for php4
php4-imap - IMAP module for php4
php4-interbase - InterBase (FireBird) module for PHP4
php4-json - json serialiser for PHP4
php4-ldap - LDAP module for php4
php4-mapscript - module for php4-cgi to use mapserver
php4-maxdb - PHP extension to access MaxDB databases
php4-mcal - MCAL calendar module for php4
php4-mcrypt - MCrypt module for php4
php4-mhash - MHASH module for php4
php4-mysql - MySQL module for php4
php4-odbc - ODBC module for php4
php4-pear - PHP Extension and Application Repository (transitional package)
php4-pear-log - Log module for PEAR
php4-pgsql - PostgreSQL module for php4
php4-ps - An extension to create PostScript files
php4-recode - Character recoding module for php4
php4-snmp - SNMP module for php4
php4-spplus - Secured payment system of the Caisse d'Epargne (French bank)
php4-sqlite - PHP4 bindings to SQLite, a file-based SQL engine
php4-sqlrelay - SQL Relay PHP API
php4-sybase - Sybase / MS SQL Server module for php4
php4-syck - YAML parser kit -- PHP4 bindings
php4-uuid - OSSP uuid module for php4
php4-xslt - XSLT module for php4

ああ、やっぱりFedora Core 5の方が揃ってる気がする!

mixiコミュニティ [Let’s PHP]

4: xxxxxxx

投書ありがとうございます。

まだちょっとゆっくり話します。小さいxxx研究団体の日本代表部に仕事しますから日本語をあまり喋られないけど、機会を与える会社があれば進行が早いですよ。

場数を踏んでいて敏腕を振るいたいですね。相応な会社を知れば紹介して下さい!

斬新なやる気表現に心打たれた! たぶん文法は間違ってないと思うよ!

Apacheメモ。

ヘッダや404ページでソフトのバージョンとかを出さない

ServerTokens Prod   # Headerから情報を消す
ServerSignature Off # Errorページ等から情報を消す

※Apache2xではServerTokensだけで両方消える。

fakemac:~% HEAD http://localhost/foo
404 Not Found
Connection: close
Date: Mon, 23 Jan 2006 09:45:43 GMT
<strong>Server: Apache/2.0.55 (Debian) PHP/4.4.0-4</strong>
Content-Type: text/html; charset=iso-8859-1
Client-Date: Mon, 23 Jan 2006 09:45:43 GMT
Client-Peer: 127.0.0.1:80
Client-Response-Num: 1
fakemac:~% GET http://localhost/foo
&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"&gt;
&lt;html&gt;&lt;head&gt;
&lt;title&gt;404 Not Found&lt;/title&gt;
&lt;/head&gt;&lt;body&gt;
&lt;h1&gt;Not Found&lt;/h1&gt;
&lt;p&gt;The requested URL /foo was not found on this server.&lt;/p&gt;
&lt;hr&gt;
<strong>&lt;address&gt;Apache/2.0.55 (Debian) PHP/4.4.0-4 Server at localhost Port 80&lt;/address&gt;</strong>
&lt;/body&gt;&lt;/html&gt;

これが、

fakemac:~% HEAD http://localhost/foo
404 Not Found
Connection: close
Date: Mon, 23 Jan 2006 09:46:01 GMT
<strong>Server: Apache</strong>
Content-Type: text/html; charset=iso-8859-1
Client-Date: Mon, 23 Jan 2006 09:46:01 GMT
Client-Peer: 127.0.0.1:80
Client-Response-Num: 1
fakemac:~% GET http://localhost/foo
&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"&gt;
&lt;html&gt;&lt;head&gt;
&lt;title&gt;404 Not Found&lt;/title&gt;
&lt;/head&gt;&lt;body&gt;
&lt;h1&gt;Not Found&lt;/h1&gt;
&lt;p&gt;The requested URL /foo was not found on this server.&lt;/p&gt;
&lt;hr&gt;
<strong>&lt;address&gt;Apache Server at localhost Port 80&lt;/address&gt;</strong>
&lt;/body&gt;&lt;/html&gt;

こうなる。(さっそくGETを使い始めた野郎)

PHP: htmlspecialchars_decode – Manual

htmlspecialchars_decode

(PHP 5 >= 5.1.0RC1) htmlspecialchars_decode— 特殊な HTML エンティティを文字に戻す

全米の↓この関数の持ち主が泣いた。。。

function unhtmlspecialchars($str) {
    $entry = array_flip(get_html_translation_table(HTML_SPECIALCHARS));
    return strtr($str, $entry);
}
PRADOバージョン3.0aリリース – HotPHPPER News

PHP 5専用のフレームワークであるPRADOのバージョン3.0aがリリースされました。 日本ではmojaviや最近ではsymfonyが有名ですが、PRADOも一部では期待されているフレームワークです。

PHP Pro Podcastに作者が出てましたが、JSFみたいなイベントドリブンのフレームワークってことで他とはかなり違いそうです。超面白そう。 あと作者は少し落ち着け。(噛み過ぎ)

PHPの “そんなのあるんだったらはじめに教えといてくれよ!” シリーズ

PEAR Pager。 ページング処理(↓こういうやつ)をやってくれるライブラリ。

paging.png

自分のPHP開発環境について。

ちまたでよく言うWcPE(Windows coLinux Putty + Emacs)というやつです。 ・・・よく言わない上にウザいですか、そうですか。

Sooeyさんのとこを見てたら環境以外にも書いてアップして確認するみたいな開発のライフサイクルもわかると 参考になっていいなと思いました。

仕事時のライフサイクルはどんなのが普通なんだろう。おれは

  • Emacsで編集
  • coLinux上のApacheで確認
  • 切りの良いところでチームで共通のテスト環境にアップ
    (rsync -rzC -e ssh ~/project/foo foo@dev.foo.com:/www)
  • テスト環境上のApacheで確認
  • OKだったらCVSにコミット
  • 1に戻る

て感じです。(おれもUnitテストとかしたい。Subversionに移行したい。)

wcpe.png

ref: PHPどうやって開発してる?