Apelog

PHPの設定はphp.ini、 httpd.conf、 .htaccessの順に読み込まれ変更可能なら新しい値で上書きされる。

どのレベルで上書き出来ないかはマニュアルのphp.iniディレクティブ参照。

php.iniディレクティブで書かれているものはPHPで決められているもので、別途httpd.confレベルで変更の可否が指定出来る(.htaccessで変更出来ない)。

httpd.confのphp.ini設定で使用出来る値は以下の4つ。

  • php_value
  • php_flag
  • php_admin_value
  • php_admin_flag

php_adminが付いた方で指定する事で.htaccessでの変更を制限する。

php_admin_value name value
指定した設定オプションに値を設定します。このディレクティブは、.htaccess ファイルでは利用できません。また、 php_admin_value で設定された設定オプションの値は、.htaccess では上書きできません。 セット済みの値をクリアしたい場合は、none を 値として使用してください。
php_admin_flag name on|off
設定オプションに論理値を設定するために使用します。 このディレクティブは、.htaccess ファイルでは利用できません。 php_admin_value で設定された設定オプションの値は、.htaccess では上書きできません。

PHP: 設定を変更するには – Manual

専用サーバーだと設定する事は少なそうなもののインフラとシステムの構築が分かれたりする場合、この方法で制限を掛けれるので(もちろんApache経由での実行に限る)覚えておくと良いかも

Debianは標準でEximというMTAが入っているが、日本では余り馴染みが無くPostfixQmailを使う事が多い。

DebianはQmailのバイナリパッケージが用意されていないのでソースパッケージからインストールを行う(DebianのポリシーにQmaiのライセンス形態が合わなかったらしく用意されていない)。

以下Debian4.0にQmailのインストール方法

eximアンインストール

# apt-get remove --purge exim4 exim4-base exim4-config

ソースパッケージ取得用にapt-getの設定に追記

# vi /etc/apt/sources.list
deb, deb-src の行末に non-free 追記

パッケージの取得・インストール

# apt-get update
# apt-get install qmail-src ucspi-tcp-src
# build-ucspi-tcp
# build-qmail

設定追記・テストメール送信

# echo "your.domain" >> /var/qmail/control/me
# echo "your.domain" >> /var/qmail/control/rcpthosts
# echo "your.domain" >> /var/qmail/control/locals

# echo "test" | mail "your@mailaddress"

で、テストメールを確認して完了。

Postfixの場合はバイナリパッケージが用意されているのでapt-getで入れれば自動的にEximもアンインストールされる。

標準のZend Viewより使い慣れたSmartyを使いたかったので差し替えてみることに。

Zend Framework: Document – 35.3.2. 別のテンプレートシステムの使用の項目だけだとSmartyは呼び出せても実際どうやってControllerに組み込むの?となってしまう。

とりあえずControllerのViewを差し替えてみるかと思いZend_Controller_Actionを継承してinit()でSmartyを差し替えた。

<?php
class Sample_Controller_Action extends Zend_Controller_Action {
    /**
     * @var Zend_Config
     */
    protected $_config;

    public function init() {
        // コンフィグの読み込み
        $this->_config = Zend_Registry::get('config');

        $extraParams = array(
            'compile_dir' => $config->smarty->compile_dir,
        );
        $this->view = new Sample_View_Smarty(null, $extraParams);
        $this->viewSuffix = 'tpl';
    }
}

が、上記だと上手くいかなかったわけで。

続いてActionHelperのViewRendererとしてSmartyを登録する方法で挑戦。

 $config->smarty->compile_dir,
);

// マニュアルに書かれているSmarty用View
$view = new Sample_View_Smarty(null, $extraParams);

$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
$viewRenderer->setViewBasePathSpec($config->smarty->template_dir)
    ->setViewScriptPathSpec(':controller/:action.:suffix')
    ->setViewScriptPathNoControllerSpec(':action.:suffix')
    ->setViewSuffix('tpl');

Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);

上記方法で変更出来た。

これは継承したinit()では書かず、Controllerが呼ばれる前に書いた(Zend_Controller_Front::run()の前)。複数のテンプレートエンジン使い分ける事はほとんど無いと思われるのでこれで大丈夫かなと。

ほぼ年齢の計算式

年齢の計算式は良く使う。

MySQLはマニュアルにも書いてあるけど。

SELECT (YEAR(CURDATE())-YEAR(`birth`)) - (RIGHT(CURDATE(), 5) > RIGHT(`birth`, 5)) AS `age`

プログラムで書く場合

((現在日時-生年月日)/10000)切り上げ
$birth = 19830221;
echo (int) ((date('Ymd') - $birth) /10000);

となる。が「ほぼ」年齢の計算式と書いたのは正確には「誕生日の前日が終了する瞬間」に年齢が加算されるので前日には年齢が上がっている。

利用する業務によってはその1日で大きな違いにもなる。以下のリンクに具体的な問題点などの指摘があるので留意。

ある地方公務員電算担当のナヤミ
「生年月日から年齢を計算する簡単な計算式」は使えるとは限らない