01647

ustreamer-01647

アスカチェッカー民ブログ新着情報の不具合解消

f:id:paulga:20150112115018p:plain

気付き

2015年1月11日17時の自動更新で,17時以前に投稿した私の記事「Debian 7 Wheezy (stable),安定版との付き合い - 01647」が反映されていなかった.手動更新し,エラーメッセージを受け取った.

Fatal error: Call to a member function get_uri() on a non-object in /home/paul/public_html/lib/simplepie_1.3.mini.php on line 8777

エラー内容と現在のSimplePie

Call to a member function get_uri() on a non-object in simplepie/library/SimplePie/Misc.php on line 83 · Issue #214 · simplepie/simplepie · GitHubによると,この問題は2012年7月12日に発見されていた.そして解決コードは2014年9月8日にマージされていた.

「新着情報」は2012年10月30日リリースの1.3.1を使用していた.不具合解決には,最新のSimplePie使用が適当だろうと思った.GitHubには5ブランチがある

master
1.4開発版
one-dot-two
1.2
cache-backwards-compat
後方互換性キャッシュ
one-dot-three
1.3
feed-class
feed-levelメソッドをSimplePieから独立させる

1.4開発版使用で解決した

READMEによると,使用には2形態あるようだ.分割ファイル形態はautoloader.phpをincludeする1.3以前にあった単一ファイル形態は SimplePie.compiled.php を使用する.私は後者を選んだ.

別のエラー発生とその解決

require_onceの対象を SimplePie.compiled.php に変えただけでは不足だった

Fatal error: Class 'SimplePie_Cache_DB' not found in /home/paul/public_html/lib/SimplePie.compiled.php on line 9513

GitHubではバグとして登録されていた.PHP Fatal error: Class 'SimplePie_Cache_DB' not found · Issue #231 · simplepie/simplepie · GitHub.問題のクラスを以下に示す.

<?php
/**
 * Caches data to a MySQL database
 *
 * Registered for URLs with the "mysql" protocol
 *
 * For example, `mysql://root:password@localhost:3306/mydb?prefix=sp_` will
 * connect to the `mydb` database on `localhost` on port 3306, with the user
 * `root` and the password `password`. All tables will be prefixed with `sp_`
 *
 * @package SimplePie
 * @subpackage Caching
 */
class SimplePie_Cache_MySQL extends SimplePie_Cache_DB

SimplePie_Cache_DBは10111行で定義されていた.

<?php
/**
 * Base class for database-based caches
 *
 * @package SimplePie
 * @subpackage Caching
 */
abstract class SimplePie_Cache_DB implements SimplePie_Cache_Base

このエラーは,継承するクラスが未定義だったために発生したのだろうと思った.SimplePie_Cache_DBの定義を,SimplePie_Cache_MySQLの定義直前に移すと解決した.抜本的解決には build/compile.php を修正,なのだろうと思う.