Memo/PHP/PEAR

http://dexlab.net/pukiwiki/index.php?Memo/PHP/PEAR
 

Memo/PHP

PEAR

Openpear

その他

"Cannot find module" エラー

  • エラー
    No log handling enabled - turning on stderr logging
    Cannot find module (IP-MIB): At line 0 in (none)
    Cannot find module (IF-MIB): At line 0 in (none)
    Cannot find module (TCP-MIB): At line 0 in (none)
    Cannot find module (UDP-MIB): At line 0 in (none)
    Cannot find module (HOST-RESOURCES-MIB): At line 0 in (none)
    Cannot find module (SNMPv2-MIB): At line 0 in (none)
    Cannot find module (SNMPv2-SMI): At line 0 in (none)
    Cannot find module (NOTIFICATION-LOG-MIB): At line 0 in (none)
    Cannot find module (UCD-SNMP-MIB): At line 0 in (none)
    Cannot find module (UCD-DEMO-MIB): At line 0 in (none)
    Cannot find module (SNMP-TARGET-MIB): At line 0 in (none)
    Cannot find module (NET-SNMP-AGENT-MIB): At line 0 in (none)
    Cannot find module (HOST-RESOURCES-TYPES): At line 0 in (none)
    Cannot find module (LM-SENSORS-MIB): At line 0 in (none)
    Cannot find module (IPV6-ICMP-MIB): At line 0 in (none)
    Cannot find module (IPV6-MIB): At line 0 in (none)
    Cannot find module (IPV6-TCP-MIB): At line 0 in (none)
    Cannot find module (IPV6-UDP-MIB): At line 0 in (none)
    Cannot find module (SNMP-VIEW-BASED-ACM-MIB): At line 0 in (none)
    Cannot find module (SNMP-COMMUNITY-MIB): At line 0 in (none)
    Cannot find module (UCD-DLMOD-MIB): At line 0 in (none)
    Cannot find module (SNMP-FRAMEWORK-MIB): At line 0 in (none)
    Cannot find module (SNMP-MPD-MIB): At line 0 in (none)
    Cannot find module (SNMP-USER-BASED-SM-MIB): At line 0 in (none)
    Cannot find module (SNMP-NOTIFICATION-MIB): At line 0 in (none)
    Cannot find module (SNMPv2-TM): At line 0 in (none)
  • 解決
    # yum install net-snmp

"No handlers for package.xml version 2.0" エラー

  • PEARが古いために起こるエラーの模様。以下2回コマンドを実行する必要がある。
    pear upgrade -a PEAR-1.3.6
    pear upgrade -a PEAR
  • それでもうまくいかない場合は、個別にアップグレードする。
    • CentOS release 4.5 (Final)
      pear upgrade -a PEAR-1.3.6
      pear upgrade Archive_Tar
      pear upgrade Structures_Graph
      pear upgrade PEAR
      pear channel-update pear.php.net
      pear upgrade-all

PEAR_Errorによるdebug_backtraceをskip(off)

PEAR_ErrorのバックトレースをOFFにする方法。

  • 長すぎる場合にmemory_limitを超えて、Fatalエラーが発生するときもある。
  • デバックモード時だけバックトレースをONにしたい。
require_once 'PEAR.php';
$isSkiptrace = &PEAR::getStaticProperty('PEAR_Error', 'skiptrace');
$isSkiptrace = true;

XML error at line 1, check URL

# pear search ajax 等で以下のエラーが出る場合

XML error at line 1, check URL 
Invalid return payload: enable debugging to examine incoming payload
  • 解決方法
    # pear upgrade PEAR
    # pear channel-update pear.php.net

現在インストールされているモジュール一覧の取得

シェルが使えれば「pear list」で表示されます。
レンタルサーバ等で何がインストールされているかわからない場合は、以下のように。
改行コードの問題で、ブラウザでは正常に表示されなくても、ソースみればわかります。

<?
echo "<pre>";
passthru("pear list");
echo "</pre>";
?> 

古いバージョンをインストールする

新しいバージョンになり、従来とは違う動作をする場合、古いバージョンをインストールする方法。

例:PEAR::Pager

# pear uninstall Pager
# pear install http://pear.php.net/get/Pager-2.2.7.tgz

セッションをPostgreSQLで管理する(zend)

http://www.zend.com/ にPostgreSQLを用いたユーザーセッションハンドラのソースがありました。

ページング処理(googleのようなページ切り替え)

パッケージ名バージョンメリットデメリット
PEAR::Pagerv2.2.6 (2005-03-14)実装が簡単。
リンクも自動で作成してくれる。
PEARのマニュアル中に日本語解説がある。
実際のデータで絞りこみを行うため大量のデータだと遅い。
totalItemsプロパティに総件数を入れる事で、実際のデータとは分離できる。
よって、DB_Pagerは不要。
PEAR::DB_Pagerv0.7 (2005-03-14)ページ番号しか管理しないため、大量のデータでも実装しだいで、高速に表示できる。
リンクを自分で作成するため、若干面倒。
日本語解説がない。
  • Pager
    • インストール
      pear install Pager
  • DB_Pager
    • インストール
      pear install DB_Pager

長い処理の際の対処

  • popen()で別プロセスで長い処理を走らせ、そのpidでファイルを作り、そのファイルの有無を一定時間(<meta>タグのリフレッシュ等)でチェックする。

1970年以前の日付を扱う

PHPのtimestamp型はUnix Timeなので、1970年1月1日から2038年1月19日GMTしか扱えません。
それ以上の日付を扱いたい場合、pearのDateクラスがあります。
デフォルトはISO形式("YYYY-MM-DD HH:MM:SS")なのでそれを標準とすると、他DBとの連携、移植も楽に行えます。

  1. インストール
    pear install Date
  2. 使い方
    ソース:test.php
    <?
    require_once("Date.php");
    $oDate = new Date("1969-01-01");
    echo $oDate->getDate() . "\n";
    echo $oDate->getDate(DATE_FORMAT_ISO_BASIC) . "\n";
    echo $oDate->getDate(DATE_FORMAT_ISO_EXTENDED) . "\n";
    echo $oDate->getDate(DATE_FORMAT_ISO_EXTENDED_MICROTIME) . "\n";
    echo $oDate->getDate(DATE_FORMAT_TIMESTAMP) . "\n";
    //echo $oDate->getDate(DATE_FORMAT_UNIXTIME) . "\n"; // 1970年以前なのでエラー
    ?>
    実行結果:
    php -q test.php
    1969-01-01 00:00:00
    19690101T000000Z
    1969-01-01T00:00:00Z
    1969-01-01T00:00:0.000000Z
    19690101000000
  3. 便利なモジュールが付属
    1. Date/Calc.php
      1970〜2038年以外の日付計算を行える。
      1. 曜日
        <?
        require_once('Date/Calc.php');
        // 3100年 12月 5日は何曜日?
        $dow = Date_Calc::dayOfWeek(5, 12, 3100);
        echo "dow: $dow<br>\n";
        // dow: 3(日:0 月:1 火:2 水:3 木:4 金:5 土:6)
        ?>
    2. Date/Human.php
    3. Date/Span.php
    4. Date/TimeZone?.php

PHPUnit

モジュールテスト自動化ツール


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-03-12 (月) 12:53:54 (2353d)