2017年11月18日(土) 02:23 JST

RSS Aggregator改造版にdescription追加

  • 投稿者:
  • 表示回数 3,758
Geeklog

ユーザの方から「RSS_Aggregatorでフィードのdescriptionを表示できないか?」というお問い合せがあった。何せ1年半ほど前に作ったスクリプトなので、覚えていない。アーカイブを引っ張り出してみると、わずかなコードの追加で実現できそうなことが分かったので、さっさと仕上げてアップロードした。ユーザの方からのフィードバック、リクエスト(あまり過大なものは困るが(^^;))こそがフリーソフトウェア作者を動かす力なのだと思う。


Pollsプラグインで不可解な現象

  • 投稿者:
  • 表示回数 3,125
プラグイン

本家サイトの掲示板で問題になっているが、Geeklog-1.5.0-1.5.1になって、アンケート(polls)プラグインで削除・編集ができない場合が出てきている。Dirkさんの記事によると、PHPのセキュリティを高めるためのSuhosinパッチで、一度にPOSTできるフォーム変数の数の初期値が200に制限されているため、この数を超えた大きなアンケートを作ると問題の現象が発生するとのこと。対策としては、

  • php.iniを設定できる場合は、suhosin.post.max_varsの数を増やす。下記参照。
  • アンケートプラグインの設定で、1問あたりの選択肢やオプションを減らす。

目安としては、質問を10個、選択肢もそれぞれ10個ずつ作ると、フォーム変数の合計が300を越えるので、アウト。質問を5個、選択肢を8個ずつにすると、フォーム変数の合計は150個なのでセーフ。

静的ページ(staticpages)で多数のフォーム変数を持つフォームを作成する場合も同様の現象が発生しそうだ。


Pollsプラグインのバグ

  • 投稿者:
  • 表示回数 3,384
プラグイン

Geeklog-1.5.1のpollsプラグインで新規アンケートを保存する際に既存のIDを指定すると、黙って上書きされるというバグを本家のバグトラッカーに登録したところ、「Mercurialのリポジトリでは修正されているはずなので確認してくれ」という返事が来た。TortoiseHGでpullして確認したところ、実際このバグは修正されていた。

ここまではどうということのない話なのだが、じつはリポジトリの開発版をインストールする際に、"Undefined function curl_init" というこれまで見たことのないエラーが出た。コードを調べてみると、public_html/admin/lib-install.php の545-554行目で、指定されたURIが実際存在するかチェックするのにcURL関数を使用していた。

Geeklogの次のバージョン(1.5.2?)では、必要とされるPHPの最低バージョンを現行の4.1.0から引き上げる(予想では、4.3.xくらい。4.x系列切り捨てはしばらくなさそう)ことが話題に上っている。これに加えてcURLエクステンションが必要となると、また敷居が高くなる。正式版では、PEARのHTTP_Requestなどで代用されることを望む。


Geeklogの性能測定(その3)

  • 投稿者:
  • 表示回数 3,417
Geeklog

前々回と同じ環境で(config.class.phpのキャッシュ機能あり)、CTL(Caching Template Library)あり・なしで違いを測定してみた。時間の単位はms(ミリ秒)。結果は以下の通り。

CTLなし CTLあり
平均実行時間(ms)平均比率(%)項目平均実行時間(ms)平均比率(%)
9.89.6index.php自体の読み込み16.213.6
30.429.8lib-common.phpインクルード30.225.4
28.427.8COM_siteFooter()34.429.0
20.219.8COM_siteHeader()21.618.2
7.87.7STORY_renderArticle()10.28.6
2.82.7lib-story.phpインクルード3.02.5
102.0 全体118.8

意外な感じがするが、自分が使用している環境ではCTLの恩恵を感じられず、むしろほんのわずかだがスピードダウンする。CTLとは違う方法で、テンプレートライブラリをハックする方法を考えてみようか。


Geeklogの性能測定(その2)

  • 投稿者:
  • 表示回数 3,295
Geeklog

前回と同じ環境(config.class.phpのキャッシュなし)で、public_html/index.phpにアクセスしたときに、lib-common.phpインクルードにかかる時間の内訳(5回の平均値)。時間の単位はms(ミリ秒)。0.2ms以下のものは適当に省いている。

項目実行時間比率
lib-common.php自体の読み込み19.449.0%
config->initConfig()9.423.7%
config->load_baseconfig()3.17.9%
lib-syndication.phpインクルード1.53.8%
staticpages::functions.incインクルード1.33.3%
links:functions.incインクルード0.82.1%
lib-plugins.phpインクルード0.71.7%
japanaese_utf-8.phpインクルード0.61.4%
polls::functions.incインクルード0.51.2%
smapx::functions.incインクルード0.41.1%
calendar::functions.incインクルード0.30.9%
SEC_getUserGroups()0.20.6%
合計39.6 

意外な感じがするのは、プラグインのfunctions.incをインクルードする時間が長いこと。同梱されている標準の5つのプラグインだけでも3.3ms(全体の8.7%)かかっている。

ついでに、public_html/index.php自体も計測してみた。


Geeklogの性能測定

  • 投稿者:
  • 表示回数 3,526
Geeklog

Geeklog-1.5.0からは$_CONF変数がデータベースに格納されるようになったが、その実装方法があまりきれいではないので、速度低下を招くのではないかと思い、ひろろんさんdengenさんと共にごく簡単なキャッシュを実装していた。大ざっぱに言うと10%程度のスピードアップになりそう。

そのとき話題になったのがlib-common.phpのダイエット。このファイルはGeeklogの基本機能を実装し、必要なライブラリをインクルードしているが、1.5.1で200KBほどある。このlib-common.phpの中でも比較的使用されていないコードやインクルードファイルがあれば、使用時にインクルードすることで、サイズを減らせる。

きちんと性能測定したいなあと思ってXdebug関連を探していたら、[PHPプロファイリング: Xdebug(Xdebug2) + WinCacheGrind]というページを見つけた。早速このページの情報を元に、

  1. XdebugのMS Windows用最新モジュール(php_xdebug-2.0.3-5.2.5.dll)をダウンロードしてPHPのエクステンション用ディレクトリにコピー。
  2. WinCacheGrindをダウンロードして、インストール。
  3. php.iniの書き換え。
    [Zend]
    zend_extension_ts = "C:\PHP\ext\php_xdebug-2.0.3-5.2.5.dll"
    xdebug.profiler_enable = 1
    xdebug.profiler_output_name = cachegrind.out.profile
    xdebug.profiler_output_dir = "C:/temp/xdebug"
    xdebug.auto_trace = On
    

Geeklog-1.5.1のトップページにアクセスすると、lib-common.php処理にかかる時間は以下のようになった。


インクルードファイル直接呼び出し攻撃防止策を追加

  • 投稿者:
  • 表示回数 4,505
プラグイン

Geeklog-1.5.1で、大文字小文字を区別しないファイルシステム(MS Windowsなど)で、インクルードファイルを直接呼び出すことが可能になっていた脆弱性が修正されたが、同様の修正を拙作のDataproxy, Dbman, Sitemap, Themeditプラグインにも行った。機能追加はなし。


カスタム関数管理プラグイン

  • 投稿者:
  • 表示回数 3,791
プラグイン

タイトルの通り、カスタム関数をオンラインで管理するプラグインを試作中。要望があれば公開するつもり。

PS. テキストエディタとFTPしか使わない自分がこのプラグインを使うことはないだろうから、いまいちやる気が起きない。まあ、PHPでファイルをアップロードするスクリプトを書く練習にはなるだろう。

タグ:カスタム関数 プラグイン


PHP-4.x系列でhtml_entity_decode()がエラー

  • 投稿者:
  • 表示回数 5,134
Geeklog

ユーザからのレポートで、 "cannot yet handle MBCS in html_entity_decode()" なるエラーが拙作のプラグインで発生しているらしい。Google先生に訊いてみると、PHP-4.xの場合、マルチバイトはサポートしていないとのこと。改めてマニュアルを読んでみると、確かにそう書いてあった。PHP-4.x系列を使わなくなって久しいので、気づかなかった。

とりあえず、Dbman, Dataproxy, Sitemap, Themeditプラグインはエラーが出ないように修正したバージョンを公開した。

タグ:dbman, dataproxy, sitemap, themedit プラグイン


Dataproxyプラグイン-1.1.1

  • 投稿者:
  • 表示回数 2,995
プラグイン

Geeklog-1.5.0に同梱されているPolls-2.0.1プラグインでサイトマップがエラーになっていたが、データベースの構造が変化していたのが原因だった。対策を施したDataproxy-1.1.1プラグインを公開した。なお、Sitemapプラグインの方は変更する必要はありません。