2007年6月 6日 (水)

Smartyを使っていてApacheが落ちた

PHPでの開発中、突如として以下のようなログを吐いてApacheが落ちる現象が発生した。

[notice] Parent: child process exited with status 3221225477 -- Restarting.

「確実にこのリンクを踏むと落ちる」というのは分かったので、ともかく追跡を開始。

結果的に、相互参照しているオブジェクトをSmartyのテンプレートにアサインした状態で、Smartyのデバッグコンソールを表示させると落ちるということが判明した。

続きを読む "Smartyを使っていてApacheが落ちた"

| | コメント (0) | トラックバック (0)

2007年5月18日 (金)

LDAPでADのグループに所属するメンバを取得する

LDAPでActiveDirectoryを操作することはよくありますが、
数千名からなるグループにユーザを登録/削除するのは初めてでした。

システム開発に携わったことがある人であれば
お分かりでしょうが、データの規模がある程度の
レベルを超えると必ずといっていいほど予想外の
ことが起きてきます。

今回はそんなお話。ちなみに使用する言語はPHPですが、
他言語でも同じことが言えます。

続きを読む "LDAPでADのグループに所属するメンバを取得する"

| | コメント (0) | トラックバック (0)

2007年5月 9日 (水)

MOPBの成果を取り込んだPHP 5.2.2と4.4.7が リリース

Month of PHP Bugsといえば、今年の3月に行われたPHP本体が抱えるセキュリティホールの指摘プロジェクトです。その指摘を受けてバグフィクスがなされたバージョンがリリースされたとのこと。

リンク: CodeZine:[PHPプロ!] MOPBの成果を取り込んだPHP 5.2.2と4.4.7が リリース(バージョンアップ, PHP).

これはぜひともバージョンアップしたいですね。

本家ダウンロードページはこちらです。

| | コメント (0) | トラックバック (0)

2006年1月24日 (火)

PEAR::DBでOracleをもうちょっと便利に(2)

続いて、DB_DataOcjectがOracleのViewを見つけてくれるようにするためのHackです。

DB_DataObjectには、ジェネレータに渡す設定ファイルにbuild_viewsといって、ViewについてもTableと同じようなクラスを自動生成させるオプションがあるのですが、PostgreSQLなど一部のRDBMSにしか対応しておりません。それをOracleでもできるようにしよう、という修正です。

前回のパッチがあたっていることを前提に、

DB/oci8.php
1111,1112d1100
<             case 'views':
<                 return 'SELECT view_name FROM user_views';

これだけです。

| | コメント (0) | トラックバック (0)

PEAR::DBでOracleをもうちょっと便利に(1)

PEAR::DBやPEAR::DB_DataObjectを使っていると、PEAR::DBがOracleにおざなりな対応しかしていないために、いろいろと不便な思いをすることがあり、自分で解析してHackしてしまうことが、ままあります。

今回のHackは、OracleのPrimary Key制約をDB_DataObjectが自動的に見つけられるようにするためのものです。

DB/oci8.php
1005,1017c1005,1008
<             $q_fields= 'SELECT t.column_name, t.data_type, t.data_length, '
<                        . '     t.nullable, c.position '
<                        . 'FROM user_tab_columns t,'
<                        . '    (SELECT ucc.table_name, ucc.column_name, ucc.position'
<                        . '     FROM   user_constraints uc, user_cons_columns ucc'
<                        . '     WHERE  uc.owner = ucc.owner AND'
<                        . '            uc.constraint_name = ucc.constraint_name AND'
<                        . '            uc.constraint_type = 'P' AND '
<                        . '            uc.table_name = ucc.table_name) c '
<                        . "WHERE t.table_name = '$result' AND "
<                        . '      t.table_name = c.table_name(+) AND'
<                        . '      t.column_name = c.column_name(+) '
<                        . 'ORDER BY t.column_id';
---
>             $q_fields = 'SELECT column_name, data_type, data_length, '
>                         . 'nullable '
>                         . 'FROM user_tab_columns '
>                         . "WHERE table_name='$result' ORDER BY column_id";
1035,1036c1026
<                     'flags' => ((@OCIResult($stmt, 4) == 'N') ? 'not_null' : '') .
<                                ((@OCIResult($stmt, 5) > 0) ? ' primary' : ''),
---
>                     'flags' => (@OCIResult($stmt, 4) == 'N') ? 'not_null' : '',

これで、少なくともPrimary Key制約は自動的に取ってこれるようになります。また必要になったらUnique Keyなども取れるようにするかもしれませんが、今回はこれまで。

| | コメント (0) | トラックバック (0)