‘Web’ カテゴリーのアーカイブ

PHP 日本語 文字化け

2008年12月30日 火曜日

移植完了!

最後の課題として、メール送信時&PDF出力時の文字化けに取り組んでおりましたが、これは比較的簡単にできました。

Web系システムにおける「日本語文字化け」の問題は、以前は、結構面倒だったのですが… 最近は、Unicodeが主流になり、多くの環境で標準になってきているので、割と簡単です。

PHP5 (4.06以上) であれば、一連の mb_~ 関数を使います。

mb_convert_encoding ( 文字列, 変換後文字コード, 変換前文字コード)

今回のシステムでは、文字コードはSJISで統一されていましたが、メール出力時(JIS)と、PDF出力時(UTF-8)だけは、文字コードを変換する必要があったので、この関数を使いました。

$message = mb_convert_encoding ( $message, “JIS”, “SJIS”);
$message = mb_convert_encoding ( $message, “UTF-8″, “SJIS”);

Smarty テンプレート が コンパイル (更新) されない

2008年12月29日 月曜日

今回の依頼案件で、一番はまったのがこれ… Smartyのテンプレートファイルを作成して、そのテンプレートを使用したページを作成しても、コンパイルされず… コンパイルフォルダに更新されたファイルが生成されない。

普通に…

$smarty = new Smarty();

$smarty->template_dir = '~';
$smarty->compile_dir = '~';
$smarty->cache_dir = '~';
$smarty->config_dir = '~';

$smarty->display('~.tpl');

のように使用するぶんには、なんら問題なくテンプレートがコンパイルされ、意図したとおりにページが表示されるのですが、今回、移植しようとしているシステムは、テンプレートがコンパイルされず、ページが表示されません。

このシステムは、Pear::Auth による認証を使っているため、認証されない場合は、毎度「ログインページ」が表示されるので、各 PHP スクリプトは、$smarty->display(‘~.tpl’); まで、たどり着かない。また、tplファイルに別のtplファイルがインクルードされていることも、意図したようにテンプレートファイルがコンパイルされない原因になっている様子です。

そこで、検討した結果、次のように強引に?コンパイルファイルを生成すれば良いことが分かりました。

テンプレートファイル→コンパイル後テンプレートファイルを生成するには、とにかく一度テンプレートファイルを呼べば良いようです。

具体的には… test.tpl というテンプレートファイルをコンパイルしたい場合、test.tplには、さまざまな変数が埋め込んであり、実際には、

$smarty = new Smarty();
$smarty->assign('val1', '~');
$smarty->assign('val2', '~');
$smarty->assign('val3', '~');

$smarty->display('test.tpl');

のように使われるとしても…
とにかく、

$smarty = new Smarty();
$smarty->display('test.tpl');

のようにして、コンパイルしたい.tpl ファイルを参照した PHP ファイルを作成して、コンパイルされたファイルを生成してしまえばOK!

特に… ページのヘッダおよびフッタを別の .tpl ファイルにして、メインの .tplファイルに include している場合、メインの .tpl ファイルはコンパイルされるが、include している .tpl がコンパイルされない!というような症状に出会った場合に、そのヘッダおよびフッタのテンプレートファイルを「単独」で呼ぶことによって、コンパイルされたテンプレートファイルが生成され、期待通りにヘッダ&フッタを表示させることが出来ました。

PDFlib インストール

2008年12月29日 月曜日

WEBプログラムのサーバー移設作業…  このシステムは、集計結果を帳票して印刷する処理に、PDFlib というパッケージを使っている事が判明。

PDFlib 日本語公式サイト

インストールは、簡単でファイル1つ(libpdf_php.so)をPHPの extension_dir にコピーして、それをロードするように、php.ini なりで設定するだけです。

extension_dir は、phpinfo() で確認できます。

php.ini (パターン1)

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
;
; If you wish to have an extension loaded automatically, use the following
; syntax:
;
; extension=modulename.extension
;
; For example, on Windows:
;
; extension=msql.dll
;
; … or under UNIX:
;
; extension=msql.so
;
; Note that it should be the name of the module only; no directory information
; needs to go here. Specify the location of the extension with the
; extension_dir directive above.
extension=libpdf_php.so

php.ini (パターン2)

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
;
; If you wish to have an extension loaded automatically, use the following
; syntax:
;
; extension=modulename.extension
;
; For example:
;
; extension=msql.so
;
; Note that it should be the name of the module only; no directory information
; needs to go here. Specify the location of the extension with the
; extension_dir directive above.

;;;;
; Note: packaged extension modules are now loaded via the .ini files
; found in the directory /etc/php.d; these are loaded by default.
;;;;

この場合は、上のコメントのとおり… /etc/php.d の下に、他のモジュールに習ってファイルを置けば良い。

MySQL データバックアップ

2008年12月26日 金曜日

MySQLデータベースを他のサーバーへ移動する.
※別のサーバーにある1つのデータベース(&全テーブル)を別サーバーへ移動(追加)する。

データベースのバックアップ
:mysqldump データベース名 > 出力ファイル名
出力されたファイルを移動先サーバーへ転送

データベースの復元
:mysql データベース名 < 入力ファイル名

PHP Smarty

2008年12月24日 水曜日

私の仕事の大部分は、他の人が作ったプログラムを解析&改良することで… 特に、自分が知らない技術を使ったプログラムを読み解いていくことを得意としております。

基本的には、分野は何でも良くて… 知らないことを知りたいという探究心が人一倍強いように思います。

他のサーバーで稼動しているPHPで書かれたシステムを別のサーバーへ移設しようとしているのですが、この類の作業(Web系システムの移設)は、環境(Apache,PHP,MySQL等のバージョン、インストールされているモジュール類など)が異なると動作しないので、いつもとても大変です。

今回のシステムは、ドキュメントがなく、ソースから順番に読み解いてます。

PHPは、開発ツールが豊富!それらを組み合わせることによってシステム構築が容易になるので、それぞれが得意なライブラリを使うようなのですが… 私は、何か新しいシステムに着手する度に、毎度、新しいことを覚えて(させられて?)いるように思います。

今回は、これ 「Smarty」 が研究課題となりそうです。

ここの説明が判りやすそう…
http://www.phpbook.jp/smarty/

PHP PEAR

2008年12月24日 水曜日

PEAR(PHP Extension and Application Repository)はPHPで利用する事ができるライブラリ(パッケージ)を提供しているサービス。

無償のPHPプログラムをダウンロードしてくると、インストール要件としてMySQL, PEAR/DBが必要というケースがよくあります。

PEARがインストールされているかどうか?

> pear

使用方法が表示されればインストールされています。

どんなモジュールがインストールされているか?

> pear list

新しいモジュールをインストールするには?

> pear install モジュール名

外注さんに構築してもらったWEB系システムを別のサーバーに移設しようとしたら、PEAR::Authモジュールを要求されたのですが…

> pear install Auth

とするだけで、自動時に http://pear.php.net/ からモジュールをダウンロードしてインストールしてくれました。 このモジュールを追加する方法(pear install)を、今まで知りませんでした… 超簡単!

MEMO:

SMX-BTSに必要な追加モジュール
- Auth
- HTML_QuickForm
- Log
- Config
- Pager
- HTTP_Download

オンライン決済 – share-it!

2008年12月18日 木曜日

最近、海外のソフトウェアをオンラインで購入する際、本サービスに良く出会います。 自前でオンライン決済のシステムを持つのには、とてもコストがかかるので、この類のサービスはありがたいです。

本サービス(share-it!)の特徴は、単なる決済代行だけでなく、アフェリエイトと連動していること… 商品の「購入」ボタンをホームページにリンクして頂き、そのボタンから注文があった場合に、サイト運営者へ礼金を支払うシステム。

「日本語」でサービスされていないのが、ちょっと残念です>share-it!

Turbolinux Appliance Server

2008年12月4日 木曜日

当社は、Web/Mail サーバーを自前で持っております。

レンタルサーバーの場合、あれこれ新しい技術をテストするのに、融通が利かない事がある… という事が理由なのですが、基本的には、サーバーのメンテナンスにコストはかけたくない。

メールアカウントの設定やら、メーリングリストの構築やら、DNSの設定やら… その類のメンテナンスがとても簡単!という理由で、長い間 Cobalt製品 (Qube, Raq)を愛用しておりました。

Cobalt社は、Sun社へ吸収されて無くなってしまったのは、とても残念です。

その流れで… 今は、DELLのサーバー機に 表題の 「Turbolinux Appliance Server」 をインストールして運用しております。 基本的には、Cobalt Raq と同じ(ブラウザを立ち上げてサーバーにアクセスして管理画面から全ての設定を行う)なので、運用はとても簡単です。

ですが…

基本的には、自動でインストールされるソフトをそのまま使うことを前提としており、プリインストールされているソフトのバージョンをあげたり、手動でソフトをインストールしたりすると、管理画面が立ち上がらなくなったりして… 大変なことになることも少なくなく、あれこれやりたい!という用途には向かない。

TurboLinux用に作成されたパッケージは、簡単にインストールできるようになっているのですが… Turbolinuxは、準国産だけに、情報および配布パッケージが少ない。 やっぱ、RedHatだよなぁ… と思います。

CollabNet Subversion

2008年12月1日 月曜日

ダウンロードサイト
http://www.collab.net/downloads/subversion/

CollabNet Subversion Server and Client v1.5.4 (for Windows)
説明ファイル

インストール後の動作チェック!

svnserve 編

1.コマンドプロンプト(cmd.exe)を起動

2.リポジトリを作成
> cd <Repository_Path>
> svnadmin create <Repository_Name>

3.環境設定ファイル (svnserv.conf) を編集
作成したリポジトリ<Repository_Name>/conf ディレクトリにあります。

### The password-db option controls the location of the password
### database file. Unless you specify a path starting with a /,
### the file’s location is relative to the conf directory.
### Uncomment the line below to use the default password file.
password-db = passwd ← コメント(#)を外す!

4.パスワードファイル (passwd) を編集
svnserv.conf と同じ場所にあります。

[users]
#harry = harryssecret
#sally = sallyssecret
username = password ← ユーザー名とパスワードを追加!

5.Windowsファイヤーウォールにて、ポートを開く

ポート番号:3690

6.svnserveを起動

管理ツール>サービス>Subversion Server >開始

7.アクセス権の設定 (svnserv.conf)
svnserv.conf

[general]
anon-access = write
anon-access = none

8.リポジトリをチェックアウト

> svn co svn://localhost/<Repository_Name>

Apache 編

1.Apacheの設定 (httpd.conf)
CollabNet Subversionのセットアップによって、Apacheバイナリがインストールされる。
C:Program FilesCollabNet Subversion Serverhttpdconfhttpd.conf

セットアップによって、以下の設定が自動的に作成されます。
<Location /svn>
DAV svn
SVNParentPath C:repositories
</Location>

さらに、BASIC認証を使うために、以下のように追加します。
<Location /svn>
DAV svn
SVNParentPath C:repositories
SVNListParentPath On
Require valid-user
AuthType Basic
AuthName “Subversion repository”
AuthUserFile C:repositoriespassword-file
</Location>

2.コマンドプロンプト(cmd.exe)を起動

3.利用者の作成 (htpasswd)
htpasswd.exe は、C:Program FilesCollabNet Subversion Serverhttpdbin にあります。

> htpasswd -cm <password-file> <username>

<password-file>は、httpd.conf に設定した AuthUserFile とあわせます。

新規…
> htpasswd -cm C:repositoriespassword-file user_1

追加…
> htpasswd -m C:repositoriespassword-file user_2

4.リポジトリを作成
> cd <Repository_Path>
> svnadmin create <Repository_Name>
※svnserveの場合と同じなので、既に作成済みであれば不要。

5.ポートを開く

ポート番号:80

6.Apacheを起動

管理ツール>サービス>Apache2.2 >開始

7.リポジトリをチェックアウト

> svn co http://localhost/svn/<Repository_Name>

8.リポジトリの閲覧

ブラウザで以下のURLを開く…

http://<hostname>/svn/

ViewVC

http://<hostname>/viewvc/

ActivePython

2008年12月1日 月曜日

SubversionサーバーをApacheで運用する場合、ViewVCというプログラムを使いますが、これの動作には、ActivePython(2.5)が必須となります。

CollabNet Subversion のインストーラーは、ActivePythonを見つけると ViewVCを使えるようにインストール&環境設定をするので、CollabNet Subversionのインストーラーを実行する前に、あらかじめインストールしておく必要があります。

入手先> ActiveState ActivePython

DVDパッケージは、有償ですが、ダウンロード版は無償です。右上にある「Get ActivePytton」 というリンクで表示されるページにて、ActivePyton> Downloadを選択。名前&メールアドレスの入力を求められますが、これは Optional(任意=入れなくても良い)です。

本日時点で、2.6.0.0 と 2.5.2.2 が用意されていましたが、古いほう「2.5.2.2」を入手しました。

※Pythonの本家サイトは、こちら(http://www.python.org/)ですが、ActivePythonは、こちらで配布されているプログラムと、完全に互換性があるそうです。