Tags: php

mysqlの設計をするときに改めてカラムタイプについて考えてみた。
いまさらという感じでもあるが。。。

例えばブログのタイトル。
大体、100文字あれば十分という感じがする。
でもUTF-8の場合、日本語はほぼ一文字あたり3バイト(ときに4バイト)になるため
文字数x3から4を見積もるため、100文字の場合は300から400バイトを割り当てることになる。
でもvarcharの最大データ長は255だから、日本語で100文字のタイトルを設定するとなると
カラムタイプをtextにしないといけなくなる。タイトルなのに。
そんなバカな!

逆に200byteで考えておけば50~60文字のタイトルが格納される。
もちろん半角英数字が入る場合はもっと長くなる。
そうするとinputタグにmaxlength仕掛けても、それってユーザビリティ悪い気もする。
ajaxで文字列のバイト数を計算して、キーを叩くたびに計算して
オーバーしたらエラーっていうのがスマートかも。

参考:

Code:

echo strlen(bin2hex($str))/2

http://www.cpa-lab.com/tech/0144
http://zombiebook.seesaa.net/article/33192046.html

新しく開発用サーバを立てることになったのでメモを残します。
いわゆるLAMP環境の設置です。

apache2.2のインストール

apacheをportsからインストールします。

Code:

cd /usr/ports/www/apache22
make install
apachectl start

すると以下のようなエラーが。

httpd: apr_sockaddr_info_get() failed for sabani.localhost
httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
[Wed Nov 26 16:12:35 2008] [warn] (2)No such file or directory: Failed to enable the ‘httpready’ Accept Filter

サーバのドメインネームが無い、ということなのでhostsファイルを編集。

Code:

vim /etc/hosts
127.0.0.1 yourdomain

もう一度apacheを起動するとちゃんと動きました。

php5のインストール

cd /usr/ports/lang/php5

Code:

make configure #apacheとmultibyteにチェック
make install

インストールが終わったら
php.ini-distをコピーしてphp.iniを作る。
php.ini-recommendとはrecommendと言いつつ、phpの公式ページでは
php.ini-distを使いなさいとある。なんのこっちゃ。
ちなみにdiffると違いがよくわかる。
error_reportingとかmagic_quoteとかが微妙に違うので注意。

httpd.confに以下の一行があることを確認

Code:

LoadModule php5_module libexec/apache22/libphp5.so

php5_moduleとlibexec/apache22/libphp5.soの間の変なタブが入っている場合は
そのタブを消してスペースで区切る。
じゃないときちんとphpと認識されないことがあるみたいです。

さらに以下の二行をhttpd.confに追加

Code:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

これでapacheのリスタートをかける。
適当にphpファイルを作ってブラウザから閲覧できればOK。

さらに拡張する場合は
/usr/ports/lang/php5-extensions
に移動して

Code:

make configure
make install

multibyteはともかく、必要そうなものを欲張りに入れていく。
特にMySQLとかXML-RPCとか。

参考URL
http://www.php.net/manual/ja/install.unix.apache2.php

mysqlのインストール

phpの拡張でmysql-clientはすでにインストールされているので
ここではmysql-serverのみをインストールする。

Code:

cd /usr/ports/database/mysql50-server
make configure
make install

mysqlの公式サイトによると
mysql_install_dbを実行する必要があるとのこと。
http://dev.mysql.com/doc/refman/5.1/ja/freebsd.html

これに従って以下を実行

Code:

cd /usr/local/mysql
bin/mysql_install_db --user=mysql
bin/mysqld_safe &

topを見るとmysqldが動いているのが見えます。

mysql_install_dbを実行した際に以下のメッセージが出るので
これに従います。

/usr/local/bin/mysqladmin -u root password ‘new-password’
/usr/local/bin/mysqladmin -u root -h yourdomain password ‘new-password’

そしてこのメッセージでもマニュアルでも
起動コマンドはあくまでも mysqld_safe & にしてくれと書いてある。
なので、できるだけmysqld_safeを使うことにする。

mysqld_safe は Unix や NetWare などの環境で、mysqld サーバ ( デーモン) を起動するときに推奨しているコマンドです。mysqld_safe は、エラー発生時にサーバを再起動したり、ランタイム情報をログ ファイルに記録するなどのセキュリティ機能が加わります。

http://dev.mysql.com/doc/refman/5.1/ja/mysqld-safe.html

ただし、以下の文章がよくわからなかったので、保留事項としておく。

FreeBSD は非常に小さいデフォルトのファイル処理制限があることで知られています。項B.1.2.17. 「’File’ Not Found and Similar Errors」 参照。サーバを –open-files-limit オプションを使用して mysqld_safe に起動しするか、あるいは /etc/login.confg の mysql ユーザーの制限を上げそれを cap_mkdb /etc/login.conf で再度ビルドします。

http://dev.mysql.com/doc/refman/5.1/ja/freebsd.html

takeshi
2008/10/06

開発環境メモ

現在の開発環境をメモしておきます。

Dell vostro200
CPU: PentiumD 1.6GHz
メモリ:1GB
OS: Windows XP Home Edition (なぜHomeなんだ・・・)

このマシンに仮想マシンを入れています。
Unixですが、いわゆるLAMP環境ですね。

VMware Server 1.0.5
仮想OS: FreeBSD 7.0

Apache 2.2.9
PHP 5.2.6
mySQL 5.1.26

これらはportsでインストールしたりコンパイルしています。

それからSambaをFreeBSDに入れています。
バージョンは3.0.31
それでapacheのドキュメントルートを共有化して
Windowsからeclipseで編集しています。

eclipseではPDTを使っています。
ここにQuantumDBプラグインを入れています。

他にも、phpMyAdminとかmysql workbenchも使っています。
それからphpのxdebugも入れています。

噂のxdebugを使ってみようかと思います。
FreeBSDにportsを使ってインストールをした時の手順を
書いておきます。

Code:

su
cd /usr/ports/devel/php-xdebug
make configure
make install

するとこんなメッセージが最後に表示されます。

The php debugger ‘xdebug’ has been installed successful.
Add a line containing

extension=/usr/local/lib/php/20060613/xdebug.so

or

zend_extension=/usr/local/lib/php/20060613/xdebug.so

to your php.ini to load it.

php.iniにどちらかの行を挿入してくださいとのことです。
しかし、実際にphp.iniに挿入してapacheに再起動をかけても
xdebugが読み込まれていないようです。

そこでphp.iniを見るとこんなことが書いてありました。

;;;;;;;;;;;;;;;;;;;;;;
; 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

とあります。
UNIXの場合は"extension=extensionname.so"のように書け
と言っています。
これに従い、

extension=/usr/local/lib/php/20060613/xdebug.so

extension=xdebug.so
にします。


以下訂正
以上のやり方でインストールすると以下のようなエラーが出ることがあります。

Code:

PHP Warning:  Xdebug MUST be loaded as a Zend extension in Unknown on line 0

そこでxdebugのサイトなどを詳しく見た結果以下のように書きなおしました。(extensions.ini)

Code:

zend_extension=/usr/local/lib/php/20060613/xdebug.so
こうすることでエラーが表示されなくなりました。
zendじゃないとダメなんですね。
なんだかなぁ。あてにならない。

そして以下の二行を追加。

Code:

xdebug.profiler_enable = 1
xdebug.profiler_output_dir = /tmp/profiler

それで、apacheを起動しphpinfoを見てみると
きちんとxdebugの項目が追加されました!

はじめまして。Takeshiといいます。今年の四月から、恵比寿の小さな会社でウェブSE兼プログラマーとして働き始めました。主にLAMP環境でウェブサービスやウェブサイトの構築をやっています。社会人なりたてということもあり、右も左もわからない状況ですが、日々感じたことや、覚えたことなどをメモっていきたいと思います。コメントやトラックバックなどいただけると、とても嬉しいです!それでは、よろしくお願いいたします。

2月 2012
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

検索

XMLフィード

blogtool