IE8でnocache + SSLでファイルがダウンロードができない。

IE8でnocache + SSLでファイルがダウンロードができない。

いまさらIE8の話題です。

Internet Explorerでは、 ホスト名 – ファイル名 をダウンロード出来ません。
このインターネットのサイトを開くことができませんでした。要求されたサイトが様できないか、見つけることができません。あとでやり直してください。

みたいな感じのエラーがでる現象が発生。

Google先生を調べていたらここにたどり着いた。

http://pentan.info/php/ie_cannot_dl.html
上記のサイトにも書いてある通りこの3つの条件が重なった時になるようです
1. SSLを使用している。
2. Content-Disposition:attachmentを使用している。
3. キャッシュを保存しないようなヘッダーが出力されている。

改善策として、MSのサイトに
http://support.microsoft.com/default.aspx?scid=kb;ja;436605
1. Content-Disposition に inline を指定する
2. キャッシュを制限しないこと
とある。 が、zip(バイナリ?)を送信する場合、Content-Disposition: inlineでは、改善が見られず 結局 Pragma: public で問題は解説した。

ということで。

Content-Disposition: attachment;でダウンロードする際は、

Pragma: publicをつけておけってことで解決した。

ちなみに PHP user note http://www.php.net/manual/ja/function.header.php#102175
こんな記述を見つけたので実は常識だったりする?

Posted in Web

PHP ctype_digitの変な挙動


http://jp.php.net/ctype_digit

整数の判別をするのに使われるであろう関数 ctype_digit()
エラーが起きたり起きなかったりする現象に遭遇

この関数を活用するには string を渡さなければなりません。 たとえば integer を渡すと常に FALSE を返します。


ということだったので、問題の箇所をトレースしてみたらintegerで渡っていることが判明
さくっと文字列で渡すことで解決…
しかし、trueを返すこともあったので気になって以下のようなスクリプトで確認すると

php 5.2.13

for ($i=-10; $i<=1000 ; $i++) {
    var_dump($i);
    var_dump(ctype_digit($i));
}

256上はtrueになる。ググッたところ 256以上は自動で文字列キャストするらしい
が、48~57もtrueになる… なんだか気持ち悪い結果になってしまったが
型がゆるいPHPならではな感じもしなくもない

検索エンジン(robots)判定 大雑把編

ちょっと検索エンジンをUA(ユーザエージェント)を元に判定したくなり
手っ取り早い方法は無いか?とログから一定の法則を探してみた。

※タイトルにもある通り大雑把です
・http:// がある
・空白がない
ここまでで大部分が弾ける!(気がする)

これで判定漏れしたのを地道にリストアップ…
・wwwがある
・botがある
・@がある(メールアドレス)
これらの方法だと、概ねロボット判定できるとは思いますが、将来にわたり
ロボットではないUAもロボットと認識してしまう可能性もありますのでご注意を。
ちゃんと判定したい時は、UAリスト、IP判定をするといいと思います。

Javascript, Object.prototypeについて調べたのでメモメモ

今までJavascriptのprototypeについてよくわかっていなかったのでちょっと調べてみたのでメモ。
以前は、newしたときの動作が不明だったが、なんとなくわかった気がする。

//prototypeについての動作
stdObject = function(){}
stdObject.prototype.a = 'apple';
stdObject.b = 'orange';

obj = new stdObject;
console.log(obj.a); // apple ←引き継がれた (prototype.a)
console.log(obj.b); // undefined ← 引き継がれない
console.log(typeof obj.prototype) //undefined ←prototypeは無くなる

console.log(obj.n); //undefined
stdObject.prototype.n = "pine"; //元のオブジェクトを拡張してみる
console.log(obj.n); // pine ← 元オブジェクトのprototypeから参照される!

console.log(obj.hasOwnProperty("n")) // false ←obj自体に持ってない
obj.n = "berry";
console.log(obj.hasOwnProperty("n")) // true ←obj自体に持ってる

delete obj.n // 削除してみる
console.log(obj.n); //pine ← obj の n は消え、prototypeから参照されるようになった

// __proto__について
Firefoxの独自拡張らしく、IEでは参照できない。GoogleChromeには存在していた。
オブジェクトを new すると、オブジェクトのインスタンスを生成する。
この時に、インスタンスには、prototypeを引き継いだ__proto__ が生成される。
stdObject = function(){}
stdObject.prototype.a = "apple";
obj = new stdObject;
console.log(obj.__proto__); //object 
console.log( obj.__proto__.a ); //apple

Javascript(jQuery) で オブジェクトとかタグの存在を確認する

基本的な内容ですが、ちょくちょく忘れるので書いておく。
これをまとめているときに、prototypeと__proto__の挙動がちょっと理解できた気がするw
やっぱり、書いてまとめるって大切ですなーと自己満足

// オブジェクト(jQuery)があるかどうか
if (typeof(jQuery) !== undefined){ /** jQueryオブジェクトは存在してるよ! */ }

//プロパティがあるかどうか
obj = {foo:"muu",bar:"boo"}
if (obj.bar ){ /** true */ }

//if in 文法
if ("bar" in obj){/** true */}

//プロトタイプか判別
if (obj.hasOwnProperty("bar" )){ /** プロトタイプじゃないよ */ }



// 任意の要素(hogeクラス)があるか?
$(".hoge").length;

// チェックボックスがチェックされているかどうか
$("input[type=checkbox]:checked").length;

//ある要素が指定のクラスを持っているか
$("#hoge").hasClass("foo");

//子要素に特定の存在があるか
$("form:has(input)").css("border","1px solid silver");

IE9のCSS対応状況 CSS Compatibility and Internet Explorer

CSS Compatibility and Internet Explorer
http://msdn.microsoft.com/en-us/library/cc351024%28VS.85%29.aspx

IE9のCSSの対応状況がわかるみたいですよ。
さささーっと見ていたら気になるものがあったの

calc()
この丸括弧… 関数てきなもの?と調べてみたらw3cの仕様で値を計算で求められるらしい

http://www.w3.org/TR/css3-values/#calc

@namespace
何気に嬉しいネームスペース。が、使いどころは難しいかもしれないw

他にも見慣れないものとか、Border系,MultiBackgroundなどCSS3に対応しているようです。まだBetaなのであとどのくらい対応するかはわかりませんけど。


CSS3でできることがガッと増えて嬉しい反面、複雑・高度化していますねぇ

それより、IE6の撲滅と最新のIEの普及っていう難題がありますがww

PHPカンファレンス2010 テックデイに行って来た

PHPカンファレンス2010 テックデイに初参加してきたよー

PHPの生みの親のRasmus LerdorfさんとFacebookのScott MacVicar話が直接聞けたことが感動した訳ですが
あんまり機会がないからね。それより、自分の英語力の無さに絶望した!

結果:参加してよかった。
来年もあれば是非行こうと思います。


では、興味をあったことをつらつらと…

PHP Then and Now

http://talks.php.net/show/phpjp10

・Rasmus Lerdorfさん登場
・PHPバージョン1から今までの歴史
・PHP6で、多くの機能を取り込みすぎて失敗した
 php5.4になるよ
・DateTime機能が強化されたよ
 ここで2,3行でしたが生コーディングが見れた。

フレームワークアップデートLT
CakePHP
・リファクタリング中
・PHP4の部分を削除
詳細は PHPMatsuriで(ビデオレターあり)

http://2010.phpmatsuri.net/blog/guest-interviews 

Lithiumを始めるには?
チュートリアルを読む
ブログ、認証機能、フィルター を使ってみよう
MongoDBベースだよ。
1.0にはドキュメンを整えるよ
それまではソース読んでね
Ethna → えすにゃん
Codeignitor

http://codeigniter.jp/archives/196

BigWaveがくるよ

HiPHoP for PHP
PHPをC++言語に変換して高速化するよ
ライブデモでは、4倍高速化されたが実際は2倍程度
evalや正規表現の/eとdefine()とか描き直さないと使えないよ。

Microsoft ♥ PHP ~ 2nd Stage ~ WebMatrix 登場!http://www.slideshare.net/hirookun/php-conference-2010-final-5283700
Windowsに簡単にPHP環境を整えられるよ!
デフォルトブラウザはIEです。当たり前です!
MySQLもOBDC経由でつかえちゃったりするよ!
WordpressみたいなCMSはボタンひとつでインストールできちゃうよ

文字コードに起因する脆弱性とその対策

http://www.slideshare.net/ockeghem/ss-5283574

htmlspecialcharsは必ずエンコード指定すること!
なるべくUTF-8を使う?
バグを直したことにより、別のセキュリティホールが生まれるってことも

PHPストリーム概説

http://hnw.sakura.ne.jp/documents/phpcon-20100925.pdf

ローカルファイルも、HTTPでも、透過的にあつかえるよ
cURLもいいけどfopenもね!

新潟アクセス修飾子のご提案

http://prezi.com/2r6wmrriyeqb/niigata/

新潟←よめないけど、書けない
PHPコアをいじるのはたのしいよ!


PHPの中の人によるパネルディスカッション
ラスマスさんを中心に
Facebookの人途中参加

次期PHPはパフォーマンスがよくなるよ
Scalar Type Hintingは、入らないかもしれない
マルチバイト関係は、もっと日本のエンジニアに増えて欲しい的な感じでした。?

ライトニングトークス
究極のPHP本完成 これは期待したい。

Mantis バージョンアップしたらDokuwikiがエラーになった

Mantisを1.2.2にアップデートした所為か、
Dokuwikiにアクセスするとエラーを吐くようになってしまった。

エラー箇所はなぜかMantis。うーん、自動ログインあたりでダメなのか?
とりあえず、エラーを元に関数の二重定義っぽいので↓あたりのファイルを修正し終わったと思ったら
~/liblary/utf8/mbstring/core.php
~/liblary/utf8/substr_replace.php


別のエラーが出てしまった
Fatal error: Call to undefined function get_enum_to_string()

どうやらfunction get_enum_to_string関数がMantisのバージョンアップと共に無くなってしまったようだ。
他の関数ででっち上げればよさそうだが、ちょっと面倒…

で試しにググッてみたところMantis本家のBTSがヒット

http://www.mantisbt.org/bugs/view.php?id=11019

内容を見てみると、なんとズバリな回答コメントがあるではないですか!

その内容をコピペして頂いたところ無事、ログインできるようになりました!ありがたやぁ〜

Mantis 1.2.xに(やっと)バージョンアップしてみた

MantisBT 1.1.8から 1.2.xにバージョンアップしようとした所、なぜかSQLエラーで止まる。
そんな感じで半年くらいすぎて、先日 1.2.2がリリースされた&ちょっと時間ができたのでもう一回アップグレードに挑戦。

が、何度やっても、ダメ。結果は変わらず、、、

試しに、1.1.8を素でインストールした後、1.2.2をインストールしたら出来た。
※当たり前ですが…


いろいろとデータの差分を眺めていたらふと、configの「database_version」の項目のproject_idが、20になってる。。。

もしや?と思い database_versionを0にしてアップグレード処理を走らせたら
さっきまでとは違いなにやら処理が走ってる感じがあり、、、無事完了したっ

それにしてもなぜproject_idが20に成っていたかは謎。
そもそも、結果できたけど0にしていいかも分からずw

WordPress 3.0 リリース&アップデートしてみた

WP3.0正式版がリリースされましたね!
日本語版を待っていたのですがこないので英語版でアップデートしちゃいました。
WP3.0RC2の時の日本語ファイル(/wp-content/languages/ja.*)を上書きしたら問題なく日本語になりました。

WP3.0の変更点は、http://wpdocs.sourceforge.jp/Version_3.0あたりにまとまってるみたい。

アップデート前に一応したことメモ
・バックアップ(全ファイル・DB)
・プラグインをすべて最新にする(3.0対応になっているか確認)
・問題がないように祈る
このくらいです。

さっそくテーマの変更をしてみた。
なにげにHTML5宣言になってますね、headerとかのタグは使われてませんけど。
いままでより横幅が広がっていい感じ。