2inc.org

  1. HOME
  2. blog

ボックスを横並びにしたときの最端の余白をなんとかする

画像と画像の間に25pxの余白を持たせた形で横並び(float:left)。普通なら3つめの画像の右余白の25pxが邪魔してカラム落ち。それを防ぐために.rightとかclass振りますが、メンドクサイので無理やりなんとかしてみましょー。(動作未確認。)

html

<div id="productList">

	<ul>
		<li><img src="hoge.jpg" alt="画像" /></li>
		<li><img src="hoge.jpg" alt="画像" /></li>
		<li><img src="hoge.jpg" alt="画像" /></li>
		<li><img src="hoge.jpg" alt="画像" /></li>
	</ul>

<!-- end #productList --></div>

css

#productList{
	width:800px;
}
#productList img{
	width:250px;
}
#productList ul{
	list-style:none;
	margin:0 -25px 0 0;
	padding:0;
	zoom:1; /* ie */
}
#productList ul li{
	float:left;
	margin:0 25px 0 0;
	padding:0 0 15px 0;
}

/*----------------------------------------
clearfix
----------------------------------------*/
#productList:after{
	content:".";
	height:0;
	clear:both;
	display:block;
	visibility:hidden;
	font-size:0;
	line-height:0;
}

#productList{
	display:inline-block;
}

/* exlude MacIE5 \*/
* html #productList{
	height:1%;
}

#productList{
	display:block;
}
/* end MacIE5 */

特定の属性を持ち、特定の子要素を持たない要素を選択するjqueryセレクタ

要素[属性='属性値']:not(:has(’要素2′))

phpにおける文字列比較でハマる

数値として文字列が評価された時、結果の値と型は次のように定義されます。

文字列の中に ‘.’ や ‘e’、’E’ といった文字が含まれず、 数値が integer 型の範囲内 (PHP_INT_MAX で定義されています) におさまる場合は integer として評価されます。それ以外の場合は、すべて float として評価されます。

文字列の最初の部分により値が決まります。文字列が、 有効な数値データから始まる場合、この値が使用されます。その他の場合、 値は 0 (ゼロ) となります。

http://www.php.net/manual/ja/language.types.string.php#language.types.string.conversion

phpは数値と文字列が比較された場合、文字列は「0」として扱われるんだと。普通に考えて「0==文字列」で比較してtrueになるなんて思わねぇだろ\(^o^)/

文字列として比較する場合は、「strcmp($str1,$str2)」を使った方が無難。

参考

HTTPS通信時、IEでCSVファイルがダウンロードできない件

phpでDBからCSVファイルを生成、submit押したらダウンロードという単純なプログラムを作成したんだけど、なぜかIEでだけダウンロードできない。またIEかよと。

調べてみたところ、どうやらCache関係でいろいろあるらしい。

no-cache指定されていると発生するようです。

なんとなく意味がわかりました。IEだとページ閲覧もダウンロードもすべてtemporary Internet filesフォルダへいったん保存されます。保存されたデータは、no-cache指定されていると、即削除されるため、ダウンロードの場合の、

ダウンロード→temporary→指定フォルダ

この流れが実現できないためかと思われます。ダウンロード→temporaryこの時点で削除されてしまうため。

PHPで、これを回避するには、cacheするように設定することで対応可能です。

PHPでCSVファイルのダウンロード(SSL+IE)Tips for Programing

実際にheader情報を確認してみると、確かに

Cache-Control: no-cache
Pragma: no-cache

とあるのを発見。まぁ冷静に考えてみれば、SSLなんだからこのようなCache設定になってるのは当たり前か。
てことなんだけど、以下のような情報も発見。

IE6 の場合、アクセスしたページの HTML ファイル本体とそのファイルで指定してあった css ファイルが一時フォルダにキャッシュされることが確認できた。ブラウザを閉じても、これらのファイルは残されたままだった。サイトの設計によっては、このキャッシュファイルの中にクレジットカード情報などが入っていることになるかも知れない。ちょっと恐ろしい仕様だと思われた。サーバー側でがんばって no-cache ヘッダを出すとか、対策をする必要があるだろう。

ff3 の場合、アクセスしたページの HTML ファイル本体とそのファイルで指定してあった css ファイルがメモリにキャッシュされた。ブラウザを閉じたらこれらのキャッシュは消えてしまった。後から出たブラウザだからこうなっているのかも知れない。キャッシュもきいて、センシティブな一時ファイルも残らない、バランスの取れた実装だと思った。

SSL と キャッシュの微妙な関係 民芸的プログラミング 〜ソフトウェア開発日記〜

IE・・・orz
今度実験してみよう。

jqueryでカテゴリごとにメニューの画像を切り替えるTips 2

以前にも一度書いてますが、汎用性0で非常に使いにくいものだったので、再度組み直し。良くわからないまま組んだけど、とりあえず動いているっぽいので公開します。

/*========================================

gnav画像を反転させるjquery plugin

========================================*/

function globalNaviCurrent() {
	var url = location.pathname
	var directory = url.split("/");

	if(directory[1]==''){
		var currentDirectory = "/";
	}else if(directory[1]=='category'){
		var currentDirectory = directory[2];
	}else{
		var currentDirectory = directory[1];
	}
	var currentA = $('#header #GlobalNavigation ul li a[@href$=' + currentDirectory + '] img');

	if(imgsrc = currentA.attr("src")){
		var kugiri = imgsrc.split("_n",2);
		var imgsrcCurrent = kugiri[0] + "_r" + kugiri[1];
		currentA.attr({ src: imgsrcCurrent });
	}
};
$(document).ready(globalNaviCurrent);

ルートの直後の階層のパスを取得して判別します(「http://2inc.org/web/html」だったら「web」)。一応wordpress用ってことで、カテゴリーページには「category」というパスが入るようだったので、その判別入れてます。

サイトに会わせて書き換えないといけないのは「currentA」に渡す画像の階層の部分。あとは_nという画像と_rという画像を用意してそれを反転させてます。

参考

名前ベースのバーチャルホストでSSL

IP ベースのバーチャルホストでは、応答する バーチャルホストへのコネクションを決定するために IPアドレスを使用します。ですから、それぞれのホストに個々に IPアドレスが必要になります。これに対して名前ベースのバーチャルホストでは、クライアントが HTTP ヘッダの一部としてホスト名を告げる、 ということに依存します。この技術で同一 IP アドレスを異なる多数のホストで共有しています。

名前ベースのバーチャルホストは通常単純で、それぞれのホスト名とそれに対応する正確な IP アドレスを DNS で設定し、異なるホスト名を区別するように Apache HTTP サーバを設定するだけです。さらに、名前ベースのバーチャルホストは不足する IPアドレスの需要を緩和します。したがって、IP ベースのバーチャルホストを選択すべき特定の理由がなければ名前ベースのバーチャルホストを使うべきです。IP ベースのバーチャルホストを使用することを考慮する理由として、

  • 名前ベースのバーチャルホストに対応していない古いクライアントがある名前ベースのバーチャルホストが働くためには、クライアントはHTTP ホストヘッダを送ってこなければなりません。 これは HTTP/1.1 の仕様で要求されていて、すべての現代的なHTTP/1.0 ブラウザでも拡張として実装されています。とても古いクライアントをサポートしつつ、名前ベースのバーチャルホストを行いたい場合は、この文書の最後の方に書かれている解決策になるかもしれない方法を見てください。
  • 名前ベースのバーチャルホストは SSL プロトコルの特徴により、SSL セキュアサーバには使えません。
  • オペレーティングシステムやネットワーク装置のなかには、別の IP アドレス上でない場合、複数のホストを別扱いできないような帯域管理の方法を実装しているものがあります。

名前ベースのバーチャルホスト

できないらしい。見事にはまってしまったではないかorz

ちなみにバーチャルホストに https で接続要求を行うと、httpd.conf のServerNameで指定したサーバー自身のドキュメントルートを返すため、フルアクセス、つまりhttpをhttpsと置き換えて利用できるhttpsサーバーとしては使う事は出来ないということであり、バーチャルドメインでのSSL運用が出来無いと言う訳ではありません。言葉足らずだったのでこの辺を補足します。

特定のディレクトリに存在する掲示板など、通常のドキュメントルート下に設置できるのであれば、特定ディレクトリでのSSL暗号化保護においてバーチャルドメインによる運用は可能です。例えば、以下の様になります。

httpsでバーチャルドメインに接続した場合、ServerNameで指定した通常のドキュメントルートを返します。つまり、/aaa/というディレクトリを同一ディレクトリです。

https://VirtualDomain.com/aaa/ = https://ServerName.com/aaa/

ディレクトリ/aaa/をバーチャルドメイン、VirtualDomain.com の専用掲示板としてServerName.comのドキュメントルートに設置できるのであれば、SSLの保護に関してはバーチャルドメインによる運用は可能です。

ただし、クライアント認証などは、ServerName.comのサーバー証明書との兼ね合いで制限が出てくると思います。試してません。SSLによる保護は行えますので第三者から通信の盗聴を防ぐ目的は達成されます。

名前ベースのバーチャルホストの欠点

あれ?できるのか?じゃあapacheの設定が悪かったのか…。

各携帯キャリアのユーザエージェント

思ってたより統一されてるのね。

Linuxで任意のプロセスのプロセス数を表示する

ps ax | grep プロセス名 | wc -l

httpdの数が知りたいなら

ps ax | grep httpd | wc -l

NP_NewsfeedEXがインストールできない

Nucleusの管理画面でNP_NewsfeedEXをインストールしようとすると画面上が文字で埋め尽くされインストールに失敗。

いったん削除してから再度入れ直してもダメ。エンコードのせいかなと思いプラグインのエンコードを変更したりしてみたけど効果なし。うーん、困った。

画面上に無造作に表示されている文字をよくよく読んでみるとどうやらNP_NewsfeedEXのソースコードっぽい。ソースコードが画面上に表示されるということはphpと認識されていないということなので・・・NP_NewsfeedEX.phpをエディタで開いてみると、phpがショートタグで開始されているではないか!Nucleusをインストールしているサーバは「short_open_tag off」の設定になっている。そりゃダメだわ。

illustratorで、リンクされたepsが開けない場合の対処法

Macで制作されたillustratorを受け取ったとき、Winでそのファイルを開くと、リンク配置されたepsが表示されないことがよくあります。透明の枠だけ配置されたような状態ですね。

リンク配置された画像の表示は、本体ではなくサムネイルが使われているらしいのですが、どうもMacとWinではそのサムネイルの形式が違うためにこのような問題が起こるらしい。Macではpict、Winではtiffの模様(確かめてないです。不正確な情報)。

てことで、サムネイル表示をせずに本体を表示させれば見えるようになるんじゃないかと。

「編集」→「環境設定」→「ファイル・クリップボード」を開き、「リンクされたEPSに低解像度の表示用画像を使用」のチェックを外すと・・・見える!見えるよ!

けど、epsが日本語ファイル名の場合は、これをしても駄目な場合があるらしい(これも確かめてないです。不正確な情報)。