sfMemcachePluginを使ってみる
phpのセッション管理にmemcacheを使うとむちゃくちゃ早いとの情報を得たので(いまさらですかね(^^;)さっそく調査してみると、Memcacheはやっぱりすごかった:アシアルブログにベンチマークした結果が載ってた。
ふむふむなるほどこれは使えるな〜♪
さっそくsymfonyでも使ってみようと思ってさらに調査。
memcacheをsymfonyから利用してみる:ueblogでsfMemcachePluginというのが紹介されてましたので自分でもやってみることに。
memcachedのインストール
# yum install memcached
※dagのリポジトリでないとyumでmemcacheは見つからなかったです。。。
つづいてphpでmemcacheを使えつるようにmemcacheをインストール
# pecl install memcache
php.iniに次のextensionを追記
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/memcache.so
sfMemcachePluginをインストール
$ symfony plugin-install http://plugins.symfony-project.com/sfMemcachePlugin
memcacheを使いたいアプリのconfigディレクトリに設定ymlファイルをコピー
$ cp plugins/sfMemcachePlugin/config/config_handlers.yml apps/front/config/ $ cp plugins/sfMemcachePlugin/config/memcache.yml apps/front/config/
※設定内容は必要であれば適宜修正します。
サンプル
action
public function executeIndex() { $ns = 'mynamespace'; $key = 'mykey'; $fc = new sfMemcacheFunctionCache; $this->result = ''; if ($fc->has($key, $ns, '')) { $this->result = $fc->get($key, $ns, ''); } else { $result = 'hello! memcache!'; $fc->set($key, $ns, $result); } sfView::SUCCESS; }
templates
<?php echo $result ?>
ちゃんと2回目の表示で出ました。
これで超速いので、文句なしですね♪
go-pearでのpearインストール
pearインストール
# curl http://pear.php.net/go-pear > pear.php % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 87099 100 87099 0 0 29743 0 0:00:02 0:00:02 --:--:-- 53998 # php -q pear.php Welcome to go-pear! Go-pear will install the 'pear' command and all the files needed by it. This command is your tool for PEAR installation and maintenance. Go-pear also lets you download and install the following optional PEAR packages: PEAR_Frontend_Web-beta, PEAR_Frontend_Gtk2, MDB2. If you wish to abort, press Control-C now, or press Enter to continue: HTTP proxy (http://user:password@proxy.myhost.com:port), or Enter for none:: Below is a suggested file layout for your new PEAR installation. To change individual locations, type the number in front of the directory. Type 'all' to change all of them or simply press Enter to accept these locations. (↓このように変更) 1. Installation prefix ($prefix) : /usr/local/share 2. Temporary files directory : $prefix/temp 3. Binaries directory : /usr/local/bin 4. PHP code directory ($php_dir) : $prefix/PEAR 5. Documentation base directory : $php_dir/docs 6. Data base directory : $php_dir/data 7. Tests base directory : $php_dir/tests 1-7, 'all' or Enter to continue: The following PEAR packages are bundled with PHP: PEAR_Frontend_Web-beta, PEAR_Frontend_Gtk2, MDB2. Would you like to install these as well? [Y/n] : Y Would you like to alter php.ini </usr/local/php/lib/php.ini>? [Y/n] : Y php.ini </usr/local/php/lib/php.ini> include_path updated. Current include path : .:/usr/local/php/lib/php Configured directory : /usr/local/share/PEAR Currently used php.ini (guess) : /usr/local/php/etc/php.ini Press Enter to continue: The 'pear' command is now at your service at /usr/bin/pear
pearの設定を確認
pear config-showコマンドで現在の設定を確認。
$ pear config-show CONFIGURATION (CHANNEL PEAR.PHP.NET): ===================================== Auto-discover new Channels auto_discover <not set> Default Channel default_channel pear.php.net HTTP Proxy Server Address http_proxy <not set> PEAR server [DEPRECATED] master_server pear.php.net Default Channel Mirror preferred_mirror pear.php.net Remote Configuration File remote_config <not set> PEAR executables directory bin_dir /usr/local/php/bin PEAR documentation directory doc_dir /usr/local/php/lib/php/pear/docs PHP extension directory ext_dir ./ PEAR directory php_dir /usr/local/php/lib/php/pear PEAR Installer cache directory cache_dir /tmp/pear/cache PEAR configuration file cfg_dir /usr/local/php/lib/php/pear/cfg directory PEAR data directory data_dir /usr/local/php/lib/php/pear/data PEAR Installer download download_dir /tmp/pear/download directory PHP CLI/CGI binary php_bin /usr/local/php/bin/php php.ini location php_ini <not set> PEAR Installer temp directory temp_dir /tmp/pear/temp PEAR test directory test_dir /usr/local/php/lib/php/pear/tests PEAR www files directory www_dir /usr/local/php/lib/php/pear/www Cache TimeToLive cache_ttl 3600 Preferred Package State preferred_state stable Unix file mask umask 2 Debug Log Level verbose 1 PEAR password (for password <not set> maintainers) Signature Handling Program sig_bin /usr/bin/gpg Signature Key Directory sig_keydir /usr/local/etc/pearkeys Signature Key Id sig_keyid <not set> Package Signature Type sig_type gpg PEAR username (for username <not set> maintainers) User Configuration File Filename /home/myuser/.pearrc System Configuration File Filename /usr/local/php/etc/pear.conf
sfAdvancedLoggerPluginを使ってみる
symfonyに標準搭載されているloggerが貧弱なので、「symfonyで開発日記」で紹介されていたsfAdvancedLoggerPluginを使ってみます。
http://blog.symfony.jp/2008/04/17/logging/
システム全体で同じ設定でログを吐きたいので、project_root/config/logging.ymlを作成し以下のように設定。
製品環境はnotice以上、開発環境などはdebug以上すべて吐き出すようにする。
(開発環境でメールが大量のメールが飛ぶことが予想されるがw、とりあえず動作確認の意味を込めて開発でもメール通知することに)
prod: enabled: on level: notice rotate: on period: 7 history: 5 purge: off loggers: sf_file_debug: class: sfAdvancedLogger param: php_level: 855 exception: on email: - min_level: 3 to: myaccount@localhost from: symfony sfAdvencedLogger subject: “symfony project Alert Mail” file: - min_level: 5 file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%_symfony.log - type: [PHP, Exception] file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%_php_exception.log all: enabled: on level: debug rotate: on period: 1 history: 7 purge: on loggers: sf_file_debug: class: sfAdvancedLogger param: php_level: 855 exception: on email: - min_level: 3 to: myaccount@localhost from: symfony sfAdvencedLogger subject: “symfony project Alert Mail” file: - min_level: 8 file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%_symfony.log - type: [PHP, Exception] file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%_php_exception.log
忘れずにsymfony cc
これでログは吐かれるようになったんだけど、吐かれたログを見ると日付が入ってない。。。
いつ発生したかわかんないんじゃぜんぜん実用的じゃなくね?
すでに提供されているものに手を入れるのはあまり好きではないのだが、
仕方なくsfAdvancedLoggerPlugin自体に手を入れることに。
public function log($message, $priority, $priorityName) { ・ ・ ・ // タイムスタンプ取得 $timestamp = date('Y-m-d H:i:s'); switch ($log['log_type']) { case 'email': // メッセージの先頭にタイムスタンプを挿入 $log['messages'][] = " $priorityName - $message"; break; case 'file': // メッセージの先頭にタイムスタンプを挿入 file_put_contents($log['file'], "$timestamp - $priorityName - $message\n", FILE_APPEND | LOCK_EX); break; } } } }
これで日付も出るようになりました。
あと心配なのはまだ動作確認できてないログローテーションだけだな。
MySQL 5.1のインストールメモ
インストール
バイナリパッケージのダウンロード
MySQLのサイトからmysql-5.1.24-rc-linux-i686-glibc23.tar.gzを入手する。
http://dev.mysql.com/downloads/
ダウンロードしたファイルを展開し、インストール対象ディレクトリに移動する。
# tar zxvf mysql-5.1.24-rc-linux-i686-glibc23.tar.gz # mv mysql-5.1.24-rc-linux-i686-glibc23 /usr/mysql
初期設定
データファイル、設定ファイル、ログファイルすべて/var/mysql/data以下に置くことにしてみる。
ユーザとグループの作成
# groupadd mysql # useradd -g mysql -d /home/mysql mysql # passwd mysql パスワード
所有者の変更
# chown -R mysql:mysql /usr/mysql
権限DBの作成
# mkdir -p /var/mysql/data # chown mysql:mysql /var/mysql/data
mysqlユーザになってインストールシェルを実行
$ cd /usr/mysql $ ./scripts/mysql_install_db --datadir=/var/mysql/data
my.cnfの作成と設定
# cp /usr/mysql/support-files/my-medium.cnf /var/mysql/data/my.cnf # vi /var/mysql/data/my.cnf
my.cnfのmysqldディレクティブを編集
[mysqld] user = mysql basedir = /usr/mysql datadir = /var/mysql/data port = 3306 socket = /var/mysql/data/mysql.sock
mysqld起動
$ cd /usr/mysql $ ./bin/mysqld_safe --defaults-file=/var/mysql/data/my.cnf >> /var/mysql/data/mysqld_safe.log 2>&1 &
データベースユーザの作成
初期登録されているユーザを削除し、新たに管理者ユーザを作成する。
$ /usr/mysql/bin/mysql --user=root --socket=/var/mysql/data/mysql.sock mysql> TRUNCATE TABLE mysql.user; mysql> FLUSH PRIVILEGES; mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
データベースの作成と利用ユーザの作成
mysql> CREATE DATABASE hoge; mysql> GRANT ALL PRIVILEGES ON hoge.* TO hogeuser IDENTIFIED BY 'パスワード';
作成したユーザで接続してみる
$ /usr/mysql/bin/mysql --user=hogeuser --password=パスワード --socket=/var/mysql/data/mysql.sock hoge
mysqld停止
$ /usr/mysql/bin/mysqladmin shutdown --user=root --password=パスワード --socket=/var/mysql/data/mysql.sock
phpでQRコードを出力する(実践編)
讃容日記さんのphp_qrを使って実際にQRコードを出力するまでやってみた。
参考サイトをいろいろ見るとphp_qrをインストールすれば使えるようなことが書いてあったのだが、いくらやってもエラーが発生してしまいます。
どうもGDが入ってないと使えないみたいである。
GDのインストール
yum -y install php-gd
php_qrのインストール
php_qrのインストールにはphpizeを利用するので、php-develが入ってなければインストール。
yum -y install php-devel
今回はphp_qr最新バージョンの0.3.1を使ってみました。
秋のPECLまつり - 讃容日記
http://d.hatena.ne.jp/rsky/20070918/1190041651
また、PNGやJPEGなどでも出力できるようにするので--enable-qr-gdオプションをつけます。
$ wget http://www.opendogs.org/pub/php_qr-0.3.1.tgz $ tar zxvf php_qr-0.3.1.tgz $ cd php_qr-0.3.1 $ phpize ./configure --enable-qr-gd $ make $ sudo make install
extentionとして読み込ませるために/etc/php.d/qr.iniを作成。
extension=qr.so
サンプルコード
<?php $data = 'test'; $data = mb_convert_encoding($data, 'SJIS-win', 'UTF-8'); $options = array( 'format' => QR_FMT_PNG, 'magnify' => 2, ); header('Content-Type: ' .qr_mimetype($options['format']) ); qr_output_symbol(null, $data, $options);
これで出ました。
こちらがとても参考になりました。
PHPでQRコードを作ろう - PHPプロ!TIPS+
http://www.phppro.jp/phptips/archives/vol46/1
phpでQRコードを出力する
php_qr-0.1.0のインストール・使用例
http://d.hatena.ne.jp/rsky/20070427/1177680276
php_qr-0.1.1
http://d.hatena.ne.jp/rsky/20070428/1177769255
[参考]
http://www.phppro.jp/phptips/archives/vol46/1
http://jo1upk.blogdns.net/linux/?%E3%82%BD%E3%83%95%E3%83%88%2FPHP%2Fphp_qr
※現在はv0.3.1までリリースされています。