引き続き、XOOPS Cube Legacy 2.2 ベースでのお話。サーバー環境のせいか、d3downloads 1.47 を利用している時に、以下のような問題が発生していた。
既に d3downloads の更新は停滞しているようなので、自力で何とかしてみることにした。
真っ白けになる問題は こちらのフォーラム を参考に、php.ini の以下の項目を変更する事で対処した。(フォーラムで記載されていた他の項目は、より大きく変更済みだった)
max_execution_time = 300
max_input_time = 600
これで真っ白けっけになることはなくなったが、この問題自体も、d3downloads が重いから発生しているんじゃないかと疑い、その解消に手を付けることに。
Chrome の 要素を検証?Network でボトルネックを調べると、モジュールから呼ばれる lightbox_plus.js がエラーとなっていて、6秒くらい反応待ちをしているようだった。
バージョンが古いのが悪いんじゃないかと新バージョンに置き換え、新しいバージョンでは spica.js が不要になっているので、それを読み込まないようにソースも変更。
・xoops_trust_path/modules/d3downloads/include/common_functions.php 661行目
return array( 'spica.js' , 'lightbox_plus.js' ) ;
を
return array( 'lightbox_plus.js' ) ;
に変更。その後、
xoops_trust_path/modules/d3downloads/include/js/lightbox/js/lightbox_plus.js
を、最新バージョンに置き換えた。
これで再読み込みしても同様に重い。なんでじゃーと思ったら、xoops_root_path の cache ディレクトリにある、キャッシュを消してないからだったorz。
再度キャッシュを消して再読み込みしてみると、劇的に改善。2秒以下で応答してくれるようになった。
しかし、今度は画像で404エラーが出ている。そこで元々 d3downloads に同梱されていた lightbox_plus.js を見てみると、ファイルの一番下で var lightbox ? と変数が指定されているのだが、
元々の d3downloads 同梱のファイルでは、例えば
loadingimg:'mod_url/index.php?page=module_header&src=loading.gif',
となっているのに対し、最新の lightbox_plus.js では、
loadingimg:'resource/loading.gif',
と、画像の呼び出し方が異なっている。xoops_root_path/modules/d3downloads には、当然 resource ディレクトリは存在しないため、画像が404になっていたようだ。
では、と最新バージョンの lightbox_plus.js を d3downloads 同梱の lightbox_plus.js と同様に、mod_url/index.php から画像を呼び出すように変更してみたら、再び激重&エラー表示。この部分がどうやらうちの環境だとうまく動かず、エラーとなっていたようだ。
解決策として、lightbox_plus.js は最新バージョンのものをそのまま使用することとし、xoops_root_path/modules/d3downloads/resource に、使用されている画像データをアップロードすることで対応。以上でエラーは出なくなった。
環境によっては、XOOPS の Module Header で呼び出した Javascript から、さらに PHP を介してデータを呼ぶと、エラーが起こることもあるようだ。
今回は lightbox_plus.js も最新版に入れ替えたが、この問題を回避するだけなら、元々の lightbox_plus.js のファイル呼び出し部分を、
loadingimg:'resource/loading.gif',
などとして、xoops_root_path/modules/d3downloads/resource に画像データを配置しても良かったかもしれない。
以上、d3downloads の問題を解消するために調べた内容まとめでした。