12月 10

最近、CMSを使わないサイトの場合、ZendFramework + Smary + DB_DataObjectというのが、僕の中で効率よく開発できるパターンになってきました。(DB_DataObject? Smarty? …プ! とか言わないで ///)

先日、とあるサイトに、とあるシステムを納品したのだけれど、本番環境で動作確認してみると、Zendframeworkが下記のエラーを出力。もちろん、テスト環境では十分テストして、ライブラリのパス等も絶対に間違ってないのに、なぜか、下記エラーが。

Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (index)’ in /xxx/xxx/ZendFramework/library/Zend/Controller/Dispatcher/Standard.php:242
Stack trace:
#0 xxxxxx/ZendFramework/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 xxxxxx/xxxx/index.php(34): Zend_Controller_Front->dispatch()
#2 {main} thrown in /xxxx/xxxx/ZendFramework/library/Zend/Controller/Dispatcher/Standard.php on line 242

通常、このエラーは、単に該当のControllerのphpファイルが無い場合に出たりするんだけれど、今回は違う。ソースも全部もってきて確実にファイルは存在する。しかし、エラーが消えない。

テスト環境と本番環境でPHPのバージョンにすこし違いがあったから、Zendframeworkがちゃんと機能してないのか?と、Zendframeworkのバージョンを下げてみたけど変わらず。

悩みに悩んで、ググりつつ、やっと解決。最初にコールされるindexのコントローラファイルが、

indexController.php

になっていたのだ!!!

Controllerファイルは、

http://blog.favrik.com/2008/08/30/invalid-controller-specified-zend-framework/

に書いてあるように、コントローラ名+Contoroller.phpになるのだが、コントローラ名は、最初大文字、以後小文字でなければならない。つまり、

IndexController.php

としなければならない。テスト環境は、サーバにMacを使っていたため、HFS+で、Case Insensitiveだから、大文字小文字の区別なく(=区別できず)、誤ったファイル名でも、動いていたのである。


いやー、冷や汗かきました。ちなみに、ErrorControllerを作ってない場合は、

Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (error)’ in /xxx/xxx/ZendFramework/library/Zend/Controller/Dispatcher/Standard.php:242

がでます。IndexController.phpを探しに行ったけど無い→エラーを投げる→ErrorController.phpも無い→Invalid controller specified (error)となり、よけい分かりづらくなります。

Macのファイルシステムを、Case Sensitiveなものにすることもできるけど、これはこれで、Mac上のネイティブアプリ等に影響がでるらしく、問題ありそう。

コントローラファイルは存在するのに、上記エラーが出る場合は、ファイル名の大文字・小文字を疑ってみてください。

Popularity: 3% [?]

written by ANN

6月 25

某データベースサイトにて、サイト内検索を行う場合、

  1. 自スクリプトにて全文検索
  2. マッチしない場合、Yahoo!Web検索APIで検索
  3. それでもマッチしない場合は「一致するものがない」メッセージを表示

Yahoo!Web検索APIでは、RESTリクエストに、siteパラメータを設定し、サイト内検索をしていたのだが、どうもおかしい。サイト内に存在するキーワードだった場合は正しく動作するが、サイト内に存在しないキーワードの場合、勝手に外部サイトを対象とする結果を引っ張ってきている模様。(通常のサイトとかwikipediaとか)

RESTクエリのサンプル

http://search.yahooapis.jp/WebSearchService/V1/webSearch?appid=アプリケーションID&query=%e6%b2%96%e7%b8%84&site=example.com


siteパラメータの使い方が悪いのかと、ドキュメントをしばらく読み込んでみたが分からず。

しょうがないので、REST内のsiteパラメータを利用するのではなく、クエリ文字列中に、”キーワード+site:example.com”と、キーワードの一部としてAPIを実行。こうすることで、サイト内でマッチしない場合でも、勝手に外部から結果を持ってこず、指定キーワードはサイト内には存在しない、という処理を実行できた。

しかし、Yahooのサイト内検索ではマッチしないものでも、Googleだとマッチするというのが悔しいところ。Googleの場合、結構な精度で読み仮名も自動的に検索してくれるので、とても便利なのだが…。


Popularity: 2% [?]

written by ANN

3月 16

納品済みのWordPressで問題が発生したので、その原因と対処などを。

【トラブルその1】

[現象]アップロードしたワード・エクセル・パワーポイントのファイルを、ダウンロードしようとするとなぜかZipファイルになってダウンロードされ、正常に開けない。また、Safariだとそのファイルのソースが表示されてしまう。

[原因]officeの新しいバージョンのファイルは、実は1ファイルではなく、Mac OS Xのパッケージファイルみたいに複数ファイルをアーカイブしたZipファイルである。拡張子でいうと、docx,xlsx,pptxのファイルが該当。適切なmime typeが割り当てられてない為、ブラウザ側がなんのファイルか分からず、中身をみてZipと思って処理しまっている。

[対策]
ファイルの正体(?)を明示的に示す必要がある。httpd.confに、下記3行を追加。httpdを再起動すればOK.

AddType application/vnd.openxmlformats-officedocument.wordprocessingml.document .docx
AddType application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xlsx
AddType application/vnd.openxmlformats-officedocument.presentationml.presentation .pptx
※画面の都合で改行されてますが、実際はAddTypeから1行で記述してください。

[参考リンク]
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1426328894
http://trivia.cocolog-nifty.com/blog/2010/01/docxzip-9104.html

【トラブルその2】

[現象]突然、記事の「プレビュー」が出来なくなった。

[原因]リビジョン管理とアートセーブ機能を停止するプラグイン→ http://exper.3drecursions.com/2008/07/25/disable-revisions-and-autosave-plugin/ を入れていると、プレビュー機能が死んでしまう模様。

[対策]プラグインをOFF。しかし、OFFすると自動保存が利いてしまい、正直、残念な感じ。皆さんも困ってる模様。これはWordPressの該当機能の動作仕様に問題があるんだろうけど。

[参考リンク]
http://wp.mmrt-jp.net/2009/04/17/3269/
http://suirakukai.com/wordpress/291/disable-revisions-and-autosave-plugins

Popularity: 8% [?]

written by ANN

12月 01

まぁ、タイトルが全てなんですが、フォームのフィールドで入力を数値に制限する::TexoTela:: jQuery – numericというのがあるのだが、これを使うと、Safariからペーストできないという問題を発見。


↑下のテキストフィールドにはSafariからペーストできないはず。

よく見ると配布元にペーストに問題がある…と書いてあったわけだが…

ここで、もう一つの入力制限プラグイン,jQuery AlphaNumericについても調べてみた。

こちらも、入力制限の文字種に限らず、各ブラウザでペーストに問題があるようだ。


結論。


jQuery numericやjQuery AlphaNumericを使う場合、ブラウザによってはペーストできないので要注意。フォームにペーストできるかできないかというのは、案外、テストされないんじゃないだろうか。


Popularity: 4% [?]

written by ANN

9月 10

Mac OS Xには、標準でzipやgz,lzhファイルなどを展開できる機能がある。圧縮されたファイルをダブルクリックすればよいのだが、どうも標準のこの機能はあまり使い勝手がよくない。

先ほどもとあるファイルを展開しようとして、zipファイルをダブルクリックした。しかし、このファイルは不要と気付いたため「キャンセル」ボタンを押したのだが、そこからうんともすんともいわなくなった。

アーカイブユーティリティ

command + option + escapeで、「アプリケーションの強制終了」を行うとするが、それっぽいアプリは起動しておらず、finderを再起動しても、相変わらず上記ダイアログは出っぱなしだった。

プロセス名がわかればkillできるなと思って調べると、この「アーカイブユーティリティのキャンセル」は、内部的には、

/System/Library/CoreServices/BOMArchiveHelper

であり、dittoコマンドのGUIラッパーとのこと。

そこで、反応しなくなっ「たアーカイブユーティリティ」を強制的にキャンセルというかクローズさせる方法。

「アプリケーション>ユーティリティ」の中の「アクティビティモニタ.app」を起動する

次に、プロセス名から「BOMArchiveHelper」探し、選択→「プロセスを終了」→「強制終了」でOK。

acmonitor

つーか、zipファイルの展開をキャンセルくらいで止まるなよ、と言いたい。ま、Macだからしょうがないね!

Popularity: 5% [?]

written by ANN

6月 16

以前、某大学のWEBサイトに資料請求フォームのスクリプトを納品したことがあるのだが、そこから、
「フォームページが開けない。スクリプトに問題があるのではないか?」と連絡あり。(その指摘をしたのはサーバ納入したリ●ーらしい)
あげく、こっちで対応してくれないか…と。

調べてみると、https://~フォームのURL にアクセスすると、
yoyyaya-1.png

といった、メッセージがブラウザに表示される。
これはどうみてもスクリプトにアクセスする前にブラウザが表示しているメッセージです。ありがとうございました。

Firefox3やSafari3だと、SSLのチェックに引っかかり、ページにアクセスできない。IEやfirefox2だとアクセスできる模様。

調べると、5月の中頃、ベリサインの中間証明書周りがなにやら変更になってるらしい。

現地サーバ内のSSL設定をチェックできないので、具体的にドコが原因か分からないし、対策をチェックしておく。

HYSPRO diary – Debian USB stick install , Firefox 3.0.3 sec_error_unknown_issuerより

SSL3.xやTSL1.0の仕様では、証明書のchainがあるときは、サイト自身が、サイトの証明書だけでなく中間の証明書も送る義務がある(ルート証明書を送るのはオプションで、送ってもセキュリティ的にそもそも意味がない)。Firefoxはこれに厳密にしたがっていてエラーだが、IE7はそうではないうようだ。特に、2007年1月からVeriSignは積極的にchainを使うようになったので、それ以降に発行を受けたサイトでこの問題が散見される。というわけで、Firefoxの問題ではなく、サイト側の設定に原因がある。

2inc.org – VeriSignの中間証明書がFirefoxでエラー(IEはOK)の件より

セキュア・サーバID用中間CA証明書からそのままコピーして貼り付けていたんですけど、何度やってもエラー。IEだとすんなり通りますのですが、Firefox、Operaではアウトです。

いろいろ試した結果、どうやら文字コードが原因のよう。セキュア・サーバID用中間CA証明書はsjisですが、エラーの出るページの文字コードはEUC。セキュア・サーバID用中間CA証明書を一度Terapadにコピーし、EUCに変換後、サーバに保存するとOK。

グローバルサインの SSL 証明書で「Web サイトが未知の認証局により認証されています」がでる問題: Su-Jine の独り言より

サーバによっては中間証明書を 2 度書くとうまくいくといっていたので、中間証明書の内容をコピーし、ペースとして保存。Apache をリスタートすると Firefox でも正常に動作した。具体的には下記のように 2 つ同じものをコピーして保存しただけ。

—–BEGIN CERTIFICATE—–
~~
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
~~
—–END CERTIFICATE—–

他に同じような現象が報告されていないか聞いても、問題は出ていないとのこと。2 つ同じものを書けばうまくいくなんて言うのはわかるわけがない。

中間CA証明書のインストールについて

同じエラーメッセージではないけど、こちらもSSLでエラーがでている。
総務省

www.soumu.go.jp は不正なセキュリティ証明書を使用しています。
発行者の証明書が信頼されていないためこの証明書は信頼されません。
(エラーコード: sec_error_untrusted_issuer)

総務省なのに…こんなんでいいのだろうか。

Popularity: 20% [?]

written by ANN

2月 28

WebDAVで利用するディレクトリにBasic認証を設定して、接続テストを行ってみた。
Macからだと問題なく接続できるが、WindowsXPからだと認証が通らないということでググってみた。

Windows XP SP2を適用した場合のWebDAVのBASIC認証

Windows XP サービスパック2では、 WebDAVリダイレクタの基本認証が無効にされています。このため認証に失敗してしまいます。この現象を回避するためにはレジストリの変更が必要です

ということで、上記ページの記載通りに設定したけどうまくいかない。
さらにググると、

WebDAVでBasic認証を利用する(WinXP SP2)

簡単な話「80番ポートを通す」というだけ。

なるほど。ネットワークプレイスのアドレスに

http://www.example.com:80/webdav

のようにポート番号通すだけでOK!これで取り合えず問題なく接続できましたとさ。
WebDAVでSSLを利用してなくて、Basic認証を行っている場合にWindowsXP SP2で接続するための対処でしたー。

[2009/3/2 追記]
コメントにもあるように本ブログの「WebDAVで謎の認証と回避方法」にある回避方法のように末尾の/を?に変更し、接続するネットワークアドレスを

http://www.example.com/webdav?

とする方法でも上記問題を回避できる。これはウケるwww

Popularity: 14% [?]

written by joy-pop

1月 10

prototype.jsよりjqueryのほうが流行ってそうなので、できるだけjQueryを使うようにしている。といっても、まだまだ使い始めたばっかりで右往左往。

通常、jQueryからの操作は、
[js]
$(”CSSセレクタ”).html();
[/js]
みたいな使い方をする。

しかし、現在制作中のサイトで、ど~~~~~やっても、

$ is not a function

というエラーになる。
エラーメッセージでググってもそれらしいのを発見できず。

謎すぎる。$がないとかあり得ない。

jQueryのバージョンが古いのか、壊れてるのか、それとも呼び出し場所が悪いのか…悩むこと数時間。やっと解った。

制作中のサイトでは、ロールオーバー時の画像の切り替え用に、
jquery_auto_j
というプラグインと、ページ内リンクのスクロールをスムーズにする、
[JS]簡単に設置できるページ内をスムーズにスクロールできるスクリプト -Page Scroller ver.3 | コリス
を入れている。

この両方が、問題だった。正確には、ドキュメントを読み切れてなかった僕が悪いんだろうけど…

>>>>>続きを読む

Popularity: 23% [?]

written by ANN

10月 09

とあるアカウントに大量のエラーメールが届き始める。そのアカウントはSpamAssassinによるフィルタリングを行っていたため、サーバーの負荷が増大しレスポンスが低下。とりあえず当該アカウントのSpamAssassinの利用を停止した。

どうやらスパム業者に送信元アドレスを詐称されたらしい。エラーメールのFrom、Return-Pathに上記アカウントのメールアドレスが記載されている。 なんだこりゃー!?と思っている間にも、どんどんメールは届いてくる。こういうのをbackscatter(後方散乱)と呼ぶらしい。攻撃なのかなんなのか良く分からないがそういうことだ。

[参考]
Postfix 後方散乱 Howto

Tech Matariメンバーに相談!& ググってもなかなか解決策が見つからない(というか理解力がないのか…)。 ユーザーが存在しないなどの理由でメールサーバーがエラーメールを返すのは正しい挙動のため、こちらのサーバーにエラーメールが届くのは仕方がないというところにいきついた。くっそー!スパム業者めーーー!!(怒

結局、ProcmailでSpamAssassinにメールを渡す前に、エラーメール分だけでも隔離することにした。他にいい解決方法があったらご教授ください…。
(MTAに届いた時点とかMDAのあたりで隔離できたりするとうれしいです。MTAはsendmailなんですが、なんか設定で出来たりしないですかねー?)
今回、スパムメールに利用されたメールアドレスをhoge@foo.comとする。このhogeアカウントは実際に存在し、利用されているアカウントだ。

まずエラーメールの判別だけど、どうすりゃいいだろう?Subjectで判断するとなるとパターンがありすぎる。ざっとエラーメールのヘッダを眺めるていると、だいたいFrom: にpostmasterかMAILER-DAEMONという文字列が入るようだ(エラーメールなんだから、当たり前の話ではある)。サーバーが送信するメールだから、そういうことになるのだろう。たまに行儀の悪いサーバーもいて、名前だけでアドレス入れてない場合もある。

こんな感じ

From: Mail Delivery Subsystem <>

これは随時対応するしかないけど、おおよそpostmasterかMAILER-DAEMONかで判別してもいいだろうと思う。自動返信とかはまあ、しゃーない。他に判別材料があれば教えてください。

後は実際にhogeアカウントで送信した本当のエラーメールか、送信元を詐称されたスパムエラーメールかを判別しなくてはならない。これはメールの本文(Body部)の内容を見て判別するしかない。添付されてしまっている場合はまあ、仕方ないとしよう。だいたいの場合はエラーメールの本文に元のメールのヘッダ情報が記載されていて、

From: ***** <hoge@foo.com>

とか記載してある。 *****の部分に適当な名前が入っているので、hogeアカウントで送る場合の送信元名称は「ホゲ会社」または「HOGE CO.,LTD」に固定し、それ以外の名称の場合はスパムと判断する。

>>>>>続きを読む

Popularity: 11% [?]

written by joy-pop

9月 25

ちょっと仕事でデジタルフォトフレームを扱う。デジタルフォトフレームとは名前のままだけど、主にJPEGを表示できる小さいインチのディスプレイという感じ。
実際の機能は、メーカー/機種によってさまざまで、モニタのサイズはもちろん、jpeg以外にmp3を再生できたり、
mov/wmvを再生できたりする(まだかなり制限は多いけど)

データは、USBメモリや各種メモリカード、USBケーブルでつないで転送したりする。

ソニーなんかもデジタルフォトフレームを出していて、これから少しずつ利用者が増えてくるデバイスだと思う。

デジタルフォトフレーム D70
ソニー (2008-05-09)
売り上げランキング: 415

しかし、実際使ってみると、思わぬ落とし穴が。

ということで、デジタルフォトフレームを使うときの5つの注意点を挙げてみる。

>>>>>続きを読む

Popularity: 20% [?]

written by ANN