Author Archives: commerce

Notice: Undefined offset … PHPExcel.php on line 191

$reader = PHPExcel_IOFactory::createReader('Excel5');
$excel = $reader->load('template.xls');
$tempSheet = $excel->getSheet(0);

for( ある回数分繰り返し ) {
  $cloneSheet = $tempSheet->copy();
  $excel->addSheet( $cloneSheet );
  ( $cloneSheet への編集処理 )
}

$excel->removeSheetByIndex( 0 );

$writer =
  PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$writer->save('new.xls');

で、掲題の
Notice: Undefined offset … PHPExcel.php on line 191
が、出てしまう。

出現箇所は、
$writer->save(‘new.xls’);

編集処理のところに

$cloneSheet->getStyle(‘A1′)->getFont()->setBold(true);

を入れた時点で、このメッセージが出るようになった。

それで、メッセージ内容に従い、PHPExcel.php 191行目をみてみると getActiveSheet() の中で出ていることが判明。

echo “count=” . $this->_workSheetCollection;
echo “index=” . $this->_activeSheetIndex;

とやって、配列数とインデックスを表示するという調査を行ったところ、

$excel->removeSheetByIndex(0)

でシート削除した後も

$excel->addSheet()

した、最終Sheetのインデックスを$this->_activeSheetIndex
として、内部で持っているようである。

なので、シート削除直後に

$excel->setActiveSheetIndex(0);

を挿入することで、掲題のメッセージは表示されなくなった。

なんか、バグっぽい!!

それともうひとつ、

$cloneSheet への編集処理を

$excel->addSheet( $cloneSheet );

の後で行なっているのは何故か?

先に編集処理を行うと、また 編集処理中の setBold() のせいで

PHP Fatal error:  Call to a member function getStyle() on a non-object in Style/Font.php on line 386

になってしまう。

それで、またメッセージ内容に従い、Font.php 386行目を見てみた。

$this->getActiveSheet()->getStyle(…);

でエラーになっているらしい。

つまり、コピーしたばかりの $cloneSheet には、所属するBook(PHPExcelオブジェクト)がなく、getActiveSheet() が失敗するということらしい。

apachectl status で、ステータスが表示されない

$ apachectl status

でステータスが表示されなかったので、調査しました。

【環境】
CentOS 6.2 x86_64
Apache 2.2.15

The ‘links’ package is required for this functionality.

apachectl スクリプトの中身を解析してみると、/usr/bin/links というコマンドがないため発生しているエラーのようです。/usr/bin/links とは何かを調べてみると elinks というテキストブラウザのことでした。

elinks をインストールします。

$ yum -y install elinks

インストール後再度

$ apachectl status

The requested URL /server-status was not found on this server.

やはり、上記エラーメッセージが表示されステータスは表示されません。

また調べてみると、httpd.conf の中に

#<Location /server-status>;
#  SetHandler server-status
#  Order deny,allow
#  Deny from all
#  Allow from .example.com
#</Location>;

という記述が、コメントアウトされていました。 ということで、何も考えずにコメントを外し,

$ apachectl status

You don’t have permission to access /server-status on this server.

まだ、うまくいきません。

エラー文言も変わっていたので前回の修正部分を再度見直しました。 “.example.com” これは、明らかに変なので、localhost に修正しました。

<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from localhost
</Location>
$ apachectl status
Apache Server Status for localhost
Server Version: Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3
Server Built: Dec 8 2011 18:10:49
--------------------------------------------------------------------------
Current Time: Monday, 29-Oct-2012 12:13:43 JST
Restart Time: Monday, 29-Oct-2012 12:13:36 JST
Parent Server Generation: 5
Server uptime: 6 seconds
1 requests currently being processed, 7 idle workers

W_______........................................................
................................................................
................................................................
................................................................

Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process

正しくステータスが表示されたようです。

Windows版PHP実行時のエラー

Windows版PHP5をインストールし、
コマンドラインから、php -v としたとき発生したエラー。
その解決策をメモしました。

Windows 7 Ultimate (x86)
PHP 5.3.18

(1)エラー「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 (DISMAN-EVENT-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)

【原因となるExtension】
php_snmp.dll
【解決策】
net-snmp を正しくインストールするか、php.ini の extension=php_snmp.dll の部分をコメントする。
snmp をどうこうすることもないので、後者を実施しました。

(2)メッセージボックスに「コンピューターに libcs.dll がないため、プログラムを開始できません。」のエラーが表示。

【原因となるExtension】
php_sybase_ct.dll
【解決策】
データベースはMySQLを使用。 sybase は使わないのでコメント

(3)メッセージボックスに「コンピューターに libcs.dll がないため、プログラムを開始できません。」のエラーが表示

【原因となるExtension】
php_intl.dll
【解決策】
Moodleという授業用のWebページを作るためのソフトウェアを使用する際に必要らしいが、その予定もないのでコメント