検索
カレンダー
2006年10月
    11月 »
1234567
891011121314
15161718192021
22232425262728
293031  
ブログメニュー
Amazon検索
キーワード:

配列を数値としてソート

2006年10月27日

配列の内容を文字列ではなく数値としてソートするには以下のようにします。

array.sort(comparator);

function comparator(value1, value2) {
    var index1 = parseInt(value1);
    var index2 = parseInt(value2);
    return index1 – index2;
}

比較関数(上記の場合はcompareator関数)を入れ替えることにより、色々な順序や方法でソートすることができます。

.htaccessだけでSSL対応するには

2006年10月22日

SSLを考えずに作られているページを、.htaccessだけの変更でSSL対応する方法をご紹介します。
もちろん、サーバがSSLに対応している必要はありますが…。
さらに.htaccessとmod_rewriteが入っている必要もあります。

SSLページにしたいHTMLファイル(PHP等でも可)のあるディレクトリに.htaccessファイルを作成し、下の文を追加します。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

ファイルを個別に指定したい場合はちょっと面倒ですが下記のようにします。
ここでは例としてfoo.htmlとbar.htmlをSSLページとし、それ以外はSSLでないページとします。

RewriteEngine on

RewriteCond %{REQUEST_URI} .*/foo.html$ [OR]
RewriteCond %{REQUEST_URI} .*/bar.html$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_URI} !(.*/foo.html$)
RewriteCond %{REQUEST_URI} !(.*/bar.html$)
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]

(2007/10/31追記)
RewriteEngine on の記述が抜けていたので追記しました。指摘してくださったタルさん、ありがとうございました。

PEARが使えない環境でPEARを使う

2006年10月20日

レンタルサーバ等でPEARがインストールされておらず、またルート権限が使えないために新たにインストールできないときは、インクルードパスに自分が管理できるディレクトリをset_include_path関数で追加します。
やり方は以下のとおり。

1.プログラム内で自分の管理するディレクトリをインクルードパスに追加する
(例:set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . “/lib”);)
2.PEARのページ(http://pear.php.net/)から必要なパッケージをダウンロードする
(依存関係があるパッケージも全てダウンロードする)
3.1で追加したパスにダウンロードしたPEARパッケージのファイルをアップロードする

これでOKです。

ダウンロードするファイルのファイル名を指定する

2006年10月18日

プログラムによって作成したCSVデータなどをダウンロードさせたい場合、デフォルトのファイル名は呼び出されたURLのファイル名になり、xxx.php等になってしまいます。
これを指定したファイル名にしたい場合はHTTPレスポンスのヘッダに、”Content-Disposition”を指定します。
例えばPHPでしたら以下のようになります。

header(“Content-Disposition: attachment; filename=\”fname.ext\”;”);

参考;
Studiying HTTP

PHP5上でPHP4用のスクリプトを動かすためには

2006年10月18日

PHPの最新メジャーバージョンが5になってから結構経ちますが、まだPHP4が多く使われているように思います。
PHP5とPHP4では完全な互換がないことはよく知られていますが、PHP5をPHP4互換モードとして動かすことができるのはご存知でしょうか。
この設定はphp.iniだけでなく.htaccessで指定できるので、環境を混在させるときに便利です。
.htaccessで設定するときは以下のように記述します。

php_flag zend.ze1_compatibility_mode On

これを設定すると、『Zend Engine 1 (PHP 4) との互換モードを有効にします。 この設定は、オブジェクトのコピー、キャスト (プロパティを 保持しないオブジェクトが FALSE あるいは 0 のいずれになるか)、 そして 比較 に影響を与えます。このモードの場合、オブジェクトを渡す際の デフォルトの方法は、参照渡しではなく値渡しとなります。』だそうです。

参考:
コア php.ini ディレクティブに関する説明

自動エスケープの抑制

2006年10月17日

PHPはデフォルトでは、リクエストの入力にクォーテーション(‘)、ダブルクォーテーション(“)、バックスラッシュ(\)がある場合に、自動的に前にバックスラッシュ(\)が付加されます。
これはセキュリティ上あったほうがいいのですが、自分でサニタイジングしたい場合に結構邪魔だったりします。
そんなときは.htaccessに

php_flag magic_quotes_gpc Off

と記述すると自動エスケープを抑制することができます。

参考:
PHP オプションと情報(info)

Apache+PHP環境における文字コードの自動変換

2006年10月17日

携帯用サイトを作るときなど、表示用の文字コードと内部の文字コードを別にしたい場合があります。このような時、下記のような設定を.htaccessに記述するとPHPが自動的に変換してくれます。

php_flag output_buffering On
php_value output_handler mb_output_handler
php_value default_charset UTF-8
php_value mbstring.language Japanese
php_flag mbstring.encoding_translation On
php_value mbstring.http_input auto
php_value mbstring.http_output UTF-8
php_value mbstring.internal_encoding UTF-8
php_value mbstring.substitute_character none

ここでの各項目の意味は次のようなものになるようです。文字コードを指定する箇所は”UTF8″、”EUC-JP”、”SJIS”等を記述します。ただし、default_charseにシフトJISを設定する場合は”Shift_JIS”にしたほうがいいかも。

output_buffering 出力バッファリングの有無
output_handler スクリプトの全ての出力を関数にリダイレクトすることがでる
ここにmb_output_handlerを設定すると自動変換してくれる
default_charset HTTPのContent-typeヘッダで出力する文字コード
mbstring.language mbstringで使用される言語のデフォルト値
mbstring.encoding_translation HTTP入力文字エンコーディング検出および内部文字エンコーディングへの変換を行うか
mbstring.http_input HTTP入力文字エンコーディングのデフォルト値
mbstring.http_output HTTP出力文字エンコーディングのデフォルト値
mbstring.internal_encoding 内部文字エンコーディングのデフォルト値
mbstring.substitute_character 無効な文字を代替する文字

参考:
マルチバイト文字列関数(mbstring)
コア php.ini ディレクティブに関する説明

無料のオフィスビューワ

2006年10月13日

最近はオフィスソフトもOpenOfficeのように無料で使えるようになりうれしい限りです。
ですが、やはりMS社製のOfficeを使っている方もたくさんおられることは事実ですし、OpenOfficeも完全にMS社製のものと互換性があるとは言い切れません。
そこで私は、ドキュメントの編集はOpenOfficeで行い、MS社製オフィスのデータへ変換したときはMS社製のビューワで表示を確認しています。
ビューワは編集こそできませんが、オフィスと同じように表示ができ、無料で使用することができます。
ダウンロードは以下のページから行えます(ライセンスをご確認下さい)。
Word Viewer 2003
http://www.microsoft.com/downloads/details.aspx?FamilyID=95e24c87-8732-48d5-8689-ab826e7b8fdf&displaylang=JA
Excel Viewer 2003
http://www.microsoft.com/downloads/details.aspx?FamilyID=c8378bf4-996c-4569-b547-75edbd03aaf0&displaylang=JA
PowerPoint Viewer 2003
http://www.microsoft.com/downloads/details.aspx?familyid=428D5727-43AB-4F24-90B7-A94784AF71A4&displaylang=ja
Visio Viewer 2003
http://www.microsoft.com/downloads/details.aspx?FamilyID=3FB3BD5C-FED1-46CF-BD53-DA23635AB2DF&displaylang=ja

!DOCTYPE宣言とIEの!DOCTYPEスイッチ

2006年10月11日

IE6には標準準拠モードと後方互換モードの2種類のモードがあり、何もしないと後方互換モードになっています。この後方互換モードが標準に準拠して いないため、標準に準拠しているFirefox等と表示が違ってしまう原因になっています。 IE6で標準準拠モードにするには、HTMLにDOCTYPEを宣言する必要があります。

DOCTYPE宣言の構文とIEのモードをまとめました。

バージョン !DOCTYPE宣言 IEのモード
宣言なし 後方互換
HTML 4.01 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”> 標準準拠
HTML 4.01 Strict <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”> 標準準拠
HTML 4.01 Transitional <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”> 後方互換
HTML 4.01 Transitional <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”> 標準準拠
HTML 4.01 Frameset <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Frameset//EN”> 後方互換
HTML 4.01 Frameset <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Frameset//EN” “http://www.w3.org/TR/html4/frameset.dtd”> 標準準拠
XHTML 1.0 Strict <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”> 標準準拠
XHTML 1.0 Transitional <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> 標準準拠
XHTML 1.0 Frameset <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd”> 標準準拠
Compact HTML 1.0 <!DOCTYPE HTML PUBLIC “-//W3C//DTD Compact HTML 1.0 Draft//EN”>

HTTPリクエストのメソッドの取得

2006年10月10日

PHPでHTTPリクエストのメソッドが何であるかを判定するためには、
$_SERVER["REQUEST_METHOD"]
に格納されている文字列を使用します。

(例)
if ($_SERVER["REQUEST_METHOD"] == “GET”) {
  // コンテンツの表示処理
} elseif ($_SERVER["REQUEST_METHOD"] == “POST”) {
  // コンテンツの更新処理
}

このようなメソッドの判定は、REST スタイルでプログラムする際に必要になります。