tohokuaikiのチラシの裏

技術的ネタとか。

fwriteでPHPが落ちる?エラーログなし・・・

ハマり中。

メールの自動処理をEthnaCLIでやろうとして、procmailにて引っかけたんだけど、どーも動かない。

ErrorログはFILEで取ってるんだけど、これが出ない。

ていうか、procmailを通さないでフツーにPHP-CLIで動作させたら何の問題もなく。


引っかかるのは、
Ethna/class/Plugin/Logwriter/Ethna_Plugin_Logwriter_File.php

<?php
    /**
     *  ログを出力する
     *
     *  @access public
     *  @param  int     $level      ログレベル(LOG_DEBUG, LOG_NOTICE...)
     *  @param  string  $message    ログメッセージ(+引数)
     */
    function log($level, $message)
    {
        if ($this->fp == null) {
            return;
        }

        $prefix = strftime('%Y/%m/%d %H:%M:%S ') . $this->ident;
        if (array_key_exists("pid", $this->option)) {
            $prefix .= sprintf('[%d]', getmypid());
        }
        $prefix .= sprintf('(%s): ', $this->_getLogLevelName($level));
        if (array_key_exists("function", $this->option) ||
            array_key_exists("pos", $this->option)) {
            $tmp = "";
            $bt = $this->_getBacktrace();
            if ($bt && array_key_exists("function", $this->option) && $bt['function']) {
                $tmp .= $bt['function'];
            }
            if ($bt && array_key_exists("pos", $this->option) && $bt['pos']) {
                $tmp .= $tmp ? sprintf('(%s)', $bt['pos']) : $bt['pos'];
            }
            if ($tmp) {
                $prefix .= $tmp . ": ";
            }
        }
        fwrite($this->fp, $prefix . $message . "\n");  // <<<<<<<<<< ココ

これ付きとめるのにも、えらい時間かかったんだけど、さて、これからどーしようって感じ。

ファイルポインタは間違いなく、リソースで開けてるし、$prefixや$messageも問題なし。第3引数をあたえても何のお変りもなく。

ていうか、ログが出ねーんだよ。なぜか。パタンと問答無用で死ぬ。

@CentOS5のPHP5


だれか、EthnaCLIProcmail動作させてる人居ないかなぁ。・・・・いねーかw。