2009/06/09

AjaXplorerを使ってみる

webを管理する時に面倒なのがファイル管理。
アップロードとダウンロード、そしてユーザIDとパスワード。
ftpツールを使えば良いが、それすら面倒。

それならファイル管理プログラムを探そうってことで
PHP4も5にも対応でAjaxな美しいインターフェイス。

AjaXplorer

ダウンロードソースはこちら=>

オンラインストレージサービスのような感じのものを自前のサーバで構築するためのWebアプリケーションといったところでしょうか。

1.AjaXplorer のアーカイブをダウンロードして展開。
2./var/www/html/axとしてコピー。
3.chownでaxのフォルダの所有者を(サブフォルダも含めて)apacheに。
とりあえず、上記3点を行えば使えるようになります。

外部サーバと組み合わせて使用したりする場合、server/conf/conf.phpファイルを編集する必要がありそうですが、単体で使用する場合はデフォルトのままでもOKのようです。

なお、.htaccessでアクセス制限を行っているため、Apacheの設定でAllowOverride noneなんてしていると、予期せぬファイルが閲覧されたりするので注意が必要。

ちなみに、日本語化に関して。
フォルダ構成は変更されていますが、

http://www.chrysaor.org/wiki/index.php?Ajaxplorer

にまとめられている内容+αで対応できました。

1.client/i18n フォルダ内にja.phpを作成。なお、ファイルのエンコードをutf8で作成しておくと、server/classes /class.ConfService.php ファイルの編集が不要になります(mb_convert_variablesの処理が不要になる)。

2.server/conf/conf.php の $available_languages に、"ja"=>"Japanese" を追加。これで、設定画面で「Japanese」を選択できるようになります。

3.client/html/fancy_tpl.html、client/html/admin.html の2つのhtmlファイルのcharset=iso-8859-1charset=utf-8に。

4.以下のファイルから、utf8_decode,utf8_encodeを除去する。
 ・content.php
 ・index.php
 ・server/classes/class.AJXP_XMLWriter.php
 ・server/classes/class.HTMLWriter.php
 ・server/classes/class.UserSelection.php
 ・server/classes/class.AJXP_ClientDriver.php
 ・server/classes/class.AbstractDriver.php
 ・plugins/ajxp.fs/class.fsDriver.php

なお、AJXP_ClientDriver.phpにおいては、$mess = array_map("utf8_encode", $mess);という部分の除去(コメント化)も必要となるので注意。

ちなみに、アップロード可能なファイルサイズは、/etc/php.ini内のupload_max_filesizeおよびpost_max_sizeの値に準拠します(デフォルトでは2MB)。

2009/05/11

半透明CSS

CSS設定でオブジェクトを半透明にできるプロパティがあります。
IEのみのCSSプロパティでしたが、Firefox・Operaでも同じように表示可能にできる方法を説明したサイトがありましたので紹介しておきます。
他にもいくつかのOpacityプロパティを使ったTipsが紹介されていますので、参考に覗いてみてください。

http://www.mandarindesign.com/opacity.html

CSS Opacity設定

以下のコードでIE・Firefox・Opera・Netscape・Safariで同等表示がえられます。

  filter: alpha(opacity=25);
-moz-opacity:0.25;
opacity
:0.25;
IE
alpha(opacity=透明度);
100が100%となる。25%の場合は、25
Firefox・Netscape
-moz-opacity:.透明度;
1.0が100%となる。25%の場合は、.25
Opera・Safari
opacity:透明度;
1.0が100%となる。25%の場合は、.25

CSS3.0からは、opacity:透明度;の設定ですべてのブラウザで表示可能となるようです。

半透明のグラデーションをかける-タグインデックス
http://www.tagindex.com/stylesheet/filter/alpha.html

2009/02/07

phpのデバッグ

echoとprint
これは基本。
echo や print は関数ではなく構文なのでカッコが不要です。

echo $something."";
print $something."";

などと省略して書けます。

echo と print は(ほぼ)同じものですが、
echo の方が文字数が少ないのでオススメです。

print_r

引数の型に関係なく変数の中身を表示できます。
配列や連想配列、オブジェクトなどもOK!

print_rは、PHPのバージョン4.3.0以降、第二引数が追加されました。

//$somethingのprint_r表示を$outputに入れる
$output = print_r($something,true);

とするとprint_rの出力結果を変数に入れることができます。
(便利です!)

print_rはブラウザで表示させるときは見づらいので、

echo "改行";
print_r($something);
echo "改行"

などとしてあげるとブラウザで改行がそのまま表示されます。
これも関数にしておくと便利かもしれません。

/*
preタグで囲んだprint_r出力
@param mixed $var 出力したい変数
@return void
*/

function pre_print_r($var){
echo "改行";
print_r($var);
echo "改行";
}
スタイルシートなどで見やすくすると良いと思います。
var_dump
print_rの詳細版です。構造と値だけではなく、型やサイズもあわせて表示します。
オブジェクトの場合、クラス名までわかるので便利です。
厳密にチェックしたい時などに。

例えば
$profile = array(
"company" => "FACTORY",
"name" => "ジェイさん",
"birth_month" => 3,
"birth_day" => 1,
"hobby" => array("dance","プログラム","音楽")
);
var_dump($profile);

とすると

array(5) {
["company"]=>string(7) "FACTORY"
["name"]=>string(10) "ジェイさん"
["birth_month"]=>int(3)
["birth_day"]=>int(1)
["hobby"]=>array(3) {
[0]=>string(5) "dance"
[1]=>string(10) "プログラム"
[2]=>string(4) "音楽"
 }
}

と出力されます。

DBに接続して検索表示の基本

require( )とinclude( )との違い。
include("http://www.yahoo.co.jp/index.html");
require("http://www.yahoo.co.jp/index.html");

・違いは?
☆ include - 読み込めなくてもスルー
☆ require - 読み込めないと中止

require( )が処理中に1回だけ読み込まれるので、
ループの中で読み込むファイル名を変える時などは
include( )で処理します。

require( )やinclude( )はローカルにあるファイルだけでなく、
リモートにあるファイルもURLを使って読み込む事が出来ます。


require_once'DB.php';
$username = "dbuser";//DBユーザー名
$password = "dbpass";//パスワード
$host = "dbhost";//DBのホストlocalhost
$database = "dbname";//利用するDB名
$db = DB::connect("mysql://$username:$password@$host/$database");//接続
//できなかった場合
if (DB::isError( $db )) {
die($db->getMessage());
}
//DBにリクエストを要求する
$sql = "select * from table";
$result = $db->query($sql);

if (DB::isError( $result )) {
die($result->getMessage());
}

while($row = $result->fetchRow()){
echo $row[0]; // 返却データをループ
}
?>

2009/01/18

Ajaxzip2

べんりなajaxzip2。
郵便番号を入力すると、該当する都道府県名・住所が自動的に入力されます。
AjaxとJSONフォーマットを利用するJavaScriptライブラリとして公開されているものを利用。
JavaScript のみで稼動するため、サーバサイドで稼動するCGIプログラムは不要です。
郵便番号→住所変換処理は全てクライアントサイドのJavaScriptで行います。
既存 HTML の住所入力フォームをたった3行書き換えるだけで利用できます。

住所入力フォームHTMLを書き換える場合は、変更箇所は3行のみです。
まず、 ヘッダー中に以下の2行を追加してください。
script src="ajaxzip2/ajaxzip2.js" charset="UTF-8"

ページ内で既に prototype.js または jquery.js のいずれかを利用している場合、追加するのは ajaxzip2.js の1行のみでOKです。
なお、ajaxzip2.js の文字コードは UTF-8 ですが、呼び出し元のフォームのある HTML ファイルの文字コードは Shift_JIS でも EUC-JP でも構いません。

次に、住所入力フォームの7桁郵便番号入力欄に onKeyUp イベントハンドラを登録します。

input name="zip" type="text"

input name="zip" onkeyup="AjaxZip2.zip2addr(this,'pref','addr',null,'addr');" type="text"

第2引数 'pref' には、都道府県名選択のプルダウン(またはテキスト入力欄も可)のフォーム変数名を指定します。
同様に、第3引数 'addr' に市区町村名以下の住所入力欄のフォーム変数名を指定します。
ご利用のフォームに合わせて、変更しておいてください。

Terminal パスワード

たまに人のコンピュータを頼まれて弄る機会があるが、
自分的には人にはさわらせたくないですね。

ブラウザなどの自動入力の情報はキーチェーンに保存されており
当然ながら呼び出せます。アカウント、パスワードなど。

security dump-keychain -d ~/Library/Keychains/login.keychain

こんな感じで。

ちなみにセキュリティのマニュアルは
man security

文字コード設定いろいろ

.htaccess ファイルで、PHP の "mbstring"関数を設定する例。

# UTF-8 で作成・保存して UTF-8 で表示させる場合

php_flag output_buffering Off
php_value output_handler none
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


# UTF-8 で作成・保存して Shift_JIS で表示させる場合

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

# EUC-JP で作成・保存して EUC-JP で表示させる場合

php_flag output_buffering Off
php_value output_handler none
php_value default_charset EUC-JP
php_value mbstring.language japanese
php_flag mbstring.encoding_translation On
php_value mbstring.http_input auto
php_value mbstring.http_output EUC-JP
php_value mbstring.internal_encoding EUC-JP
php_value mbstring.substitute_character none

# EUC-JP で作成・保存して Shift_JIS で表示させる場合

php_flag output_buffering On
php_value output_handler mb_output_handler
php_value default_charset Shift_JIS
php_value mbstring.language japanese
php_flag mbstring.encoding_translation On
php_value mbstring.http_input auto
php_value mbstring.http_output SJIS
php_value mbstring.internal_encoding EUC-JP
php_value mbstring.substitute_character none