月: 2012年12月

Windows Web Server 2008 R2をインストールするにあたってのメモ

Windows Web Server 2008 R2をインストールするにあたってのメモ

Windows Web Server 2008 R2を初めてインストールするので色々メモ。
※開発環境としてなので色々緩めです。

■初期構成タスクの表示のさせ方
「スタート > ファイル名を指定して実行」を選択して「oobe」と入力

■IEのセキュリティ設定の変更
サーバーマネージャの初期画面には 「IE ESC の構成」という項目があり、IEのセキュリティー設定の変更ができる。
デフォルトではIEのセキュリティー設定があらかじめかなり高く設定してあり、満足にWeb閲覧が出来ない状態になっている。
開発機などでIEを使いたい場合はオフにすればいい。

■サーバーマネージャの表示のさせ方
「スタート」をクリックして、コンピューターを右クリックして管理を選択する
or
「ファイル名を指定して実行」で「CompMgmtLauncher」を入力する

■IISへのクライアントからのアクセスログ
標準では「C:\inetpub\logs\W3SVC1」に入っている。
IISのログに関する設定は、IISマネージャの「ログ記録」というアイコンから変更可能。
ログの記録形式はW3C形式という形式。
出力されるログに記載される時刻はUTC(協定世界時)となっていて、日本の標準時刻より9時間早く表示されている。
ログの出力のタイミングはリアルタイムではなく時間差がある。急いで確認したい場合はサイトレベルでの再起動を行うとログが出力される。

■トレースログ
IISではApacheのエラーログに該当する機能はないためトレース機能を利用する。
トレース結果を出力したい場合には、トレース機能の追加、出力規則を指定し、トレース機能を有効にすることでXML形式で出力される。

◇トレース機能の追加
・「サーバーマネージャ > 役割 > Web サーバー(IIS)」をクリック

・役割サービスの追加というボタンをクリックして「Web サーバー > 状態と診断」内の「トレース」にチェックを入れて「次へ」をクリック
・「インストール」をクリック
・インストールが完了したら、IISマネージャでトレース関連のアイコンを表示させるためにサーバーマネージャを再起動
・IISマネージャにアクセスし、「コンピューター名」をクリックして、一覧の中から「失敗した要求トレースの規則」をクリック
どの状態の時にトレースを実行するかを指定
・設定完了後、「コンピューター名 > サイト > Default Web Site」を開き、右側の操作パネルで再起動
・右の操作パネルの下部に「失敗した要求トレース」というリンクが増える
・このメニューを開き、有効にするとそれ以降のアクセスから規則に該当したリクエストのトレースが記録される

■IISでのアクセス権
権限付与は「IUSR」に対して付与する
IIS経由のファイルアクセス時の権限は「IUSR」というユーザー(正確にはユーザーではない)へのアクセス権の設定が評価される。
■必要に応じてPHPのextensionを利用する
多くのextensionはphp.iniでアンコメント(行頭の「;」を外す)して、アプリケーションプールをリサイクルするだけで利用可能になる。
■Unix形式のパーミッション444にする方法
権限を読み取り専用(444)に変更する場合は、該当ファイルで「右クリック > プロパティ」を表示し、属性の所
にある「読み取り専用」にチェックを入れ「適用 > OK」で対応可能。
読み取り専用かどうかのチェックはまずはこの「右クリック > プロパティ」の個所の「読み取り専用」が評価されるらしい。
■「.htaccess」の設定はIISの機能で行う
http://thinkit.co.jp/article/991/1?page=0,1

■実際にインストールしたときの参考
◇基本インストール
p17~p34を見て行った。

◇IIS7.5のインストール
p545~p549を見て行った。

◇PHPインストール(ISAPI版)
p101~p105を見て設定を行った。64bit環境での注意点を見て設定を行う必要がある。

C:\Program Files (x86)\PHP\php.ini
ファイルを
C:\Windows\php.ini
に設置して内容を修正してからIISの再起動を行う。
doc_rootとか直す

※本当はFastCGI版にしたかったんだけど環境をあわせろ縛りがあってやむなくISAPI版
※IISは7.5が入っているけど上記の本のとおりで一応動く

◇MySQLのインストール
以下のサイトを見てそのまま行った。

Windows Web Server 2008 R2にMySQLをインストール

■参考URL
WindowsサーバーでOSSを使おう

IIS de OSS 64bit-IIS7.5のインストールや設定方法について

jQueryと一緒にRequireJSを使ってみる

jQueryと一緒にRequireJSを使ってみる

RequireJSをちゃんと使うべく勉強。
WEB+DB PRESS vol.69に
「RequireJSでらくらくモジュール管理」
というのがあったのでこれを参考にする。

まずはRequireJSのメリット3つ
□カプセル化されたモジュールの定義
AMD(Asynchronous Module Definition)モジュールと呼ばれるカプセル化された再利用性の高いモジュール定義が行える。
AMDはコールバック関数を使って定義するのでグローバル変数に頼らずに他のモジュールを呼び出せる

□ネストした依存関係の自動解決
依存関係が多段にネストしていても利用するモジュールを呼べば自動でRequireJSが依存を解決してくれる。

□非同期読み込みと最適化ツールによるパフォーマンスの向上
非同期に読み込むことでレンダリングのブロックを回避できる。
最適化ツールが用意されている(今回の実験ではやらない)

ではとりあえず書いてみる。
元々記事に記載されていたコードをjQueryを使った
バージョンに書き換えてみる。

RequireJSはここのページの「Sample RequireJS 2.1.2 + jQuery 1.8.2 project」をおとしてくる
※2012/12/07時点です。
ここから先のサンプルコードで使っている「require-jquery.js」は
解凍したフォルダの中の
jquery-require-sample\webapp\scripts\require-jquery.js
を使っています。

■ファイルの構成

.
|– js
| |– component.js
| |– config.js
| |– counter.js
| |– maxheight.js
| |– page.js
| |– require-jquery.js
| |– require.js
| `– util.js
`– page.html

require.jsとrequire-jquery.jsの両方があるけど
jquery使う場合はrequire-jquery.jsがいいらしい。
ただrequire-jquery.jsはrequire.jsとjquery.jsを
連結しただけのものらしい。
でもこうすることでjqueryのプラグインが非同期で
ロードされる前に本体がロードされていることを保障
できるってことらしい。

■page.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <!-- 現在の時刻を表示する -->
        <h1 id="label"></h1>
        <div id="clock"></div>
        <hr /><!-- 単純なjqueryプラグインの実験↓ -->
        <label>一番大きいdivの高さ</label>
        <p id="height"></p>
        <hr /><!-- 複数のライブラリ中でjqueryプラグンが呼び出されたときの実験↓ -->
        <label>呼び出された回数</label>
        <p id="count"></p>
        <script>
            var require = {
                // キャッシュの防止
                urlArgs: 'bust=' + (new Date()).getTime()
            };
        </script>
        <script src="js/require-jquery.js" data-main="js/page" async></script>
    </body>
</html>

■js/config.js

define(function() {
    return {
        label: '現在の時刻',
        format: '%Y/%m/%d %H:%M:%S'
    };
})

■js/util.js

define(function() {
    function pad2(num){
        return ('0' + num).slice(-2);
    }

    function formatDate(date, formatStr) {
        return formatStr.
            replace('%Y', date.getFullYear()).
            replace('%m', pad2(date.getMonth() + 1)).
            replace('%d', pad2(date.getDate())).
            replace('%H', pad2(date.getHours())).
            replace('%M', pad2(date.getMinutes())).
            replace('%S', pad2(date.getSeconds()));
    }

    return {
        formatDate: formatDate
    };
});

■js/component.js

define(['jquery', 'config', 'util', 'counter'], function($, config, util) {
    function display($elem){
        $elem.text(util.formatDate(new Date(), config.format));
    }

    function render($elem) {
        display($elem);
        setInterval(function() {
                $(this).counter();
                display($elem);
            }, 1000);
    }

    return {
        render: render
    };
});

■js/page.js

require(['jquery', 'config', 'component', 'maxheight', 'counter'], function($, config, clock) {
    // configのラベルを表示(config依存)
    $('#label').text(config.label);

    // 現在の時刻を表示(component依存)
    clock.render($('#clock'));

    // ここから下はおまけの実験
    // ページ内のdiv要素で最も高いもののheightを返してみる(maxheight依存)
    $('#height').text($('div').maxHeight());

    // 5秒に1回たまったカウントを表示(counter依存)
    setInterval(function() {
        $('#count').countDisplay();
    }, 5000);
});

■js/maxheight.js

define(['jquery'], function($) {
    $.fn.maxHeight=function(){
        var max = 0;
        this.each(function() {
            max = Math.max( max, $(this).height() );
        });
        return max;
    };
});

■js/counter.js

define(['jquery'], function($) {
    var count=0;
    $.fn.counter=function(){
        count++;
    };
    $.fn.countDisplay=function(){
        this.text(count);
    }

});

■実際にうごかした画面。。。

実際に書いてみると以外に簡単に使えるんだなという印象。
自作したライブラリはとりあえずdefineで囲めばいいっぽいし。
defineで囲みたくない場合はshim設定で利用すれば擬似的に
モジュールで使えるということらしい。

後は今回でいうpage.jsの中でKAYACのURL dispatcher的な
ものを使えばよりいい感じになるのかもしれない。

そこそこ規模が大きくても何とかなるjavascriptの設計(URL dispatcherの薦め)

■参考URL

JavaScriptを分割&非同期で読み込めるRequireJS

RequireJS 2.0による依存関係の明示、フォールバック、複数バージョンの混在

勉強会資料シェア Getting Started with RequireJS

java-ja.js #2 RequireJS実践編

jQueryのプラグインをつくってみよう

条件付きコメント(バージョンベクタ)

条件付きコメント(バージョンベクタ)

IE7で動かないjsがあって条件付きコメントを書く必要があったのでメモというかリンクまとめ。
※条件付コメントっていう名称が出てこなかっただけ・・・。

IE10以降は条件付きコメント機能は廃止され、ただのコメント扱いになるのは知らなかった。

ウィキペディア:条件付きコメント

バージョンベクタを使用したブラウザ検出

バージョンベクタ?

バージョン ベクタは、ブラウザの起動時に読み取られる
レジストリ キーに格納されている、Windows Internet Explorer
の内部バージョン番号を表します。Web 開発者は、バージョン
ベクタを使用して、閲覧者が Web サイトの表示に使用している
ブラウザを検出できます。

PHPで簡単に死活監視をする方法

PHPで簡単に死活監視をする方法

処理の前に特定のサーバの状態を確認する必要があったのでメモ。

fsockopen関数を利用します。

fsockopen — インターネット接続もしくは Unix ドメインソケット接続をオープンする

■サンプルコード

function ping($host, $port=80, $timeout=5){
    $fsock=@fsockopen($host, $port, $errno, $errstr, $timeout);
    if(!$fsock){
        echo 'errno ... ' . $errno . "\n";
        echo 'errstr ... ' . $errstr . "\n";
        return FALSE;
    }else{
        return TRUE;
    }
}

$host='www.mogumagu.com';
$res=ping($host);

echo $res ? '応答有り' : '応答無し' . "\n";