読者です 読者をやめる 読者になる 読者になる

php Call to undefined method PEAR_Error::xxx() エラーについて

<?php
$workbook = new Spreadsheet_Excel_Writer();
$worksheet =& $workbook->addWorksheet(mb_convert_encoding($sheet_name, 'sjis-win', 'utf8'));
$worksheet->write(0, 0, mb_convert_encoding('test', 'sjis-win', 'utf8'));

Spreadsheet_Excel_Writerで上記を実行したところ、以下のエラーが発生。

Fatal error: Call to undefined method PEAR_Error::write() in ~

これは「$workbook->addWorksheet()」を実行したときに内部でエラーが起きて、PEAR_ERRORオブジェクトが返却されたため。それで次の「$worksheet->write()」を実行したときにそんなメソッド無いよって怒られた。
例えば以下のようにすることでエラーの内容が分かる。

<?php
$workbook = new Spreadsheet_Excel_Writer();
$worksheet =& $workbook->addWorksheet(mb_convert_encoding($sheet_name, 'sjis-win', 'utf8'));

// 追加
if (PEAR::isError($worksheet)) {
    echo $worksheet->getMessage();
    echo $worksheet->getDebugInfo();
    exit;
}

$worksheet->write(0, 0, mb_convert_encoding('test', 'sjis-win', 'utf8'));

こちらを実行したところ、「Sheetname xxx must be <= 31 chars」と表示された。どうやらシート名の文字数が多かったのが原因だったらしい。

参考サイト
PEAR::Mailを使ってメールの送信ができません - PHPプロ!Q&A掲示板