サイトの不具合を、オンラインでコードを書き換えていました。原因は、クエリだったようだ。どうもおかしいとは思っていましたが、私の目は悪い物は見ないようにできているようです。
Jboardのトピック表示で、ページナビと表示数があってない・・・。おかしい。dumpするわけにもいかず(恥ずかしいし)、ログファイル出力するコードを挿入してからファイルにdumpして確認していました。
1週間くらい前からだろうか、次のバージョンのJBackup(早くしなきゃ)の最終テストとしながら、ダミー記事20,000タイトル(1タイトル、2000ワード。SQLデータで260MBにもなる。)をテスト用Joomla!1.5に入れ何度もテストを行っています。ところが、何度やってもなかなかサイトが表示されない。おかしい。あまりにも遅い(表示に5分以上かかる)のでプラグインをオフにしてみた。・・・でも、遅いではないか。えっ!これってJoomla!の限界!?
20,000タイトルごときで、と思う方もいるかもしれない。・・・まあ、20,000タイトルなんてそんなサイトなかなか無いと思うが、記事としてではなく、データとして20,000以上あるものは、ざらにあるのではないか。
そこで、何が原因か少し設定を変えて試してみた。
あら、あっさりと、速くなったではないか・・・。そこで一つずつオフにしたモジュールをオンにしていった。で、オンにしたら極端に遅くなったモジュールを列挙。
対策を考えて、そしてその対策を行った結果、104秒かかっていた処理時間が、1秒になった。なんと104分の1です。んだこれ。mod_latestnewsもmod_mostreadも同様なので208秒(3分28秒)くらいかかっていた時間が、2秒です。3分もサイトが表示されるのを待っている人なんてクリックしてから、「ご飯だよ~。」と呼ばれた人くらいのものだ。
で、その対策は以下
$query = 'SELECT a.*,' .
を
$query = 'SELECT a.title, a.access, a.sectionid,' .
のように変更するだけです。
念のため、phpMyAdminでも変更前のクエリで実行してみたらほぼ同じように104秒前後の結果でした。
クエリは、必要なフィールドだけにしましょう。(気をつけようっと)
これってJoomla!1.5(もしかしたらうちの1.0.xも・・)を使っている方すべてに言えることなのでこの対策をするだけで少しはみなさんのサイトも速くなるかもしれませんね。しかし、もっと効率の良い方法が、無いものなのか考えどころですね。もっとHackしてしまったらもう少し速くなると思いますが、Hackする部分が多くなってしまいますのでこのあたりにしておきます。
Joomla!のエクステンションで$_SERVER['REQUEST_URI']をそのまま使っているエクステンションを見かけたので問い合わせから連絡しておいた。私も恥ずかしいこといっぱいしているのでお構いなしです。![]()
なぜ、そのまま使ってはいけないのかは「REQUEST_URI クロスサイトスクリプティング」ででも検索したら出てくるので書きませんが、mod_QRcodeを作成時に自動でURLを作成できるようにしようと思ったのですが、断念した覚えがあります。Joomla!1.5では使えそうなメソッドが用意されていますが、1.0.xでは自分が開いているサイトのURIを知ることは非常に難しいです。(もちろん、スクリプト付きでも良いなら別ですよ。)Joomla!標準のエクステンションだけならやりようもあるでしょうが、サードパーティーのエクステンションをもカバーしようと思うとはっきり言って至難の業です。$_SERVER['REQUEST_URI']ってユーザーがリクエストしたそのままが得られるだけなのでスクリプトがくっついていようが、SQLインジェクションをねらったクエリが付いていようがおかまいなしです。
簡単な例:Joomla!1.5で例えば下記のようなURLが正しいURLとすると
http://demo.joomler.net/the-news/1-latest-news/86-example-go.html
以下だとどうでしょう・・・
http://demo.joomler.net/the-news/1-latest-news/9999999999999999999/86-example-go.html
のように異なるURLでも同じページにアクセスできてしまいます。この場合はクエリの間に数字を入れただけですが、このように正しいURLでは無くても該当ページにアクセスできます。
なので、そのREQUEST_URIを使ってブックマークなんてとんでもないですよね。
サニタイズしてクリーニングすればと思うかもしれない。でもそれが本当に、そのサイトの管理者が意図するJoomla!の正しいURIってわかりますか?(もちろん使っているエクステンションが限定されていればそれ相応にサニタイズできると思います。)
Joomla!1.5で用意されているメソッドを使っても上記の例のような場合はそのまま出力されてしまいます。
結果、mod_QRcodeでは、モジュールのコピーを可能にして個々にURLの指定をするようにしましたので外部のリクエストに左右されません。
私も気をつけようっと・・・。![]()
Yahoo! Pipesで実際に英語RSSを日本語に翻訳するWebサービスを作成してみます。

次はUser Inputから Text Inputをドラッグして5のRegexの隣くらいに置く以上で作業は完了です。
上のメニューからSaveをクリックし、Back to My Pipesから元の画面に戻ります。すると先ほど作成されたPipesが表示されていますのでクリックしするとURL入力欄とtlink入力欄に1が入力済で表示されているはずです。試しに何かの英語RSSリンクを入力して実行してみてください。
最後に・・・My Pipesの画面から作成したPipesの上にマウスカーソルをのせるとPublish他のメニューが出ますのでPublishをクリックして公開します。これで誰でも利用可能なWEBサービスが完成しました。