Tags:PHP
ホームページの不具合のお知らせとお詫び
私が運営しているサイト『かるた一病息災』において、不具合が発生しておりましたのでお伝えいたします。
発生期間
2014年8月上旬から2014年9月30日まで
不具合の現象
ページの一部箇所について表示されない文字がある
原因について
サーバー移転に伴いPHPのバージョンが変わり、htmlspecialchars 関数を使用している箇所が出力されなくなったため。
私の不注意により、サイトをご利用している皆様にご迷惑をお掛けしてしまい申し訳ありませんでした。
また、この不具合により、該当期間にサイトを通じてお送り頂いたメールが届いていない可能性があります。もし、サイトよりメールを送って私から返信がない方がいらっしゃいましたら、お手数ですが再度送信していただけると幸いです。どうぞよろしくお願いいたします。
サイトを色々と修正してみた
今日は、サイトの設定で後回しにしていたことを色々と修正してみました。
WordPress バージョンアップ後の不具合?
このブログで使用しているWordPress
がバージョンアップしてから、サイト上部に謎の空白が出来ていました。いつも現れるわけではなく、ログイン中のページでのみ発生。ソースを見てみると、ページナビらしき機能が新たに追加されているようだった。
以前、ページナビのプラグインを使っていたことがあるのですが、デフォルト機能として使えるようになったんですね。どこで設定するか分かりづらかったけど、管理画面のユーザーの設定より変更できるようです。
しかし、僕の環境では何故か上手く表示できずに、以下のような非表示設定のスタイルシートが記述されていました。
<style type="text/css" media="print">/*<![CDATA[ */
#wpadminbar { display:none; }
/* ]]>*/</style>
mediaが何も表示されていないのは不自然だよな……と思って使用中のプラグインを見てみると、『Head Cleaner』プラグインが原因のようでした。ソースが読みやすかったので原因追求してみると、
$inline_css .= $this->_css_tag($val, $media, true);
の部分がおかしいっぽかったので、以下のように修正。
$inline_css .= $this->_css_tag($val, $key, true);
これで、styleタグにmediaが正しく記述されるようになってめでたしめでたし。今まではmediaにデフォルト値が入っていたようでした。
実は、『Simple Tags』プラグインをバージョンアップしたことによって、関連記事が表示されなくなったという問題も残っているのですが、こちらの方はまた今度ということで。
Facebookページを作成
まだFacebook
の使い方が全然分かっていないのですが、Facebookは自分のページ以外にファンページのようなものも作成できるみたいですね。ということで、このサイトのファンページを作ってみた。
まぁ、需要も使い道もなさそうなんですが実験ということで(笑)周りにFacebookやっている人がいなくてよく分からないので、詳しい人がいたら活用方法や魅力を教えてくださーい。
iPhoneやIPad用のアイコンを作成
去年あたりから、存在しない画像ファイルへのアクセスをちょくちょく見かけるようになりました。よく見かけるファイルは以下の2つ。
- apple-touch-icon.png
- apple-touch-icon-precomposed.png
何かなと思って調べてみると、iPhoneやIPadがブックマーク時に使用するアイコンのようでした。要するに、Favicon
のような役割ですね。作ってはみたものの動作確認できないので、もし持っている方がいらっしゃったら動作状況を報告して頂けると嬉しいです。
『記念日チェック』のコンテンツをつくってみた
『記念日チェック』というコンテンツをつくってみました。特定の年月日からキリの良い日数が過ぎた日をチェックすることが出来ます。
説明しにくいですが、例えば自分の生年月日を入力すると、自分の誕生日から10000日後や12345日後などが何月何日にやってくるのかなどをチェックできます。
うーん、もう少し早くこのコンテンツを作成していれば、自分の生後10000日を祝うことが出来たんだけどなぁ……もう過ぎちゃってるや。
百億人一首bot
数年前から公開している「百億人一首」のコンテンツを、Twitterのbotとしてつぶやくようにしてみました。
興味がある方はお気軽にフォローしていただけると嬉しいです。
【百億人一首bot】
http://twitter.com/tenbillionpoems
簡単な説明
- 小倉百人一首の歌の句をランダムに組み合わせ、新しい歌を作り出します
- 1時間に1回のペースでつぶやきます
- RTはご自由にどうぞ
- 歌のあとに表示されている「Number」は、使用された小倉百人一首の歌番号です
- 使用させていただいたスクリプト→EasyBotter
ご意見・ご感想などがありましたら、このブログへのコメントや、管理人のツイッター(@sokusai)までお気軽にどうぞ。
英語表記は苦手なんだよ!
僕が英語が苦手だという話は今まで何度か書いてきたわけですが(2006-12-04 和洋折衷、2007-09-17 英語嫌いの高校生)、未だに月や曜日が英語で書かれている場合に瞬時に理解できないのはどうかと思い始めた。というか、最近Twitter
をやるようになったけど、月表示のデフォルトが英語表記になっていて理解できないんですよ(涙)
というわけで、今年も残り1ヵ月を切ったわけですが、「月と曜日を英語で覚える」というのを今年の目標にします!
どうせならプログラムをつくってWeb上で覚えてみようということで、自分専用に「お勉強ページ」というものをつくってみた。
まずは一覧表示のページで覚えてみて、確認用のページでは表示順をランダムにしてからセレクトボックスで解答を見られるようにした。せっかくなので、よく覚えていない「12星座」「フランス革命暦」「県庁所在地」も勉強できるようにした。
久々にプログラムをつくったので、作成に約2時間もかかってしまった。「その時間を暗記のために使えよ!」とツッコまれそうな気がしますが……はい、その通りですね!
一応、携帯用サイトのトップページから見られるようにしておきました。
ショートコードを利用したらFeedがおかしくなっていた Part2
先日、WordPress
のショートコードについて書いた記事(2009-07-30 ショートコードを利用したらFeedがおかしくなっていた)の続きなんですが、「wp-includes\shortcodes.php」に記述してあるstrip_shortcodes()関数自体の戻り値がおかしいのかなと思って調べてみることにした。
元々の戻り値は、
return preg_replace('/'.$pattern.'/s', '', $content);
となっているのだが、
return preg_replace('/'.$pattern.'/su', '', $content);
と、「u」パターン修飾子を指定したら文字化けしなくなった。僕のインストール環境がおかしい可能性もあるんだけど、とりあえずメモ。
2009-10-22 追記
WordPress 2.8.5 にバージョンアップしたら、この文字化け現象は解消されるようになりました。
ショートコードを利用したらFeedがおかしくなっていた
実は、このサイトで利用しているWordPress
では、自作プラグインを10個ほど動作させているのだが、その中にいくつかショートコードを利用したプラグインがある。
先日、なんとなくFeedの内容を見てみると、ショートコードを利用した記事では、概要部分が全く表示されていなかったり、文字化けしたりという現象が発生していた。
色々調べた結果、wp_trim_excerpt()関数内の$text = strip_shortcodes( $text );の部分をコメントアウトしたら文字化け等の現象はなくなりました。しばらく様子を見てみようっと。
Amazon APIが仕様変更
というわけで、Amazonが提供するAPIが名称変更することになり、仕様も変更しちゃうから今までのアクセス方法だとあと3ヵ月で使えなくなるっ!……とのことらしいです。
実はこのブログでは、WordPress
の自作プラグインとしてAmazonのAPIを使用したプラグインを使用しています。ケータイからアクセスしたときに、Amazonの画像を取得するためにAPIを使っているのだが、この仕様変更によりプログラムを修正しなくちゃいけなくなってしまった。面倒だなー。
色んな方が書かれているソースコードを参考にして、20分ほどで修正完了。しかし、動作確認していると、2回に1回はデータ取得に失敗している……何故かと思い色々と調べていると、新しく指定するようになった Signature のクエリ値に対してURLエンコードをしていなかったのが原因のようでした。めでたしめでたし。
あ、ついでだから商品に新品の値段を表示するように修正しました。どのように変わったのかは、Amazonの商品が掲載されている、以下のような記事へケータイからアクセスすると確認できます。
百人一首の歌の文字を入れ替えてみた
というわけで、先ほど『最初と最後の文字が合っていれば、他の文字の順番が違っても文章を認識できる』という記事を取り上げましたが(2009-05-08 およはう こにちんは こばんんは)、小倉百人一首の歌で同じように文字を入れ替えるとどうなるかをやってみた。
30分ほどでつくってみた。お遊びのページなので、レイアウトは携帯用のものだけだけです。このコンテンツは、『五七五七七』それぞれの句で、最初と最後の文字以外を入れ替えてみた物です。アクセスする度に歌は変わります。
こうして見ると、あっさりと認識できますね。もちろん、100首全部暗記しているからなんだろうけど、なんか不思議ー。
『試合メーカー』が携帯からは動作しなかったバグを修正
競技かるたの試合を占う、『試合メーカー』というコンテンツを先日つくったんですが……携帯電話からは結果が表示されないという初歩的なバグがありました。原因は初歩的なミスで、先ほど修正したので今は正常に結果が表示されます。ご迷惑をおかけして申し訳ありませんでした。
今日、「携帯からは出来ないんですか?」と指摘されて初めて気が付きました。動作確認したはずだったんですが……最近はこういうミスが多い気がする。これから気を付けます。
競技かるたの試合を占う『試合メーカー』のコンテンツを作成
競技かるたの試合を占う、『試合メーカー』というコンテンツをつくってみました。以前作成した『決まり字成分解析』と同じように、名前を入力して結果を出力するタイプです。
2人の名前を入力すると、『お手つき、勝敗、枚数差』が表示されます。同日中に同じ名前で占うと同じ結果が表示されますが、日が変わると結果が変わるようにしてみました。
本当は、試合内容の状況もランダムに出力しようかと思っていましたが、文章が上手く浮かばなかったのでとりあえず却下。何か、不具合等があればご連絡ください。
2009-02-06 追記
「試合メーカー」の結果が、全然表示されないバグが発生してるみたいです。申し訳ありません。今日、家に帰ってから修正します。
Ktai Style でテーマをつくっていて気が付いたこと
現在、Ktai Style 1.61-beta1でテーマを作成・修正しているところですが、気が付いたことを箇条書きしておきます。
- テーマの作成途中で、バージョン1.61にはインラインスタイルへ自動的に変換してくれる機能があることを知った(汗)
- まぁ、別に良いか……と思っていたけど、互換性当を考えて font タグ等を使って記述した方が良さそう
- hr タグにインラインスタイルを記述していても、自動変換で消されてしまう(コメントにて報告済み)
- redir.php に記述されたコードは、インラインスタイルに自動変換してくれないっぽい
- font タグが入れ子になっていると、変換がおかしくなる
- Softbank 3G は、『display:-wap-marquee』が使えないらしいので、機種判別して maequee タグを使うしかないのかな……
- ページ分割時の文言は、翻訳ファイルを修正しないと変更できない。また、<hr />タグが出力されるのは固定っぽいので、プログラム部分を直接しなければレイアウト修正できない
- 普段のページ遷移に『#』『*』の accesskey を使用していると、ページ分割時に accesskey が重複してしまう
- body タグの link は『a,a:link {color:~』のスタイルシートに置き換えられるので、<a id="">や<a name="">で囲われた文字の色も変わる場合がありそう(これが良いのか悪いのかは不明)
- 個人的に、function.php で変数を色々とつくっておいて、必要なときに各テンプレートファイルから global で呼び出すとテーマを修正しやすい気がした
- 『<!--start paging-->』と『<!--end paging-->』は、ちゃんと意味があるコメントだったのか……間違えて削除していたぞ(汗)
- function.php に以下のコードを記述して、MIMEタイプが『application/xhtml+xml』ではないときに、スタイルシート関連の記述を削除してみた
function ks_karuta_replace($buffer) {
if (! ks_applied_appl_xhtml()){
$buffer = preg_replace('!<([a-z]+?[^>]*?) style="[^>]*?"([^>]*?)>!', '<$1$2>', $buffer);
$buffer = preg_replace('!</?span( [^>]*?)?>!', '', $buffer);
}
return $buffer;
}
add_filter('raw_content/ktai_style.php', 'ks_karuta_replace');
最もCSS、XHTMLに融通が利かないdocomoで実機確認してはいるけど、XHTML非対応端末や他の機種でちゃんと表示されているかが不安です。まぁ、今のところ特にクレーム等は来ていないので、それなりにちゃんと表示されている……と願っておきます(笑)
Ktai Style 1.60 を使用してみた
というわけで、WordPress
の携帯対応プラグインである『Ktai Style バージョン1.60』を使用してみました。外部サイト接続確認ページのテンプレート化など、色々と欲しい機能が増えていたのでさっそくバージョンアップ。
バージョンアップしたファイルを確認すると、やはりテンプレートの修正箇所が多いですね。僕の場合、テンプレートを自分で作りこんでいる部分が多いので、ちょっと修正に苦労しました(汗)
で、今回新たに増えた外部サイト接続確認ページ用テンプレート『redir.php』も試してみました。今までは、フィルターフック関数で編集するしかなかったんですが、それだと出来ることが制限されているので拡張しづらかったんですよね。で、早速導入してみると、ページが真っ白で動かないっ!?
……よく見たら、使用した classicテーマの redir.phpファイルで、titleタグが閉め忘れているだけでした。ちょっと焦りました。
2009-01-23 追記
この不具合は、当日中にすぐ配布ファイルが差し替えられて問題解決済みです。今から、色々とサイトを巡って動作確認でもしてみようかと思います。
mixiモバイルアクセス時に、ktai styleが動作するようにしてみた
最近、アクセスログに見慣れないユーザーエージェントが増えていた。
mixi-mobile-converter/1.0 (http://mixi.jp/)
mixiが外部検索用にロボットを動かしているのかな……と思っていたのだが、どうやら違うようで、これはmixiモバイルの外部リンク変換サービス時のユーザーエージェントのようだ。2008年9月から開始していたんですね……mixiあんまりやらないから知らなかったよ。
僕はmixiでは、このブログを表示するような設定にしているので、早速mixiモバイルから自分のサイトへとアクセスしてみた。
すると、携帯対応プラグイン「Ktai Style 1.45」での表示画面ではなく、パソコンから見た表示画面を携帯電話向けに変換されたページが出力された。画像縮小、リンクは取り除かれるなどの処理がされているようです。
そこで、mixiモバイルから表示した場合に、「Ktai Style」が動作するように設定してみた。やり方は、プラグインに付属しているマニュアルを見ればすぐに分かりますが、WordPressインストールフォルダ直下の、my-hacks.php に以下のコードを追加します。普通はファイル自体が存在しないはずなので、その場合はファイルを新規作成します。
<?php
function ks_detect_mixi($ktai, $ua) {
if (preg_match('/^mixi-mobile-converter/', $ua)) {
if ($ktai) {
unset($ktai);
}
$ktai = new Ktai_Service_Other($ua);
}
return $ktai;
}
add_filter('detect_agent/ktai_style.php', 'ks_detect_mixi', 10, 2);
?>
これで、『レガシーな my-hacks.php ファイルを使用』に設定されていれば、mixiモバイルからWordPressにアクセス時に、「Ktai Style」が動作するようになります。
ちなみに、mixiモバイルからアクセスされる場合は、毎回 robots.txt をチェックしているようなので、拒否したい場合は、
User-agent: mixi-mobile-converter
Disallow: /
と、robots.txt に記述すればOKのようです。
2008-12-12 追記
『Ktai Style バージョン 1.46』で、正式に対応していただいたので、バージョン1.46 移行は上記のようなことをする必要はありません。
Ktai Style 1.44 を使用してみた
というわけで、WordPress
の携帯対応プラグインである『Ktai Style バージョン1.44』をダウンロードしてアップグレードしておきました。まぁ、実は数日前にアップグレードしておいたんですけどね。
で、動作確認がてら、実機で色々とサイト内を見ていたのだが、アップロードしたpng画像が表示されていないところがあった。Ktai Style には、DoCoMo端末から閲覧した場合に、表示できないpng画像をgif画像に変換してくれるという嬉しい機能があるのだが、全く表示されない状態になっていた。
調べてみると、画像ファイルが生成されていないのではなく、htmlコードがpngからgifに変換されていないのが原因のようだった。そこで、プラグインのソースを色々と眺めていると、『operators/i-mode.php』ファイルの1751行目付近の
$buffer = preg_replace('!<img src="([^>]*?)\.png"!', '<img src="\\1.gif"', $buffer);
がうまく働いていないようだった。img の直後にsrc が来るとは限らないですね。今回の場合は、has_orig、title、class などの要素がsrc よりも先に来てしまっていたために、うまく置換できていなかったようでした。
あの大会まで、あと何日?
K本高校かるた部の練習場には、『あと○○日』と高校選手権団体戦までの日数が書かれたホワイトボードが置いてあります。でも、これって長期休暇後とか計算が面倒だよなぁ……と思ったので、大会までの日数を自動計算してくれるプログラムをつくってみました。
携帯用サイトトップページに、『あと何日?』という項目を増やして、僕たちが出場しそうな一番近い大会までに残り日数を表示するようにしました。また、『あと何日?』のリンクをクリックすると、今後の主要大会までに残り日数を一覧を見ることが出来ます。
ただ、大会の開催日は僕が手動で入力していくということになるので、内容の正確さは保証いたしません。正確な大会情報は、全日本かるた協会・各所属協会にお問い合わせください。
あ、つくったのは良いけど、肝心の来年の高校選手権団体戦の開催日を知らないぞーっ!汗
Ktai Style 1.43 を使用してみた
というわけで、いつもお世話になっているWordPress
の携帯対応プラグインである『Ktai Style バージョン1.43』をダウンロードしてアップグレードしておきました。
変更点はリンク先を見ていただければ分かるんですが、僕がプラグインを使用する上での大きな変更点は特にないようでした。ただ、動作確認として色々とサイトを見ているとちょっとおかしなことに気が付いた。
外部へのリンクをクリックしたときに、タイムアウトしてしまう場合があるのだ。中継ページの redir.php に行く前の状態で止まってしまう(携帯端末の接続時間内にリンクできずにエラーになる)。通信状況が悪いからページ遷移できないというわけではなさそうだったので色々と調べてみたところ、リンク先のサイトによってはうまくいくので、media="handheld"のチェック部分でタイムアウトしているのかなと予想し、redir.php のソースを修正しながらテスト。
結果としては、redir.php のdiscover_mobile()関数内にある、
if ( $byte_count > $timeout_bytes ) {
の直前部分に以下の行を追加することで、タイムアウトしてしまう現象は解消されました。
if (preg_match('!(</head>|<body[ >])!i', $contents)) {
return false;
}
多分、media="handheld"がない場合に、コンテンツ内容をチェックし続けて遅くなっていると思い、このような処理を追加してみました。タイムアウトになるサイトとならないサイトの違いは良く分からなかったのだが、</head>や<body>の後にmedia="handheld"が来る事はないような気がするので、このような処理を加えてみました。
『かるたの確率』のコンテンツを追加
携帯用サイトに『かるたの確率』というコンテンツを追加しました。これは、競技かるたの試合で起こる出来事の確率を計算できるページです。大学時代にJavaScriptで作成し、熊本学生百人一首同好会のサイトで公開しているものをPHP化して携帯用にレイアウト変更しただけですけどね(汗)
ろくに動作確認していないから、もしかしたらおかしな所があるかもしれないので、何かあれば報告いただけると嬉しいです。
かるた辞書を大幅更新
久々に、パソコン・携帯サイト共通のコンテンツであるかるた辞書を大幅に更新しました。今までは、自分で作成したPHPプログラムを使用していたのだが、実は色々と問題点がありまして……フリーのスクリプトをダウンロードして、コンテンツを入れ替えようと思い立ちました。
まずは、色々とCMSツールを探すところから始まり、色んなWikiプログラムやBlogツールをインストールして試してみました。そして、Movable Type
に決定して作成!……するはずだったのだが、あまりにも多機能すぎて逆にもてあます感じになってしまい、途中まで作成してから止めました。
で、色々と試してみた結果、以前このサイトのブログとして使用していて、プラグインも作成して慣れているから改造も容易なrNoteを使用することにしました。
改造と言っても、プログラム本体を修正したのは、記事をタイトル順に並べ替えるために、array_multisort()関数で$g_filelist配列をソートしたくらいですけどね。後は、自作の検索プラグインの機能追加、オンライン書き込みプラグイン(低機能)の作成、スキンの修正などを行って完成。
この作業のせいで土日の大部分を使ってしまった(涙)あ、実は動作確認はそれほどやっていないので、バグ等があればご報告いただけると嬉しいです。
このサイトのサーバー移転
現在、このサイトを公開するために借りているレンタルサーバー先の変更および、ドメイン移管を行っています。URLの変更はないのだが、移行期間中はちょっとサイトの状態がおかしくなっているかもしれないのでご了承ください。
移行のために色々と設定を変えているのだが、一部のコンテンツで文字化けだらけになってしまっていた。原因を調べてみると、PHP4とPHP5でfgetcsv()の挙動が違うことにより、csvファイルを読み込んだときに文字化けが発生しているようだった。とりあえず、setlocale(LC_ALL, 'ja_JP.SJIS')と記述したら直ったんだけど、まだまだ不具合が起きそうな予感だ……