[php-study 217] Re: 3月勉強会開催日変更と参加者初期化のおしらせ

「Ethnaを利用して何か作ってみよう」という事で 参加者はノートパソコン等を持参していただき、 (別に限定するわけではないのでXoopsモジュールでも良いですが) Ethnaを利用した何かを一人一つ作ってみようというものです。 (パソコンない人はペアプログラミングでもおもしろそうです。)

とりあえずEthnaを知らない人も多いと思うので 私がEthnaの基本的な操作説明を行います。 Ethnaを知らない方はその操作説明で基本的な使いかたを覚えてください。

その後、各自適当に自分の作りたいものを作ります。 自分一人でもくもくと作業するのもよいですが、 他人のソースや開発環境をのぞいてみるのもおもしろいかと思います。

タダでEthnaが覚えられる!ってことで25日の勉強会申し込みましたー! もう面倒臭いからコード書いちゃおうぜって感じが実践的でイイ。予習しとかないと・・・。 コード!コード!コード!(白目)

p0t: Beautifyしてくれねえ

http://www.waterproof.fr/products/phpCodeBeautifier/

とかってどうでしょうか?確かPEARの書式にも変換できた気がします。

Posted by shimooka at March 20, 2006 09:41 PM

shimookaさんよりBeautify情報。早速試してみました。どうやらPHPEditっていうエディタの副産物のようです。当然Windowsアプリ。

phpCodeBeautifier http://www.waterproof.fr/products/phpCodeBeautifier/

php_code_beautifier.png

おお、ほぼ完璧じゃないスか。これはいいものだぁあー

と、思ったらコマンドラインからだと何故かほとんどのオプションが利かない。そんでこんな感じになる。

C:\WINDOWS\Temp\phpCB-devel-0.8-2003-09-18>phpCB --comment-rendering-style PEAR
--equal-align-position 50 --padding-char-count 4 dirty.php
<?
require_once("Foo/Bar.php");
$foo = foo();
function connect (& $dsn, $persistent = false){
     if(is_array($dsn))
        {
         $dsninfo = & $dsn;
         }
    else
        {
         $dsninfo = DB :: parseDSN($dsn);
         }

     if(!$dsninfo || !$dsninfo['phptype'])
    {
         return $this -> raiseError();
         }
     return true;
    }
?>

バッチ的に古いコードを一括で変換したいところ!

PHPコーディングスタイル矯正中のおれですが、これが標準だと思うと「コレはコレで結構・・・」とかなってきて書き途中のコードも全部PEARスタイルにしたくなってきた。手で全部直すのはかったりぃので昔気になってたPEAR PHP_Beautifierを試してみることにしました。PHP_Beautifierはいまだに0.1.7(beta)だそうなのでまたpreferred_stateをbetaに、

colinux:~% sudo pear config-set preferred_state beta

そしてなぜかPHP5じゃなきゃ駄目らしいので切り替え

colinux:~% sudo update-alternatives --config php

やっと入った。

colinux:~% sudo pear install PHP_Beautifier

これでphp_beautifierコマンドが使えるようになるので試しにこんな感じのコードをBeautifyしてもらう。

colinux:~% cat ~/www/php-examples/dirty.php
<?
require_once("Foo/Bar.php");
$foo=foo();
function connect ( &$dsn,$persistent=false ){
  if( is_array($dsn) )
  {
    $dsninfo = &$dsn;
  }
  else
  {
    $dsninfo = DB::parseDSN($dsn);
  }

  if( !$dsninfo || !$dsninfo['phptype'] )
  {
    return $this->raiseError();
  }
  return true;
}
?>

PEARスタイルに変えてくれそうな設定で変換。

colinux:~% php_beautifier -l "Pear()" ~/www/php-examples/dirty.php
<?
require_once ("Foo/Bar.php");

$foo = foo();

function  connect ( &$dsn, $persistent = false)
{

  if ( is_array($dsn)) {

    $dsninfo =  &$dsn;
    } else {

    $dsninfo =  DB::parseDSN($dsn);
    }

  if ( !$dsninfo ||  !$dsninfo['phptype']) {

    return  $this->raiseError();
    }

  return  true;
}

?>
Mar 20 19:26:10 php_beautifier [info] Filters used: Pear
Mar 20 19:26:10 php_beautifier [info] /home/komagata/www/php-examples/dirty.php to STDOUT done
Mar 20 19:26:10 php_beautifier [info] 0 seconds needed

うわっ、なにこれ、びみょう・・・。

コードを見やすくするためにPHPのコーディングスタイルもPEAR標準に従って読みやすくしていきたい。

よく読んでみるとPEAR標準コーディング規約は結構細かく書いてある。viやemacsでの設定も書いてあるので便利だ。大まかにまとめるとこんな感じ。
  • インデントはスペース4個(タブは駄目)
  • 半角75-85 文字ごとに改行することを推奨。(必須ではない)
  • if, for, while, switch等の制御構造と括弧の間はスペース1個。
  • 制御構造の中括弧は条件と同じ行。(間はスペース1個)
  • 関数コールでの関数名と括弧の間にはスペース無し。
  • 代入のイコールの左右はスペースを入れる。(沢山入れて見栄えを揃えても良い)
  • 関数定義の中括弧は次の行の関数名と同じ位置。(one true braceと言うらしい)
  • デフォルト値付き引数は引数リストの終わりに置くこと。(なるべく右側ってこと)
  • Perl/Shell形式のコメントは使ってはいけない。
  • include~およびrequire~は命令であり関数ではないので括弧は付けない。
  • PHPショートタグは使ってはいけない。(<?のこと)
  • 文字エンコードは ISO-8859-1 を使用しなければならない。
  • 改行はLF。
  • PHP終了タグ(?>)の後は改行を一つ入れる。
  • 変数展開や特殊文字を含まない文字列はシングルクォートを使う。(via koyhogeさん)

大体こんな感じのコードになるようです。

&lt;?php
require_once 'Foo/Bar.php';

$foo = foo();

function connect(&$dsn, $persistent = false)
{
    if (is_array($dsn)) {
        $dsninfo = &$dsn;
    } else {
        $dsninfo = DB::parseDSN($dsn);
    }

    if (!$dsninfo || !$dsninfo['phptype']) {
        return $this-&gt;raiseError();
    }

    return true;
}
?&gt;

意外と「うわっ、勘弁してくれよ!」っていう感想の人が多いんじゃないでしょうか。おれもそうですが、頑張って自分の体を合わせて行きたい!(ドM)

PEAR :: Manual :: コードの提供

コードの提供にあたっての要求事項

コード自体およびパッケージの著者に対して、 いくつかの要求事項があります。

  1. 標準コーディング規約への合致

新しいパッケージの作成か、既存のパッケージへの付加かに係わらず、 PEAR にコードを提供する場合は、 標準コーディング規約 に合致している必要があります。 標準コーディング規約というものが良いものかどうかについては 多くの議論がありましたが、絶対に必要なものであるとの決定に達しました。 さらに議論する意義はありません。

「Debian WoodyにあるPHPがPHP4.1.2だったので、PHP5.1.2が出たら使う!」

とか豪語してから1年以上経ってすっかり忘れてましたが・・・・・・・・・もう出てんじゃん!!!

EtchにもPHP5.1.2入ってるし、いまからつかってきますよ!(糞遅)

去年の12月2日に出てたPHP5対応のPHPDocumentor 1.3.0RC5(beta)を使ってMojavi4のAPI Documentを出して見ました。

普通に

colinux:~% sudo pear install PHPDocumentor

してもPHP4用の1.2.3(stable)が入っちゃうのでpreferred_state(優先する状態?)をbetaに設定する。

colinux:~% sudo pear config-set preferred_state beta
config-set succeeded

お、できた。

colinux:~% sudo pear config-get preferred_state
beta

確認。

PHPDocumentorのインストールは何故かメモリをPHPデフォルトの8M以上使うらしく、途中で落ちるのでCLI版PHPのmemory_limitを適当に増やしとく。(Debian etchの場合のCLI版PHP5のphp.iniは/etc/php5/cli/php.ini)

PHPDocumentorのオプションは使うたびにきれいさっぱり忘れてるのでメモ。

phpdoc -d /home/komagata/work/4.0.0-DEV/trunk/source/share/packages/ -t /home/komagata/work/mojavi4-doc -o HTML:Smarty:PHP -ti 'Mojavi 4.0.0 API Reference Manual'

あとはCSSを適当なMojaviカラー(勝手に思ってる)に変更して完成。

Mojavi4 API Document

ついでにMojavi3のも作ってMojavi Japanから見れるようにアップしときました。更新されるたびにBuildするとかいう泥臭い作業をおれがやりますのでどうぞお使い下さい。

今まで考えないようにしてきたPHP4と5の共存について、ちょっとだけ薄目開けて取り組んでみました。

とりあえず、何とかなりそうなCLI版の方のPHP4をインストール。(Debian etch)

colinux:~% sudo apt-get install php4-cli

PHP5もインストール。

colinux:~% sudo apt-get install php5-cli

pagerみたいにalternativesが使えれば簡単に切り替えられるはず。

colinux:~% sudo update-alternatives --display php
php - status is manual.
 link currently points to /usr/bin/php4
/usr/bin/php4 - priority 40
 slave php.1.gz: /usr/share/man/man1/php4.1.gz
/usr/bin/php5 - priority 50
 slave php.1.gz: /usr/share/man/man1/php5.1.gz
Current `best' version is /usr/bin/php5.

つかえた。

colinux:~% sudo update-alternatives --set php /usr/bin/php4
colinux:~% php -v
PHP 4.4.2-1 (cli) (built: Jan 18 2006 12:33:46)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

CLIに関しては安心した。でもapacheモジュールの方は・・・?

mod_php4をインストール

colinux:~% sudo apt-get install libapache2-mod-php4

そしてmod_php5をインストール

colinux:~% sudo apt-get install libapache2-mod-php5
パッケージリストを読みこんでいます... 完了
依存関係ツリーを作成しています... 完了
<strong>以下のパッケージは「削除」されます:
  libapache2-mod-php4</strong>
以下のパッケージが新たにインストールされます:
  libapache2-mod-php5
アップグレード: 0 個、新規インストール: 1 個、削除: 1 個、保留: 1 個。
2341kB 中 0B のアーカイブを取得する必要があります。
展開後に追加で 2081kB のディスク容量が消費されます。
続行しますか [Y/n]?

えー削除かよー。 etchのapache2では各モジュールのconfが/etc/apache2/mods-availableディレクトリにはいって、/etc/apache2/mods-enabledディレクトリからそっちへシンボリックリンクを張ると有効になるって感じになってるらしい。

colinux:~% ls /etc/apache2
README        conf.d   httpd.conf  mods-available  ports.conf       sites-enabled
apache2.conf  envvars  magic       mods-enabled    sites-available  ssl
colinux:~% ls /etc/apache2/mods-available
actions.load      cgid.load        imap.load        <strong>php5.load</strong>           suexec.load
asis.load         dav.load         include.load     proxy.conf          unique_id.load
auth_anon.load    dav_fs.conf      info.load        proxy.load          userdir.conf
auth_dbm.load     dav_fs.load      ldap.load        proxy_connect.load  userdir.load
auth_digest.load  deflate.load     mem_cache.load   proxy_ftp.load      usertrack.load
auth_ldap.load    disk_cache.load  mime_magic.conf  proxy_http.load     vhost_alias.load
cache.load        expires.load     mime_magic.load  rewrite.load
cern_meta.load    ext_filter.load  <strong>php4.conf</strong>        speling.load
cgi.load          file_cache.load  <strong>php4.load</strong>        ssl.conf
cgid.conf         headers.load     <strong>php5.conf</strong>        ssl.load
colinux:~% ll /etc/apache2/mods-enabled
合計 0
lrwxr-xr-x  1 root root 36 2005-12-12 23:06 cgi.load -&gt; /etc/apache2/mods-available/cgi.load
<strong>lrwxr-xr-x  1 root root 37 2006-02-20 00:38 php5.conf -&gt; /etc/apache2/mods-available/php5.conf
lrwxr-xr-x  1 root root 37 2006-02-20 00:38 php5.load -&gt; /etc/apache2/mods-available/php5.load</strong>
lrwxr-xr-x  1 root root 40 2005-12-11 18:22 userdir.conf -&gt; /etc/apache2/mods-available/userdir.conf
lrwxr-xr-x  1 root root 40 2005-12-11 18:22 userdir.load -&gt; /etc/apache2/mods-available/userdir.load

自分の手でシンボリックリンク張ったり消したりするしかないのかな? なんか仕組みがありそうな気がする!

FrapprJapan PHP Users Groupのとこをみてて気づいたんですが、

beatcraft.png

ちょwww離宮wwwwwwwww うそつけwwww

変数の状態を表示するdBugの紹介 – HotPHPPER News

きれいなprint_r()系の奴。PEAR Var_Dumpとかと違って気になったのはresource型も展開してるとこ。どうやってるんだろ。

switch(get_resource_type($var)) {
    case "fbsql result":
    case "mssql result":
    case "msql query":
    case "pgsql result":
    case "sybase-db result":
    case "sybase-ct result":
    case "mysql result":
        <strong>$db=current(explode(" ",get_resource_type($var)));</strong>
        $this-&gt;varIsDBResource($var,$db);
        break;
    case "gd":
        $this-&gt;varIsGDResource($var);
    break;
    case "xml":
        $this-&gt;varIsXmlResource($var);
        break;
    default:
        echo get_resource_type($var).$this-&gt;closeTDRow();
        break;
}

なるほど・・・。

resouce型一覧に無いから勘だけど、

*** dBug.php.bk 2006-02-15 07:55:27.000000000 +0900
--- dBug.php    2006-02-15 07:55:10.000000000 +0900
***************
*** 262,267 ****
--- 262,268 ----
                        case "sybase-db result":
                        case "sybase-ct result":
                        case "mysql result":
+                       case "sqlite result":
                                $db=current(explode(" ",get_resource_type($var)));
                                $this-&gt;varIsDBResource($var,$db);
                                break;

とかしたらsqliteもいけそ。

michael schurter >> Blog Archive >> Thank God for PHP_Compat

Thank God for PHP_Compat. Here’s how easy it is to use file_put_contents() in PHP4:

file_get_contents()が大好物なおれですが、そうなんですよ、PHP_Compatの何がThank Godなのかってfile_put_contents()がPHP4で使えることに決まってんだろ!ちったあ頭使え!コノ野郎!

fakemac:~% php -r 'require "PHP/Compat/Function/file_put_contents.php";
file_put_contents("foo.txt", "unk");'
fakemac:~% cat foo.txt
unk

オー ボーイ!