« 2007年03月 | メイン | 2007年05月 »
2007年04月27日PATH_INFOに「%2F」が含まれていると404エラーになる(AllowEncodedSlashesで解決)
SEO対策として、PATH_INFOを使ってパラメータをphpスクリプトに受け渡す方法が一般的になりつつあります。
参考:phpスクリプトに拡張子なしでアクセスするためには
自分もこれまでさんざんこのやり方を使っていましたが、つい最近、PATH_INFOの中に「%2F」が含まれているとapacheが404エラーを返すことを知りました。ちなみに「%2F」は「/(スラッシュ)」にURLエンコードをかけた後の文字列です。
http://www.example.com/product.php/id/1234/code/ABC%2FDEF
たとえば上記の例。apacheの設定がデフォルト状態だと404エラーになります。
これを解消するにはAllowEncodedSlashesをOnにします。
AllowEncodedSlashes On
httpd.confやVirtualhostディレクティブにこの記述を追加してapache再起動します。
なお、この設定はApache 2.0.46以降でのみ有効だそうです。あとmod_rewriteなどを使うときにもAllowEncodedSlashesをOnにしていないとエラーが起こるようです。
PATH_INFOに「%2F」が含まれていると404エラーになる(AllowEncodedSlashesで解決) | コメント (0) | トラックバック (0)
2007年04月24日cseでMySQL5に接続する
cse(Common SQL Environment)という、mysql、pgsql、oracleなどのDBMSに接続し、操作できるwindowsアプリケーションがあります。かなり便利なソフトで、以前はよく使っていました。が、このところもっぱらphpMyAdminを使うのでcseはまったく使わなくなっていました。
さて、今回仕事で、開発が完了したWebアプリのテーブル定義書を作ることになりました。ここでcseには右クリック一発でテーブル定義書を作成できるという便利な機能があることを思い出し、久しぶりにcseを起動しました。が、、、
mysqlに接続しようとすると、致命的なエラーを吐いて強制終了。困った・・・
調べてみると、cseはmysql3以下にしか対応していないんだそうです。なるほど。どうりで接続できないわけだ。
さらに調べてみると、ODBCでmysqlに接続すれば問題なく使えるというページを発見。さっそく試してみます。
まずはmysqlのodbcコネクタをダウンロードし、インストール。
http://dev.mysql.com/downloads/connector/odbc/3.51.html
上記ページから、mysql-connector-odbc-3.51.14-win32.msiをダウンロードしてインストール。続いてコントロールパネル>管理ツール>ODBCで接続情報を設定します。
以上で準備完了。cseを立ち上げ、先ほど作ったodbcデータソースを選択すると、、、接続成功!!
もちろん、テーブル定義書もバッチリ作成できました。
テーブル定義書ってまじめに作ると結構大変なので、相当な時間と労力を節約できたと思います。よかったよかった。
cseでMySQL5に接続する | コメント (0) | トラックバック (0)
2007年04月20日RAID対応外付ハードディスク「RHD2-U1.0T」を購入
IO-DATAの「RHD2-U1.0T」を買いました。
500GBのHDDが2基で合計1TB。RAID0(ストライピング)とRAID1(ミラーリング)に対応しています。接続デバイスはUSB2.0。ネットワークには対応していません。
『I-O DATA RAID 0・1対応 USB 2.0/1.1 ハードディスク 1.0TB RHD2-U1.0T』
価格: 47,250円
アイ・オー・データ
目的はエブリオで撮った0歳の息子の動画データを保管するため。
データが増えていく量はだいたい月2~6GBくらい。何かイベントごとがあったりするとデータ量がぐーんと増えます。これまでは『動画データを一旦余り物の30GBのHDDに格納し、データがたまってきたらDVDに焼く』という方法で保管していたんですが、かなり面倒な上焼くのに時間がかかるのでギブアップ。大容量HDDを買ってそこに放り込んでいくというやり方に変更しました。これで手間がかなり減るはず。
またRAID1ミラーリングを使うので、ディスク故障でデータが飛ぶ危険性も低くなります。非RAID単体ディスクよりかなり値段が高いですが、お金で買えない大切なデータを格納するためということで奮発しました。
なお、RAID1なのでデータの書き込みはやはりかなり遅め。体感速度ですが、普通の単体ディスクに書き込むのより2倍くらい時間がかかっている気がします。それでもDVDに焼くよりは断然早いし、そんなに頻繁に使うわけでもないので特に困ることはないと思います。
なお、普段使っているPCのデータは以前データを復旧した時に買った2.5インチの外付けHDDを使用するようにしています。コンパクトで転送速度も速いので、バックアップなど頻繁に使うのには2.5インチが便利ですね。
ハードディスクは大容量化、低価格化が進み、種類も豊富になっているので、これからは用途に応じて使い分けをするのがいいのかもしれません。
・ ・ ・
それから最後に。
「RHD2-U1.0T」に付属している「Sync with」というフォルダ同期ソフトを使ってみたんですが、何度やっても実行途中にエラーを吐いて落ちてしまいました。
仕方ないので「RealSync」というフリーのソフトを使いましたが、こっちは安定しています。というかシンプルで使いやすいので、こっちのほうが断然良いです(^-^;
RAID対応外付ハードディスク「RHD2-U1.0T」を購入 | コメント (0) | トラックバック (0)
2007年04月17日PEAR::HTML_QuickFormについて色々
■リンク
addElementの第一引数で「link」というのが指定できる。下記のような感じ。
$form->addElement('link', "link_name", "link_label", 'http://www.yahoo.co.jp/', 'link_text', array("target"=>"_blank"));
これといって使い道は思い浮かばないですけど、一応メモしときます。
■unfreeze
よく使うfreezeのほかに、unfreezeもあるのを発見しました。
フォーム全体を凍結して、特定のフィールドだけ凍結解除、なんてことをやる場合は便利です。
なお、フォーム全体を凍結した後にhierselectフィールドをunfreezeすると、JavaScriptのonChangeが抜けてしまった状態でフォームが表示されるという問題もあるようです。こちらは解決法見つけられず。。
■複数選択セレクトメニュー(multiple select)
$DeptArray = array("1" => "営業部", "2" => "経理部", "3" => "人事部");
$form->addElement("select","user_dept","所属部署",$DeptArray);
$deptObj =& $form->getElement("user_dept");
$deptObj->setMultiple(true);
こんな感じで複数選択可能なセレクトメニューが使えます。
デフォルト値セットで値が複数ある場合は、カンマ区切りで値を渡せばいいみたいです。
■php4の場合は「&=」を使う
$deptObj =& $form->getElement("user_dept");
みたいな感じで、php4の場合「=&」を使わないダメです。(「参照渡し」って名前だったかな?)
いつもphp5で「=」だけで書いてるので、コピペとかするときによく間違えます。要注意
PEAR::HTML_QuickFormについて色々 | コメント (0) | トラックバック (0)
2007年04月16日China Unicomからの大量アクセスを拒否
サーバー負荷が高くなっていたので、ログを調べてみたら
220.194.55.47
から大量のアクセスがあることがわかりました。ユーザーエージェントは
KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0
auの携帯?と思ったんですが、上記IPを調べてみると
inetnum: 220.192.0.0 - 220.207.255.255
netname: UNICOM
descr: China United Telecommunications Corporation
descr: No.133,Taiyun Building,Xidan North Street
descr: Xicheng District,Beijing,China
country: CN → (中国)
となっています。
「中国 China Unicom」でググってみると、KDDIとの技術協力うんぬんというページが見つかります。
なので一瞬「KDDIがUNICOMと共同で検索エンジンロボットのテストでもしているのかな?」と思ったんですが、だったらユーザーエージェントに何かメッセージが入ってると思うので、やっぱり偽装だろうという結論に至りました。
というわけでさっそくアクセス拒否。すぐに効果があらわれて、サーバー負荷も落ち着きました。
China Unicomからの大量アクセスを拒否 | コメント (0) | トラックバック (0)
2007年04月12日mod_rewriteでリダイレクト。ただし画像は対象から外す
以前、「mod_rewriteを使って特定のIPやホストからの接続の場合のみ、コンテンツを表示する」というのをやりました。
今回その条件に加えて「ただし画像(gif,jpg,png)は処理の対象から外す」というのを付け足しました。
こんな感じです。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg)$ [NC]
RewriteCond %{REMOTE_ADDR} !^192.168.1.$
RewriteCond %{REMOTE_ADDR} !^172.0.0.1$
RewriteRule .* ___maintenance.html
この設定の場合、飛ばし先が「___maintenance.html」になります。この「___maintenance.html」にて同一サーバー上の画像の呼び出しをしており、画像をリダイレクト対象から外す必要があったので、このような設定になりました。



