2004年07月07日
仕事で作っているサイトのサーバーを移転するという話が持ち上がっている。
しかも移転先はMS ServerにIIS。糞サーバーです。明らかに改悪。
これが本決まりになったら、辞職するつもり。
そんなコダワリが多いから新しい仕事が来ないのだわ(-_-;
Mac OS X ServerにWebObjectsだったら、給料下がっても喜んでやります!
使ったことないけど。
投稿者 Utayume : 17:30 | トラックバック (0) | 05 Work(Perl, PHP, etc)
2004年06月19日
といってもこのサイトではなく、「主たる収入」となる仕事で作っているサイトです。
あえてURLを書いたり、リンク貼ったりはしませんが、有名な会社なのですぐわかるでしょう。そのホテル専門サイトです。
↓トップページのスクリーンショット
<公開時画像を貼っていましたがトラブルを避けるために削除しました>
このドメインに含まれるWebプログラム(Perl、PHP)は全てワタクシが作っております。
デザインはワタクシではありません。
このサイトのメインとなるのが、当然ながらホテル料金のページであり、今までは全ホテルの料金を表示するためのシステムとしてはmod_perlとテキストDBのリレーションを使いハードウェアの力任せに運用していた(当初ピュアPerlで作っていた時は、サーバが落ちまくっていた^^;)のですが、1秒間に数回は起動されるような高アクセス数のページで、取り扱いホテルも増えてきたために限界がきてしまいました。
そこで、サイトのデザイン的なリニューアルと合わせて、PHP&MySQLなシステムへ移行することにしました。
↓ホテルリスト表示部
<公開時画像を貼っていましたがトラブルを避けるために削除しました>
公開する前はサーバー負荷がどのぐらいになるか予測できなかったために夜も眠れない日々でしたが、公開してみると高アクセスな時間帯でもCPU負荷が大幅に減ったようです。
MySQLすごいです。DBのメインのテーブルが30000行以上で、ホテルリスト部では最低3回ほどSQLを発行していますが、アクセスが多くてもスピードはほとんど落ちていません。
確かに機能的には足りないものが多く、苦労したところもありますが、このスピードは代えがたいですね。
まだまだ某最大手サイト(Microsoftの協力で作っている)には負けているので、さらに進化させます。Windows Server&ASPなシステムなんかには負けたくないです。(無謀)
でも社内的にも社外的にも反応がイマイチわからないので、このシステムがいいのか悪いのかわかりません。
投稿者 Utayume : 01:33 | トラックバック (0) | 05 Work(Perl, PHP, etc)
2004年03月17日
思ったように動作しなくて数週間悩んでいて、やっと今日理由がわかったので、書いておきます。
PHPの関数「array_diff」について、技術評論社の『PHPポケットリファレンス』(2003年3月15日発行初版第一刷)には
array_diff関数は、それぞれの配列を比較し、共通しない要素のみ含まれる値を持った配列を返します。戻り値の配列の添え字は保存されます。
と書かれてあったので、第1引数と第2引数の比重は同じで、
array_diff($a,$b)
でも
array_diff($b,$a)
でも同じ結果を返すと思っていました。
ところが、本家のマニュアルを読んでみると、どうやら意味合いがちょっと違うらしい。
わかりやすく書くと、「第1引数の中から第2引数以降にない要素を返す」っていうことなんですね。
/*array_diff関数サンプル*/
$a = array("メシアン","ジョリヴェ","ハラダ タカシ","マルトノ");
$b = array("マルトノ","メシアン","ジョリヴェ");
$result0 = array_diff($b,$a);
$result1 = array_diff($a,$b);
var_dump($result0);
var_dump($result1);
/*サンプルここまで*/
このサンプルの結果は
array(0) { }
array(1) { [2]=> string(13) "ハラダ タカシ" }
となります。
『PHPポケットリファレンス』って使えないなぁ。増刷分で加筆してあるのかな?
今回の記述不足に限らず、このリファレンス本には日本語のワード索引がないってのも致命的。
小さくて場所取らないから使いやすいんだけど残念です。
教訓。
「オンラインマニュアルはちゃんと確認しましょう」
特にPHPの場合、新しい言語で仕様変更も激しいので、出版物では追いつかないこともあります。
投稿者 Utayume : 21:39 | トラックバック (0) | 05 Work(Perl, PHP, etc)
2004年03月12日
PHPユーザー定義関数の備忘録。
$file1のjpgファイルを短辺を一辺として正方形(以下のサンプルの場合60px四方)にリサイズします。
戻り値の$imgはimagejpeg関数でブラウザに出力するなりファイルに保存するなりします。
最後の2行のimagedestroyって関数外で$imgを使っているので意味ないような気がしますが、一応入れておきました。
どんな場合にこのスクリプトが利用できるかと言うと、例えばYahoo!トラベルのように詳細画面には写真があるけど、画像の縦横比がばらばらの場合、わざわざリスト表示用に同一サイズのサムネイル画像を手動で1枚1枚作るのではなく、既にサーバー上にある画像を使い自動で一気に生成します。
たぶんYahoo!トラベルも同じようなシステムのはず。
サンプルではGD2.0がインストールされている場合をコメントアウトしていますが、GD2.0ならサムネイル画像が綺麗にできるはず。でも環境がないのでGD2.0での動作確認はしていません。
function createThumb($file1){
$imagesize = getimagesize($file1);
if ($imagesize[0] < $imagesize[1]){
//縦長の画像の場合幅を60pxにして余った上下を切り取り
$resizerate = 60 / $imagesize[0];
$resize_h = (int)($resizerate * $imagesize[1]);
$resize_w = 60;
$resize_x = 0;
$resize_y = (int)(($imagesize[1] - $imagesize[0]) / 2);
}else{
//横長の画像の場合高さを60pxにして余った左右を切り取り
$resizerate = 60 / $imagesize[1];
$resize_h = 60;
$resize_w = (int)($resizerate * $imagesize[0]);
$resize_x = (int)(($imagesize[0] - $imagesize[1]) / 2);
$resize_y = 0;
}
$img = imagecreate(60,60);
$imagefrom = imagecreatefromjpeg($file1);
imagecopyresized($img,$imagefrom,0,0,$resize_x,$resize_y,$resize_w,$resize_h,$imagesize[0],$imagesize[1]);
//GD2.0以上が使える場合
//$img = imagecreatetruecolor(60,60);
//$imagefrom = imagecreatefromjpeg($file1);
//imagecopyresampled($img,$imagefrom,0,0,$resize_x,$resize_y,$resize_w,$resize_h,$imagesize[0],$imagesize[1]);
return $img;
imagedestroy($imagefrom);
imagedestroy($img);
}
実際のプログラム内での記述では、上記で作成したサムネイル画像は特定のディレクトリに保存した上で、
サムネイル画像がある →サムネイル画像を表示
↓
サムネイル画像が無い
↓
詳細ページに大きい画像がある →サムネイル作成
↓
詳細ページに画像がない →画像がない旨のサムネイル表示
というようにすると、サムネイルがない画像を新たにアップすれば自動でサムネイル作成されるので、サーバー負荷も減り、良いと思います。
投稿者 Utayume : 13:13 | トラックバック (0) | 05 Work(Perl, PHP, etc)