Archive for PHP

PHP 5.2.5 と nucleus

PHP5.2.5にしたらnucleusの管理ページにて、segmentention faultしちゃう。

5.2.4に戻したら解決

—————————————-

こんなんでいいんすか。PHPよ。


$a = 1;
$b = "1a";

if($a == $b){
  print 'same';  // ←表示されるし。凸(`、´メ)
}

apc.optimization=1 止まる。

使えない。

WebからPHPのPEARをインストール

新規案件のサーバをセットアップしているときに、pearでライブラリを入れていたら、
「Webのインストーラあるよ」と表示されたからちょっと試しに使ってみた。

PEAR: Optional feature webinstaller available (PEAR’s web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR’s PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR’s PHP-GTK2-based installer)
To install use “pear install pear/PEAR#featurename”

初期設定はこんな感じ。ホームディレクトリは /home/matsu/ ね。

cd public_html
mkdir go-pear
cd go-pear
wget http://pear.php.net/go-pear
mv go-pear go-pear.php
chmod 777 /home/matsu/public_html/go-pear

go-pear.phpにアクセスしたところ。


1 start up, originally uploaded by supermatsubokkuri.

Read more

PHPのPDO::mysql。prepared statementはquery cacheを使っている!

■目的
- PHPのPDO::mysqlはquery cacheを使っているかを知る。
- 使っていたらqueryメソッドとの速度差はどのくらいかを知る。■実験環境
VM上のLinuxで実験

- CPU: Core2 Duo 2GHz(Host OS)
- OS: Windows XP(Host) CentOS release 4.4 (VM)
- PHP 5.2.3 (CLI)
- MySQL 5.0.41
- 郵便番号テーブル 121973件
- 検索するカラム: INT(10) unsigned

■実験1

prepared statementがquery cacheを使っているかを求める。

- 条件
- 10000 times
—————————————————————–
marker time index ex time
—————————————————————–
prepared statement 1186039399.87295300 4.21059203148
—————————————————————–

- 条件
- 100 times
- mysql
- set global query_cache_size = 0
—————————————————————–
marker time index ex time
—————————————————————–
prepared statement 1186039289.14549200 34.6095161438
—————————————————————–

- 結果
- prepared statementはquery cacheを使っている

■実験2

- 条件
- 10000 times
—————————————————————–
marker time index ex time perct
—————————————————————–
exec 1186039395.66236100 4.05659389496 49.07%
—————————————————————–
prepared statement 1186039399.87295300 4.21059203148 50.93%
—————————————————————–

- 結果
- execの方が4%早い!

■結論
PHPのPDO::mysqlはquery cacheを利用している。

PHPのコンパイルオプションに –disable-allをつけて、不要なモジュールをインストールしないときのベンチマーク

PHP5.2.3の configureオプションである–disable-allを指定した場合にどの程度パフォーマンスに影響するかを実験する。
–disable-allとは、PHPをインストールする際にデフォルトでインストールされる機能をインストールしないようにするオプション。デフォルトでは不要なも機能まで入ってしまうため、無駄が発生する場合がある。例えば、XML,JSON、filter、PDOなどである。

PHP実験環境

  • 共通環境
    • ゲスト:CentOS release 4.4 (Final) (on Vmware server 1.0.2)
    • ホスト:Windows XP Professional
    • CPU: Intel Core2 Duo 6600 2.4G
    • Apache:2.2.4
      • ./configure –prefix=/usr/local/apache2 –enable-ssl –enable-rewrite –enable-so
  • 環境1
    • ./configure \
      –enable-mbstring \
      –enable-soap \
      –enable-zend-multibyte \
      –with-apxs2=/usr/local/apache2/bin/apxs \
      –with-mysql=/usr/local/mysql \
      –with-pdo-mysql=/usr/local/mysql \
      –with-curl \
      –with-curlwrappers \
      –with-gd \
      –with-jpeg-dir=/usr/lib \
      –with-png-dir=/usr/lib \
      –with-zlib-dir=/usr/lib \
      –with-mcrypt
  • 環境2
    • ./configure \
      –enable-mbstring \
      –enable-soap \
      –enable-zend-multibyte \
      –with-apxs2=/usr/local/apache2/bin/apxs \
      –with-mysql=/usr/local/mysql \
      –with-pdo-mysql=/usr/local/mysql \
      –with-curl \
      –with-curlwrappers \
      –with-gd \
      –with-jpeg-dir=/usr/lib \
      –with-png-dir=/usr/lib \
      –with-zlib-dir=/usr/lib \
      –with-mcrypt \
      –enable-libxml \
      –disable-all
  • 環境1には入っていて、環境2には入っていないモジュール
    • ctype
    • dom
    • filter
    • hash
    • iconv
    • json
    • pcre
    • PDO
    • pdo_mysql
    • pdo_sqlite
    • posix
    • session
    • SimpleXML
    • SPL
    • SQLite
    • tokenizer
    • xml
    • xmlreader
    • xmlwriter

結果

ファイルサイズ
環境1 環境2 環境2/環境1
(100%以下なら小さい)
libphp5.soのファイルサイズ(B) 17268191 11998616 69%
/usr/local/bin/phpのファイルサイズ(B) 16307443 11306924 69%
apache起動直後のメインプロセスVSZ (kB) 19572 17332 89%
apache起動直後のサブプロセスVSZ (kB) 19704 17468 89%
コマンドラインベンチマーク

コマンドラインにてfunction callの速度を計測。PHPのソースコードに付属している ./Zend/bench.php を利用。 5回実行した結果の平均を記載。

% php ./Zend/bench.php|awk ‘{print $2}’

環境1 環境2 環境2/環境1
(100%以下なら環境1が高速)
Webベンチマーク

Webでアクセスした際のパフォーマンス測定。コマンドラインと同じスクリプトを利用

環境1 環境2 環境2/環境1
(100%以下なら環境1が高速)

結論

Webで利用した場合は、環境1と環境2において差異は無さそう。

ファイル容量がモジュールを削減した分、20%程度減っているため、プロセス起動が頻繁に発生する場合に環境2はアドバンテージがある。

環境1
php env1

環境2
php env2

PHP プロファイリング時に知っておくべき原則

PHPプログラムをプロファイリングするためにxdebugを利用するが、xdebugを利用すると
パフォーマンスが悪くなる。
どのくらい悪くなるかは以下の通り。

普通:60ms
xdebugを有効にしたHTTPアクセス:240ms
xdebugの吐くファイルに記載されている時間:640ms

1:4:16

YMCのVPSサービスをフルに使う!

@YMCのVPSを借りました。
カスタマイズドなので、root権限でやりたい放題できます。

Xenで動いています。ゲストOSはCentOS 4.5 です。

しかしながら、初期状態ではいくつかいらないアプリケーションが元から入っているので削除します。

以下は、コマンドの意味がわかる方のみ実行してください!かなーり危険です。
Read more

PHP preg_matchで中括弧が引っかからない。

PHPの正規表現関数の中で一番早いpreg_matchが思い通り動かない。

以下のコードで中括弧が無かったら、trueを出したいのだが、無くてもtrueが出ちゃう。


preg_match('/[^{}]+/','紙');

MySQLPHPGridを使ってみた

MySQLPHPGridを使ってみたんだけど、日本語使えない。
http://www.drasticdata.nl/mysqlphpgrid.htm

MySQLPHPGridとは、Webから利用できるMySQLの編集スクリプト。PHPでかかれています。

MySQLPHPGridでは、いろいろなオプションを設定できるので日本語のカラムは非表示にしたり、編集できないようにすれば実用的にOKです。

■利点
超簡単にテーブル内容を編集できる
Basic認証で、アクセス制限をかけられる
enumタイプにも対応してる。
sortできる
信頼性は高いとおもう

■欠点
日本語未対応
テーブルごとにPHPスクリプトを作らなければならない。
(テーブルを選択するプログラムを書けば対応可能)
スクリプト自体がshort tagで始まっているPHPファイルなので、iniで設定してあげる必要がある。short tag openがOffの場合は画面に何も表示されないっす。

がんばれMySQLPHPGrid!

phpideのファイルオープン時の文字コード

phpideを使い始めた。

まず、ファイルをすべてUTF-8で扱ってしまって、たいへん。。。。

扱う文字コードを買えるには以下の設定をする。
Window > Preference > General > Appearance > Content Types > Text > PHP
右下に表示される文字コードに「SJIS」と入力して「Update」ボタンを押す。

 

リンク

自分の他サイト