rpmファイルはここで取得できますね

Written in 10-7-2010 by シンプル・アイ社長 | No Comments

各種OSのパッケージ等はここで取得できますね。

ftp://ftp.riken.jp/

CentOSなら、Linux => centos と進めばいい。

64bitサーバのCentOS5.3にyumをインストールする

Written in 10-7-2010 by シンプル・アイ社長 | No Comments

お名前.comのVPS(64ビット、CentOS5.3)にyumが入っていなかったのでインストールする。
http://www.onamae-server.com/vps/

wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-elementtree-1.2.6-5.x86_64.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-iniparse-0.2.3-4.el5.noarch.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-sqlite-1.1.7-1.2.1.x86_64.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/m2crypto-0.16-6.el5.6.x86_64.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-urlgrabber-3.1.0-5.el5.noarch.rpm

rpm -ivh python-elementtree-1.2.6-5.x86_64.rpm
rpm -ivh python-iniparse-0.2.3-4.el5.noarch.rpm
rpm -ivh python-sqlite-1.1.7-1.2.1.x86_64.rpm
rpm -ivh m2crypto-0.16-6.el5.6.x86_64.rpm
rpm -ivh python-urlgrabber-3.1.0-5.el5.noarch.rpm

wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rp
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/yum-3.2.22-26.el5.centos.noarch.rpm

rpm -ivh yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm \
yum-metadata-parser-1.1.2-3.el5.centos.x86_64 \
yum-3.2.22-26.el5.centos.noarch.rpm

でも、FAQをよくみたら、コントロールパネルで自動アップデートをOFFにするとyumがインストールされるようでした。。。

http://www.onamae-server.com/support/faq/vps/common/common_43.php

初期セットアップ時は、yumはインストールされていません。
yumはコントロールパネルにてアップデート方法を”アップデートなし”に変更するとインストールされます

http://www.onamae-server.com/vps/

久しぶりにピザを焼いた

Written in 24-6-2010 by シンプル・アイ社長 | No Comments

ピッツァ・マルガリータ

ピッツァ・マルガリータ

ピッツァ・ビスマルク

ピッツァ・ビスマルク

音楽会があったので、ピザを焼くように依頼された。マルガリータばかりを5枚の注文でした。連続でその後3枚マルガリータを焼いて食べてしまった。残りの生地で友人とマルガリータ(ちょい焼きすぎ)とビスマルクと、写真にはないが、カマンベールとクリームチーズのピッツァを焼いて食べた。

夏は生地の調子がよくてうまくいく。7月も依頼されているのだ。。。今度はもっと大量に生地を作ろう。

友人がトマトカレーをごちそうしてくれた

Written in 23-6-2010 by シンプル・アイ社長 | No Comments

トマトカレー

トマトカレー

友人が夕食に招待してくれました。アボガドディップと、めんたいマッシュポテトを、クラッカーにのせて食べ、ビールをいただいた。食事はトマトカレー。トマトのさわやかさが夏にはいいですね。鳥肉がとても柔らかくなっていて、とてもおいしかったです。ありがとう。

エビマヨうまかった

Written in 22-6-2010 by シンプル・アイ社長 | No Comments

エビマヨ

エビマヨ

お向かいのカフェ&ギャラリー「あずき」のマスターが作ってくれたエビマヨ。おっきなえびをたくさんいただきました。うまかった。。。

あつくてパトラが伸びている。

Written in 17-6-2010 by シンプル・アイ社長 | No Comments

伸びるパトラ

伸びるパトラ

むしむし暑いので、うちのパトラも伸びている。そっちいってゴロン、こっちいってゴロン。

OpenPNEのインストールにはpdo_mysqlが必要

Written in 14-5-2010 by シンプル・アイ社長 | No Comments

OpenPNEのインストールで、

./symfony openpne:install

を実行した際に、

Couldn’t locate driver named mysql

と怒られたなら、それはPHPにpdo_mysqlエクステンションが入っていないから。ソースディレクトリからエクステンションをコンパイルする。

cd /usr/local/src/php/php-5.2.5/ext/pdo_mysql/
phpize
./configure –with-php-config=/usr/local/php5/bin/php-config \
–with-pdo-mysql=/usr/local/mysql5.0
make
make install

でインストールし、php.iniに、

extension=pdo_mysql.so

を加えてApacheリスタート。
起動OKと出て、安心できない。ブラウザでPHPのページをみると閲覧できない。Apacheが起動していない。。。

php -i

で、確認しようとすると、

php: symbol lookup error: /usr/local/php5/lib/php/20060613/pdo_mysql.so:
undefined symbol: php_pdo_declare_long_constant

とでる。これは、/usr/local/php5/include/php/ext/pdo/php_pdo_driver.hのバージョンがよろしくないようだ。PHPをソースインストールした際のソースディレクトリからコピーしてやる。

cp /usr/local/src/php/php-5.2.5/ext/pdo/php_pdo_driver.h \
/usr/local/php5/include/php/ext/pdo/php_pdo_driver.h

いったんpdo_mysqlをアンインストールする。

rm -f /usr/local/php5/lib/php/20060613/pdo_mysql.so

上記、ソースから再度インストール。make cleanしてからね。これでApache再起動でいけました。OpnePNEもインストール完了。

  • Categories:
  • PHP

preg_matchのサブキャッチパターンの文字数が多いと落ちます!!

Written in 3-5-2010 by シンプル・アイ社長 | No Comments

PHPのpreg_matchにおいて、カッコを使って、サブキャッチパターンを作ることがあるだろう。ただ、そのサブキャッチパターンにマッチする文字数(バイト数)が10万文字(バイト)を超えると、エラーも発生させず、ただ単に、「マッチせずに」終了となる。(PHP5.2.5にて検証) 以下にサンプルコードを示す。

<?php
for ( $i=1; $i<=1000000000; $i++ ) {
$src .= ‘1234567890′;
if ( !preg_match( ‘/<(.+?)>/’, ‘<’.$src.’>’, $matches ) ) {
echo “not match at “.$i;
break;
}
}
?>

<?php
for ( $i=1; $i<=1000000000; $i++ ) {
$src .= ‘1234567890′;
if ( !preg_match( ‘/<(.+?)>/’, ‘<’.$src.’>’, $matches ) ) {
echo “not match at “.$i;
break;
}
}
?>

上記コードでは、決して「not match at ???」とは表示されることはないように思われるだろう。しかし実際はそうではない。実行してしばらく待つと以下の結果が出る。

not match at 10000

(.+?)というサブキャッチパターンにマッチする文字列が、10000×10文字=10万文字になった時点で、マッチしなくなり、echoして、breakしていることが分かるはずだ。ちなみに、以下のコードでは、どうだろう。

<?php
for ( $i=1; $i<=1000000000; $i++ ) {
$src .= ‘1234567890′;
$src2 .= ‘1234567890′;
if ( !preg_match( ‘/<(.+?)><(.+?)>/’, ‘<’.$src.’><’.$src2.’>’, $matches ) ) {
echo “not match at “.$i;
break;
}
}
?>

上記の場合、以下のような結果となる。

not match at 5000

おわかりだろう。やはり10万文字だ。(5000×10文字)+(5000×10文字)=10万文字なのである。

そんな長い文字をサブキャッチなんかしないといわれるかもしれない。しかし、私がこれに気付いたのは、XML-RPCのリクエストのパースを実装していた時だ。XML-RPCで、データを登録するリクエストにおいて、<base64></base64>タグで、画像データを受け取った際に、preg_matchのサブキャッチパターンで中身を取得したのだ。結果、大きな画像を受け取ったときに、マッチしないという事態に陥ったのだ。

たちが悪いのは、エラーをはいてプログラムが停止するのではなく、単にマッチしなくなって次の処理に進んでしまうことだ。ぜひ、気をつけていただきたい。

  • Categories:
  • PHP

携帯3キャリアの絵文字コンバータをつくった

Written in 28-4-2010 by シンプル・アイ社長 | No Comments

うちのフレームワークの絵文字コンバータ機能を再作成しました。3キャリアのSJISのページから送られてくる絵文字をmbstring.encoding_translationで、内部エンコードのUTF-8に変換したのちに、絵文字を [emoji:E123] のような内部で扱う形式に変換し、DBに保存する。PCサイトの出力時には、<img>で絵文字画像を出力し、各携帯キャリアに出力する際には、各キャリアの絵文字に変換して出力する機能です。

絵文字のバイナリと絵文字タグの相互変換をするための変換テーブルをどのような形式にしようかとだいぶ模索しました。

■フォームからやってくる絵文字を内部用の絵文字タグに変換する実装

DoCoMo

フォームからのSJIS絵文字=>UTF-8に変換=>※置換実行※<=UTF-8に変換<=unicodeの16進数をpack

EzWeb

フォームからのSJIS絵文字=>UTF-8に変換=>※置換実行※<=UTF-8に変換<=Shift-JISの16進数をpack

Softbank

フォームからのSJIS絵文字=>UTF-8に変換=>※置換実行※<=UTF-8に変換<=Shift-JISの16進数をpack

■内部用絵文字タグを絵文字に変換して携帯に出力する実装

DoCoMo

絵文字タグ=>※置換実行※<=UTF-8に変換<=unicodeの16進数をpack
※置換実行※=>SJIS-winに変換

EzWeb

絵文字タグ=>※置換実行※<=UTF-8に変換<=Shift-JISの16進数をpack
※置換実行※=>SJIS-winに変換

Softbank

絵文字タグ=>※置換実行※<=UTF-8に変換<=Shift-JISの16進数をpack
※置換実行※=>SJIS-winに変換

■実装する中でわかったこと

ドコモ絵文字は、mb_encoding_translationで、unicodeからSJIS-winや、UTF-8に変換して、それぞれの文字コードで表示できる。しかし、EzWebやSoftbankの絵文字では、unicodeから、SJIS-winや、UTF-8に変換しても、各エンコードの絵文字配列が異なるせいか、各エンコードで同じ絵文字を表示させることができない、というより文字化けとなる。したがって、サイトのHTML出力で使うエンコードの16進数を使ってバイナリを作り、それをmb_encoding_translationで変換してやる必要がある。(フォームからやってくる絵文字は、mbstring.encoding_translationで変換されているので。)


XREAやCORESERVERのsession_start()でエラー

Written in 12-4-2010 by シンプル・アイ社長 | No Comments

XREAやCORESRVERのPHPで、モジュール版とCGI版のPHPを合わせて使って、セッションが引き継がれると以下のようなエラーが出る。

Warning: session_start() [function.session-start]: open(/tmp/sess_xxxxxxxxxxxxxxxxxxxxxx, O_RDWR) failed: Permission denied (13) in /virtual/xxxx/public_html/index.php on line xx

これはCGI版では、セッションファイルが、/tmp/にて、FTPユーザー権限で書きこまれ、一方モジュール版ではApacheユーザー権限で書きこまれるからだ。それで、CGI版PHPで作成されたセッションファイルをモジュール版PHPから読み込む際にパーミッションエラーとなるのだ。逆もまたしかり。

  • Categories:
  • PHP