2009年09月23日

EmEditorでCSSの単語補完が大文字に・・・

【覚え書き】

単語補完を使うならヒント表示される DreamWeaver のほうが便利なんですが、DreamWeaver はなかなかにヘビーなソフトなので、起動に時間が掛かってしまうのが難です。
そんなときには、EmEditor のような起動の速いエディタソフトが便利。

しかし・・・
EmEditor にも単語補完があるので CSS の修正のため利用してみたら、すべて大文字で補完してしまうではないですか!
たぶん、他の機能を追加したなどで設定が変わってしまったのだろうけど、CSS を大文字でってのはさすがに無いですよね・・・(-.-;

というわけで、修復の仕方をいろいろ調べたけど、そんな症状の方はいないようでした(T-T
で、なんだかんだとメニューを弄っているうちに戻ったようで、
「すべての設定のプロパティ」→「強調(1)」→「リセット」→「CSSを選択」
たしか、ような感じだったと思います。

2008年11月20日

addEventListenerでonload処理

【覚え書き】

window.onload = setUserFunc;
の代わりに、
if (window.addEventListener) window.addEventListener('load', setUserFunc, false);
if (window.attachEvent) window.attachEvent('onload', setUserFunc);
に変更。
条件によるイベントの発生で実行されるようなので、一度きりのwindow.onloadより使い勝手が良さそうです。
タグ:onload javascript

2008年10月02日

ちょっとだけAjax? 非同期通信で複数のテキストを読み込みたい

【覚え書き】

外部に用意したテキストファイルを簡単に読み込んで表示させることは出来ないかな〜
ってことで探していたら、
OPEN SPACE様(http://www.openspc2.org/)のサイトに「非同期通信でテキストファイルを読み込む」というのがあったのでお借りしてみました。
で、自分の場合、ページを表示するときに複数のテキストファイルを読み込んで一緒に表示したいので、ちょっと加工してみました。

サンプル(zip) [Download]


【doc_onload.js】

function createXMLHttpRequest(cbFunc) {
    var XMLhttpObject = null;
    try {
        XMLhttpObject = new XMLHttpRequest();
    } catch(e) {
        try {
            XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                return null;
            }
        }
    }
    if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc;
    return XMLhttpObject;
}
function loadDocFile(fName, idName) {
    this.idName = createXMLHttpRequest(function() {
        document.getElementById(idName).innerHTML = ((this.readyState == 4) && (this.status == 200)) ? this.responseText : "Loading...";
    });
    if (this.idName) {
        this.idName.open("GET", fName, true);
        this.idName.send(null);
    }
}
function setOnload() {
    // loadDocFile(ファイル名, 出力先id)
    loadDocFile("doc1.dat", "result1");
    loadDocFile("doc2.dat", "result2");
    loadDocFile("doc3.dat", "result3");

}
window.onload = setOnload;
----- ここまで -----

出力用の id を付けた div や p タグ等を用意します。
setOnload() 内のloadDocFile(ファイル名, 出力先id)を実行すると、指定したファイルを読み込んで id の付いたタグに表示します。
上記の場合、doc1.dat を読み込んで id=result1 に出力、doc1.dat を読み込んで id=result2 に出力・・・
といった感じです。
更新情報の表示とかちょっとしたものには使えるかな?

ただ、日本語を含む読み込むテキストファイルはBOM付UTF-8じゃないとNGだそうです・・・

2008年08月08日

PHPの動作テストができる環境をローカルPCに構築(2)

【覚え書き】
ローカル環境にPHP 5をインストール(対象:PHP 5.2.6)
※Apache がインストールされていることが前提です。

《PHP の入手》
PHP のダウンロードは下記サイトから
http://www.php.gr.jp/
PHP のダウンロード → Windows Binaries / PHP 5.2.6 installer → jp.php.net or jp2.php.net

《インストール》
1.インストーラを立ち上げ【Next >】
2.「I accept the terms in the License Agreement」にチェックして【Next >】
3.「Install PHP 5.2.x to:」は特にインストール先の変更がなければ【Next >】
4.「Apache 2.2.x Module」にチェックし【Next >】
5.「Apache Configuration Directory:」は Apache の httpd.conf ファイルを指定し【Next >】
(Apache をデフォルトでインストールした場合「C:\Program Files\Apache Software Foundation\Apache2.2\conf\」になります)
6.「Extentions」の[+]をクリックし「Multi-Byte String」を「Will be installed on local hard drive」に変更します
(日本語処理などでマルチバイト関数を使えるようにするため)
他にも必要なものがあれば同様に変更して【Next >】
7.【Install】を押してインストール開始。
8.「Complete the PHP 5.2.x Setup Wizard」と表示されたらインストール完了【Finish】を押して終了です。

《php.ini を設定》
ファイルの場所(デフォルト)
C:\Program Files\PHP\php.ini

■ショートタグを利用可能に設定
デフォルトでは「<?=$data?>」などのショートタグが使えないので、利用する場合は131行目
short_open_tag = Off
を On に変更。

■実行時のエラーを表示されるように設定
デフォルトでは実行時にエラーがあっても表示されないので、表示させるには372行目
display_errors = Off
を On に変更。

HTTPサーバを再起動します。
タスクバー表示領域の Apache アイコンをクリックで【Restart】を選択。

テキストエディタで
<?php phpinfo(); ?>
を記述して info.php のファイル名で保存、Apache をインストール時に設定したルートディレクトリへファイルを置きます。
http://127.0.0.1/info.php or http://localhost/info.php
にブラウザでアクセスしてPHPの設定情報が表示されれば動作OKです。

2008年08月07日

PHPの動作テストができる環境をローカルPCに構築(1)

【覚え書き】
ローカル環境(Windows環境です)にHTTPサーバをインストール(対象:Apache 2.2.9)

《Apache の入手》
Apache のダウンロードは下記サイトから
http://www.apache.jp/
ダウンロード → 保存先サーバ → binaries → win32 → apache_2.2.9-win32-x86-no_ssl-r2.msi


《インストール》

  1. インストーラを立ち上げ【Next >】
  2. 「I accept the terms in the license agreement」を選び【Next >】
  3. 「Read This First」は【Next >】
  4. 「Network Domain」と「Server Name」に「localhost」と入力、「Administrator's Email Address」には使用しているメールアドレスを入力。
    (localhost である必要はありませんが、空のままではインストール作業が進められないので…)
    「for All Users, on Port 80, as a Service -- Recommended.」を選び【Next >】
  5. 「Typical」を選び【Next >】
  6. 「Destination Folder」は特にインストール先の変更がなければ【Next >】
  7. 【Install】を押してインストール開始。
  8. 「Installation Wizard Completed」と表示されたらインストール完了【Finish】を押して終了です。
タスクバー通知領域に小さなアイコンが表示され、緑色の矢印になっていれば Apache は起動されています。


《httpd.conf を設定》
ファイルの場所(デフォルト)
C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf

■ルートディレクトリの設定
177行目
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"
適用するフォルダをドライブレターからのフルパスで指定。
(Ex. "C:/Users/ユーザー/Documents/htdocs")
204行目
<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs">
も同様に。

■.htaccessを利用できるように設定
224行目
AllowOverride None
の None を All に変更。

■index を .html 以外も適用されるように設定
239行目
DirectoryIndex index.html
すぐ後ろに半角スペースを空けて index.php index.cgi 等を続けて記述。
(Ex. DirectoryIndex index.html index.php index.cgi)

タスクバー表示領域の Apache アイコンをクリックで【Restart】を選択。
再び緑の矢印の状態になれば正常再起動。赤くなってしまったら httpd.conf に不備があると思われます。

PHPのインストールは次回・・・

2008年07月09日

クッキーを使って入力フォームのデータを再読み込み

【覚え書き】

お問い合わせページとかでフォームを使ったデータ送信をするとき、入力確認画面や必須項目エラーなどを表示するページを使うことがよくあると思いますが、訂正のために history.back() を使って入力フォームに戻ってみるとすべてのフィールドが見事に空っぽになってしまったってことありませんか?
中途半端にセッションを使ったページなどでは特に起きやすいですよね。
ってことで、javascript ではありますがクッキーを使って入力データしたデータを再読み込みさせるスクリプトを用意してみました。
※HTML内のinputタグやselectタグ、textareaタグには重複しないidをつけておく必要があります。
(idでデータを再読み込みしているため)

フォームデータを再読み込みさせるスクリプト[Download]


【form_reload.js】

// COOKIEに使用するKey(適当な文字列)
var key = 'SetFormData';

// COOKIEへ書き込み
function SetCookie() {
    var p = new Array();
    var d1 = document.getElementsByTagName('input');
    for (var i = 0; i < d1.length; i++) {
        if (d1[i].checked) p.push(d1[i].id + '&Chkd');
        if (d1[i].type == 'text') p.push(d1[i].id + '&' + escape(d1[i].value));
    }
    var d2 = document.getElementsByTagName('select');
    for (var i = 0; i < d2.length; i++) {
        var s = new Array();
        for ( var n = 0; n < d2[i].options.length; n++) {
            p.push(d2[i].id + '&' + d2[i].options[n].selected + '&' + n);
        }
    }
    var d3 = document.getElementsByTagName('textarea');
    for (var i = 0; i < d3.length; i++) {
        p.push(d3[i].id + '&' + escape(d3[i].value));
    }
    var ssl = (document.location.protocol == 'https:') ? ';secure' : '';
    document.cookie = key + '=' + p.join('|') + '|_EOD;' + ExpDate(60) + ssl;
}

// COOKIEの有効期限を取得
function ExpDate(t) {
    exp = new Date();
    exp.setTime(exp.getTime() + 1000 * t);
    return 'expires=' + exp.toGMTString();
}

// COOKIEのデータを元に戻す
function SetParam() {
    if (document.cookie) {
        var k = key + '=';
        var p = new Array();
        var c = document.cookie;
        var st = c.indexOf(k, 0);
        var ed = c.indexOf('|_EOD', 0);
        var d = c.substring(st + k.length, ed);
        p = d.split('|');
        for (var i = 0; i < p.length; i++) {
            v = p[i].split('&');
            if (v[1] == 'Chkd') document.getElementById(v[0]).checked = true;
            else if (v[1] == 'true') document.getElementById(v[0]).options[v[2]].selected = true;
            else if (v[1] == 'false') document.getElementById(v[0]).options[v[2]].selected = false;
            else if (v[1]) document.getElementById(v[0]).value = unescape(v[1]);
        }
        DelCookie();
    }
}

// COOKIE消去
function DelCookie() {
    document.cookie = key + '=;' + ExpDate(-1);
}

// ページ読み込みと送信時の処理
window.onload = SetParam;
window.onsubmit = SetCookie;

2008年02月04日

お手軽な(?)ポップアップウィンドウ

【覚え書き】
お手軽な(?)ロールオーバーイメージとに続き、
同じ手法を使った「サブウインドウポップアップ」スクリプトです。

Ex.)
サブウインドウ用のHTMLを用意。
ポップアップ用リンクタグに「popup」の文字を含めた target オプションを指定。
rel に"幅,高さ"を指定するとそのサイズでウインドウをオープンする。
(<a href="subwin.html" target="popup" rel="400,200">別ウインドウを開く</a>)
※下の javascript では、デフォルトの幅を640px固定です。その他の window.open オプションはスクリプトの中を覗いて下され(^^;)


【popup.js】
//-------------------------------------
//  Popup Window
//-------------------------------------

function setPopUp() {
    if(!document.getElementsByTagName) return false;
    var popUpList = document.getElementsByTagName('a');
    for(var i = 0; i < popUpList.length; i++) {
        if(popUpList[i].target.match(/popup/i)) {
            popUpList[i].onclick = function() {
                if(this.rel) {
                    var r = this.rel.split(',');
                    var wSize = optPopUp(r[0],r[1]);
                } else {
                    var wSize = optPopUp();
                }
                var win = window.open(this.href,this.target,wSize).focus();
                return false;
            }
        }
    }
    return true;
}

/* Options */
function optPopUp(h,v) {
    if(!v) {
        v = (navigator.userAgent.indexOf('Opera',0) >= 0)
        ? parent.window.innerHeight - 25
        : screen.availHeight - 75;
    }
    if(!h) h = 640;
    var opt =
        ',toolbar=no,location=no,directories=no,status=no'+
        ',menubar=no,resizable=no,scrollbars=yes'+
        ',screenX=0,screenY=0,left=5,top=5';
    return 'width='+h+',height='+v+opt;
}

/* Onload */
function setOnLoad() {
    setPopUp();
}
window.onload = setOnLoad;

2007年12月10日

お手軽な(?)ロールオーバーイメージ

【覚え書き】
どこで拝見したか忘れてしまったけど(;^_^A
自分なりのカスタマイズを加えさせて頂きました。

Ex.)
_off と _over のファイル名が付いた画像ファイルを用意。
HTMLドキュメントに下のjsファイル読み込みとimage_off.jpg(通常のイメージファイル)を配置。
その画像をロールオーバーするとimage_over.jpg(ロールオーバーのイメージファイル)に切り替わる。


【rollover.js】
//---------------------------------
//   Image Preload & Roll Over
//---------------------------------

/* Roll Over */
function setRollOver() {
    if(!document.getElementsByTagName) return false;
    var ovrImgList = document.getElementsByTagName("img");
    for(var i = 0; i < ovrImgList.length; i++) {
        if(ovrImgList[i].src.match(/_off./i)) {
            preLoadImg(ovrImgList[i].src.replace(/_off./i,"_over."));
            ovrImgList[i].onmouseover = function() {
                this.src = this.src.replace(/_off./i,"_over.");
                return false;
            }
            ovrImgList[i].onmouseout = function() {
                this.src = this.src.replace(/_over./i,"_off.");
                return false;
            }
        }
    }
    return true;
}

/* Preload */
function preLoadImg(f) {
    if(document.images) {
        var loadedImg = new Image();
        loadedImg.src = f;
    }
}

/* Onload */
function setOnLoad() {
    setRollOver();
}
window.onload = setOnLoad;

2007年10月04日

スタイルシート(+JS)で疑似フレーム化

【覚え書き】
フレームを使ったページ構成にはしたくないけど、ヘッダやメニュー部分は常に固定表示したい時などに利用できるかも?
※ Internet Explorer 6、Firefox 2、Opera 9.2 のみ動作確認。Mac版はノーチェックです(^^;)

【HTMLソース】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<title>ヘッダ固定CSSサンプル</title>
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<style type="text/css">
<!--
body {
    font-size: 12px;
    margin: 0px;
    padding: 0px;
    /* IE6対策(スクロール時の表示ブレ防止) */
    background-image : url("dummy");
    background-attachment: fixed;
}

/* ヘッダ */
div#head-container {
    color: white;
    background-color: #789;
    width: 100%;
    height: 50px; /* ヘッダ部の高さ */
    position: fixed;
    top: 0px;
    left: 0px;
    z-index: 100;
    /* IE6対策(位置固定) */
    _position: absolute;
    _top: expression(eval(document.documentElement.scrollTop+0)+'px');
}

/* ボトム */
div#bottom-container {
    color: white;
    background-color: #456;
    width: 100%;
    height: 30px; /* ボトム部の高さ */
    position: fixed;
    bottom: 0px;
    left: 0px;
    z-index: 101;
    /* IE6対策(位置固定) */
    _position: absolute;
    _top: expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-30)+'px'); /* 高さ30pxの場合 */
}

/* メインコンテンツ */
div#main-container {
    color: gray;
    background-color: #cde;
    width: 100%;
    height: 2000px; /* ダミー */
    padding-top: 50px;
}
-->
</style>
</head>

<body>
<div id="layout">
<div id="head-container">ヘッダ固定部</div>
<div id="main-container">フレームを使わずにヘッダ等の表示部分を画面固定にするサンプル。<br />(Ex:メインコンテンツの高さ2000px)</div>
<div id="bottom-container">フッタ固定部</div>
</div>
</body>
</html>

2007年05月15日

リンクをクリックしたときに出る点線の囲み枠を消してみる

【覚え書き】
リンクをクリックしたときに出る点線の囲み枠って、JavaScriptなんかでページを切り替えないで使ったりするときに、少々邪魔に感じることがある。
それなら、クリックしても出ないようにしてしまおう。
ってことで、ページが読み込まれたときに処理をしておきます。
以下のスクリプトを外部から読み込んでも、HTMLヘッダにおいても可・・・と思う(^^;)

■a_blur.js
window.onload = function(){
    var alink = document.getElementsByTagName("a");
    for (var i = 0; i < alink.length; i++) {
        alink[i].onfocus = function(){ this.blur(); }
    }
}

2007年03月16日

CSSでsup(上付き文字)を調整する

【覚え書き】

<sup>をFireFoxで表示すると、デフォルトでは離れすぎていて、どうも不恰好に見える。
なので、CSSを使って調整してみることに・・・
普通に設定すると、IEではおかしくなってしまうので、バグを利用して回避しています。

FireFox用上付き文字離れの調整
*>/**/sup { vertical-align: text-top; line-height: 4px; }
タグ:CSS SUP

2007年03月06日

Dreamweaver8で吐き出されるロールオーバーイメージをコンパクトに

【覚え書き】
Dreamweaver8は簡単にロールオーバーイメージを入れることができるが、JavaScriptを外部でなくヘッダの部分に書き込むため、ソースが長くなり見栄えがあまり良くない。
それと、BODYタグの部分にあらかじめ読み込む画像をずらずらと並べ立ててしまう。
そこで、JavaScriptの部分を外部に書き出して、ソースをコンパクトにしようと思う。


通常吐き出されるソース(例)↓
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>ドキュメント</title>
<script type="text/JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>
<body onLoad="MM_preloadImages('img/menu_bt1_over.gif','img/menu_bt2_over.gif')">
<ul>
<li><a href="#" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('menu1','','img/menu_bt1_over.gif',1)"><img src="img/menu_bt1.gif" alt="メニュー1" name="menu1" width="120" height="32" border="0"></a></li>
<li><a href="#" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('menu2','','img/menu_bt2_over.gif',1)"><img src="img/menu_bt2.gif" alt="メニュー2" name="menu2" width="120" height="32" border="0"></a></li>
</ul>
</body>
</html>


■JavaScriptを外部ファイルに・・・
onLoadでプリロードされる
<body onLoad="MM_preloadImages('img/menu_bt1_over.gif','img/menu_bt2_over.gif')">
</pre>
の onLoad="〜"の部分と
<pre>
Script<script type="text/JavaScript">
<!--

-->
</script>
の部分をカットして、新規でJSファイルとして、もしくはテキストエディタ等にペースト。

onLoad="と末尾の"は削除してから
window.onload = function() { 〜 }
で囲む。
<script type="text/JavaScript">
<!--
と、末尾の
-->
</script>
は必要ないので削除。
JSファイルを適当な名前で保存。
Ex.) swap.js
ヘッダの部分に
<script type="text/javascript" src="swap.js"></script>

で外部JavaScriptを読み込むようにする。


■変更後

*HTMLソース
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>ドキュメント</title>
<script type="text/javascript" src="swap.js"></script>
</head>
<body>
<ul>
<li><a href="#" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('menu1','','img/menu_bt1_over.gif',1)"><img src="img/menu_bt1.gif" alt="メニュー1" name="menu1" width="120" height="32" border="0"></a></li>
<li><a href="#" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('menu2','','img/menu_bt2_over.gif',1)"><img src="img/menu_bt2.gif" alt="メニュー2" name="menu2" width="120" height="32" border="0"></a></li>
</ul>
</body>
</html>


*外部JavaScriptファイル(swap.js)
// プリロードイメージ
window.onload = function() {
MM_preloadImages('img/menu_bt1_over.gif','img/menu_bt2_over.gif');
}

// MMロールオーバー
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

2007年01月26日

PHP4とPHP5を共存させる・・・

【覚え書き】
WEBアプリケーションのテスト環境として、ローカルマシンにApache+PHP4とPHP5の両方を用意しておきたいと思い、幾つかのサイトを覗いてみた。
CGIとして動作させる場合の共存方法や、別々のポート指定、その都度設定を差し替えるといったことは色々なところで取り上げられていたけど、出来れば.htaccessの指定だけで実現したい。
というわけで、試行錯誤した挙句バイナリをちょこっと書き換えるという、かなり強引なやり方だけど(汗)一応実現することができたので簡単に?書きまとめた。
OSはWindowsXP。

ローカル環境
Apache1.3.37+PHP4.4.4+PHP5.2.0

インストール
[Apache1.3.37]http://archive.apache.org/dist/httpd/binaries/win32/apache_1.3.37-win32-x86-src.msi
インストーラの指示に従って普通にセットアップ
[PHP 4.4.4 zip package]http://www.php.net/get/php-4.4.4-Win32.zip/from/a/mirror
ZIPファイルをC:\php4に解凍
[PHP 5.2.0 zip package]http://www.php.net/get/php-5.2.0-Win32.zip/from/a/mirror
ZIPファイルをC:\php5に解凍

php4のphp.ini-distをC:WINDOWSへコピーしてphp.iniにリネーム。php.iniの内容を自分の環境に合わせる。
php5のphp.ini-distを同じ場所に複製してphp.iniにリネーム。こちらもphp.iniの内容を自分の環境に合わせる。
extension関係あたり?

Apacheの環境設定、C:\Program Files\Apache Group\Apache\conf\httpd.confを編集。以下、行の最後にでも追加する。
----------------------------------------------------------
# PHP 5
LoadModule php5_module "C:\php5\php5apache.dll"
AddModule mod_php5.c
PHPIniDir "C:\php5"

# PHP 4
LoadModule php4_module "C:\php4\sapi\php4apache.dll"
AddModule mod_php4.c

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
----------------------------------------------------------
(PHPIniDirでphp.iniを任意の場所から呼び出せるけど、PHP4ではエラーとなってしまった)

C:\php5\php5apache.dllをバックアップのため複製しておく。
バイナリエディタでphp5apache.dllを開いて、以下の文字列を検索。
application/x-httpd-php-source
application/x-httpd-php
これを、
application/x-httpd-ph5-source
application/x-httpd-ph5
(php→ph5)に変更する。
※php5.2.0(php5apache.dll)の場合のアドレスは
0x00004312 70 → 35
0x00004332 70 → 35
(x-httpd-php5などにするとアドレスがずれるのでNG)

システムのプロパティ→詳細設定→環境変数のPathに以下を追加。
C:\php4;C:\php4\sapi;C:\php5;

Apacheを再起動して準備完了!

これで、デフォルトではPHP4として動作。
.htaccessで
AddType application/x-httpd-ph5 .php
AddType application/x-httpd-ph5-source .phps
と設定するとそのディレクトリ以下はPHP5で動作。


バイナリエディタでMIME Typeを変更して強引に共存させたけど、テスト環境が必要な場合には、まあ、それなりに有効・・・かも?
Apache1.3.37で試しただけなので、Apache2や2.2系でも出来るかどうかは不明・・・

2007年01月23日

window.openとtargetで新しいウインドウを開く

【覚え書き】
window.openで新しくウインドウを開くとき、<A>タグにtargetを指定する。

<a xhref="POPUP_URL" onClick="window.open('POPUP_URL','WINDOW_NAME',width=400,height=600,resizable=yes,scrollbars=yes')" target="WINDOW_NAME">Click!</a>

POPUP_URL = 新しく開くウインドウのURL
WINDOW_NAME = 新しく開くウインドウ名

window.openのウインドウ名とtargetのウインドウ名を同じにしておくと、ちゃんとwindow.openで指定された通りに新しいウインドウを開くことができる。
JavaScriptがOFFの時もtarget指定があるから一応新しいウインドウは開かれるし、SEO対策にもなるかも!?
タグ:SEO

2007年01月18日

日本語のページのみはMETAタグが原因?

管理しているサイトの一つがキーワード検索で引っかからなくなってしまったことがある。
しかし、Googleの日本語のページを検索やyahoo!の日本語のページのみを選択して検索してみると、きちんと検索結果に表示されてくれる。
スパム扱いされてしまったのか?とか不自然な記述があるのか?と思い、いろいろ試してみたけど、結果は変わらずほとんど関係してなかった。
そこで、日本語のページというところに意味があるのではないかと思い、METAタグの部分を見直してみた。

<meta http-equiv="content-language" content="ja" />

どうやらこのMETAタグがビンゴのようで、これを取っ払うとウェブ全体でも表示されるようになった。
ただ、比較的アクセス数が多いかページランクを確保しているところは、このMETAタグがあってもまったく問題ないみたいだ。
この扱いの違いは、人気の無いサイトの悲しい性だねもうやだ〜(悲しい顔)
XOOPSなどのように、METAタグが標準で用意されているようなシステムを使ってる人は、検索結果に表示されないようなら、一度その辺を疑ってみてはいかが?
タグ:METAタグ

2006年11月29日

【覚え書き】32ビットPNGの透過画像を使う(つづき)

【覚え書き】
先日の書き方ではIE7の場合、透過PNG対応になったのと、属性セレクタをきちんと解釈するようになったため、
そのままではバックグラウンドとIE用フィルタの両方を重ねて表示してしまうことになる。
そこで対処について調べてみると、IE7に対応させる場合には下記のようにすれば一応は出来るみたいだ。

■CSS
#click { height: 100px; width: 100px; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=click.png,sizingMethod=image); }
*>/**/#click[class~=png] { background: url(click.png) no-repeat; }

*>/**/ と記述することによって、IE7ではこの部分を無視するらしいのでフィルタ処理のみ行う。

2006年11月28日

【覚え書き】32ビットPNGの透過画像を使う

【覚え書き】
IE6ではPNGフォーマットの透過画像が使えないので、
スタイルシートを使ってIE独自のフィルタ機能で表示させる。
確認対象:InternetExplorer 6, FireFox 2, Opera 9
※IE7については、現在インストールしていないので未確認。

■CSS
#click { height: 100px; width: 100px; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=click.png,sizingMethod=image); }
#click[class~=png] { background: url(click.png) no-repeat; }

※IE6は#click[class~=png]というオプション表記を無視するので、その他のブラウザ用に背景イメージとして用意。


■HTML
<div id="click" class="png">&nbsp;</div>
タグ:透過画像

2006年11月27日

【覚え書き】CSSを初期設定

【覚え書き】
デフォルトではH1〜6,PやUL,DL,FORMなどは天地左右に余白があるので、
スタイルシート(CSS)でマージンや位置、サイズなどを初期設定する。

body { margin: 0px; padding: 0px; }
body, th, td { font-size: 12px; line-height: 125%; }
td, th { text-align: left; vertical-align: top; }
h1, h2, h3, h4, h5, h6, p, dl, dd, form { margin: 0px; }
ul, ol { margin: 0px; padding: 0px; list-style: none; }
img { border: 0px; }

2006年11月24日

【覚え書き】CSSでロールオーバーメニュー

【覚え書き】
スタイルシートを使って画像をマウスを乗せたときにロールオーバーさせる。
*テキストをマイナスインデント(Ex: text-indent:-9999px;)しない
*ALTの代わりにTITLEを使ってポップアップ

Ex)
■HTML
<ul id="menu">
<li id="home" title="HOME"><a xhref="http://blog.seesaa.jp/pages/my/blog/article/regist/input#" mce_href="http://blog.seesaa.jp/pages/my/blog/article/regist/input#" ><strong>HOME</strong></a></li>
<li id="contact" title="CONTACT"><a xhref="http://blog.seesaa.jp/pages/my/blog/article/regist/input#" mce_href="http://blog.seesaa.jp/pages/my/blog/article/regist/input#" ><strong>CONTACT</strong></a></li>
<li id="link" title="LINK"><a xhref="http://blog.seesaa.jp/pages/my/blog/article/regist/input#" mce_href="http://blog.seesaa.jp/pages/my/blog/article/regist/input#" ><strong>LINK</strong></a></li>
</ul>

■CSS
ul#menu { margin: 0px; padding: 0px; list-style: none; }
ul#menu li a { display: block; text-decoration: none; width: [幅]; height: [高さ]; }
ul#menu li a strong { visibility: hidden; }

/* id=home Image */
ul#menu li#home a { background:url([通常の画像1]) no-repeat; }
ul#menu li#home a:hover { background:url([切り替わる画像1]) no-repeat; }
/* id=contact Image */
ul#menu li#contact a { background:url([通常の画像2]) no-repeat; }
ul#menu li#contact a:hover { background:url([切り替わる画像2]) no-repeat; }
/* id=home Image */
ul#menu li#link a { background:url([通常の画像3]) no-repeat; }
ul#menu li#link a:hover { background:url([切り替わる画像2]) no-repeat; }

2006年11月23日

【覚え書き】JavaScript&CSSでロールオーバー

【覚え書き】
DIVで囲われた範囲に対し、ロールオーバーとリンクにする。

マウスオーバー
onmouseover="this.style.background='#ffc'; this.style.cursor='pointer'"
元に戻す
onmouseout="this.style.background='#fff'"
リンク先
onclick="location.href='(URL)'"

Ex)
<div style="background:#fff" onmouseover="this.style.background='#ffc'; this.style.cursor='pointer'" onmouseout="this.style.background='#fff'" onclick="location.href='#'">サンプル</div>