ラベル php の投稿を表示しています。 すべての投稿を表示
ラベル php の投稿を表示しています。 すべての投稿を表示

2014年4月3日木曜日

日本語形態素解析(mecab + php)

日本語形態素解析の導入方法

日本語の形態素解析には、いくつかの方法があると思います。
今回は、PHPで作成された掲示板に実装されているNGワード判定処理への苦情が多く寄せられた為、急遽対応しました。


mecabのインストール

# cd /usr/local/src/

# wget http://mecab.googlecode.com/files/mecab-0.996.tar.gz
# tar xzf mecab-0.996.tar.gz
# cd mecab-0.996
# ./configure --with-charset=utf8
# make
# make install

mecabライブラリ(IPA)のインストール

# wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
# tar xzf ./mecab-ipadic-2.7.0-20070801.tar.gz
# cd ./mecab-ipadic-2.7.0-20070801
# ./configure --with-charset=utf8
# make
# make install

PHP用ライブラリのインストール

# pear channel-discover pecl.opendogs.org
# pear remote-list -c opendogs
# pear install opendogs/mecab-beta
specify pathname to mecab-config [no] : /etc/mecab/mecab-config
...
You should add "extension=mecab.so" to php.ini

php.iniの設定

# locate mecab.so
/usr/lib64/php/modules/mecab.so

# vi /etc/php.d/mecab.ini
extension=mecab.so


使用例・結果

ばか えろ の単語を含む文字列を指定してみました。

<?php
$mecab = new MeCab_Tagger();
var_dump($mecab->parse("君ばかりがバグを出している。環境を考えろと言われても困ります。"));
?≶

君ばかりがバグを出している。環境を整えろと言われても困ります。
君      名詞,代名詞,一般,*,*,*,君,キミ,キミ
ばかり  助詞,副助詞,*,*,*,*,ばかり,バカリ,バカリ
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
バグ    名詞,一般,*,*,*,*,バグ,バグ,バグ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
出し    動詞,自立,*,*,五段・サ行,連用形,出す,ダシ,ダシ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
いる    動詞,非自立,*,*,一段,基本形,いる,イル,イル
。      記号,句点,*,*,*,*,。,。,。
環境    名詞,一般,*,*,*,*,環境,カンキョウ,カンキョー
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
整えろ  動詞,自立,*,*,一段,命令ro,整える,トトノエロ,トトノエロ
と      助詞,格助詞,引用,*,*,*,と,ト,ト
言わ    動詞,自立,*,*,五段・ワ行促音便,未然形,言う,イワ,イワ
れ      動詞,接尾,*,*,一段,連用形,れる,レ,レ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
も      助詞,係助詞,*,*,*,*,も,モ,モ
困り    動詞,自立,*,*,五段・ラ行,連用形,困る,コマリ,コマリ
ます    助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。      記号,句点,*,*,*,*,。,。,。

2013年12月17日火曜日

CentOS 5.8 php53からphp5.4へのアップデート

CentOS 5.8にインストールされていたphp53を、php5.4にアップデートしました。

タイトルの通りですが、作業を行った時のメモです。
作業自体はx86_64で行っていますが、他でも同じだと思います。
php53のパッケージを一旦削除してから、remiのリポジトリにあるphp5.4を取得・インストールしています。
なので、正確には再インストールですね!


php53の削除

早速、php53のパッケージを削除します。

[root@centos5.8 ~]# yum remove php53*
Loaded plugins: downloadonly, fastestmirror, security
Setting up Remove Process
Resolving Dependencies

~中略~

Transaction Test Succeeded
Running Transaction
  Erasing        : php53-common                                                                                               1/**
警告: /etc/php.ini は /etc/php.ini.rpmsave として保存されました。
  Erasing        : php53-bcmath                                                                                               2/**
  Erasing        : php53-cli                                                                                                  3/**
  (削除された項目を省略しています)


Removed:
  php53.x86_64 0:5.3.3-21.el5               php53-bcmath.x86_64 0:5.3.3-21.el5          php53-cli.x86_64 0:5.3.3-21.el5
  php53-common.x86_64 0:5.3.3-21.el5        (削除された項目を省略しています)

Dependency Removed:
  php-pear.noarch 1:1.4.9-8.el5

Complete!

php5.4のインストール

php53パッケージの削除が完了したら、いよいよphp5.4のインストールです。
わたしの環境では、ここで依存関係エラー(libedit)が発生しました。
epelのリポジトリから取得してインストールすることで解決です。

[root@centos5.8 ~]# yum install --enablerepo=remi php
Loaded plugins: downloadonly, fastestmirror, security
Loading mirror speeds from cached hostfile

~中略~

Installed:
  php.x86_64 0:5.4.22-1.el5.remi

Dependency Installed:
  libcurl.x86_64 0:7.21.7-5.el5.remi.2         libssh2.x86_64 0:1.2.7-1.el5.remi        php-cli.x86_64 0:5.4.22-1.el5.remi
  php-common.x86_64 0:5.4.22-1.el5.remi

Complete!

必要に応じてphp-mcryptphp-devel、削除されたモジュール類を入れてあげて下さい。

[root@centos5.8 ~]# yum install --enablerepo=remi php-mcrypt
Loaded plugins: downloadonly, fastestmirror, security
Loading mirror speeds from cached hostfile

~中略~

Installed:
  php-mcrypt.x86_64 0:5.4.22-1.el5.remi

Dependency Installed:
  libtool-ltdl.x86_64 0:1.5.22-7.el5_4

Complete!

[root@centos5.8 ~]# yum install --enablerepo=remi php-devel
Loaded plugins: downloadonly, fastestmirror, security
Loading mirror speeds from cached hostfile

~中略~

Installed:
  php-pear.noarch 1:1.9.4-23.el5.remi

Dependency Installed:
  php-process.x86_64 0:5.4.22-1.el5.remi                             php-xml.x86_64 0:5.4.22-1.el5.remi

Complete!

これらの他にもphp5.4化でphp-pearも入れ直しました。(・ω・´)
/etc/php.ini.rpmsave(php53削除時に作成された設定ファイルのバックアップ)からの再設定も、必要であれば行って下さい。


php5.4のインストールが完了したら、Apacheを再起動して完了です。

[root@centos5.8 ~]# /etc/init.d/httpd start
httpd を起動中:                                            [  OK  ]

さてと……。
動かなくなったPHPファイルはどれくらいあるのでしょうか(・_・;)

php5.4の更新内容についてはこちらをご覧下さい。
下位互換の無い変更点も結構あるので、PGの皆さん!ご注意下さい。




php5.4インストール時にエラーになった場合

php5.4をインストールする際に、わたしの環境では依存関係エラーが発生しました。

php-cli-5.4.23-1.el5.remi.x86_64 from remi has depsolving problems
  --> Missing Dependency: libedit.so.0()(64bit) is needed by package php-cli-5.4.23-1.el5.remi.x86_64 (remi)
Error: Missing Dependency: libedit.so.0()(64bit) is needed by package php-cli-5.4.23-1.el5.remi.x86_64 (remi)
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest

libeditが無いとのことだったので、epelリポジトリから取得してインストールすることで対処しました。

[root@centos5.8 ~]# yum install --enablerepo=epel libedit
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
~中略~
Running Transaction
  Installing     : libedit                                                                                                     1/1

Installed:
  libedit.x86_64 0:2.11-2.20080712cvs.el5

Complete!

2013年12月13日金曜日

ZendFrameworkでMemcachedを使用する

Zend_Cache_Memcachedのサンプル

ZendFrameworkにあるZend_Cache_Memcachedを使用するサンプルです。

ZendFrameworkにはZend_Cacheという仕組みがあります。
特徴としては、保存するデータの形式を指定する フロントエンド と、データの保存の仕方を指定する バックエンド があります。
今回は、フロントエンドに Core を指定し、バックエンドに Memcached を指定しました。
(Core とはフロントエンドの基本的な機能を実装したものになります)
まず、下記のようにキャッシュにデータを追加するアクションを作成します。

/**
 * データの追加アクション
 */
public function addAction()
{
    // フロントエンド(Core)の設定
    $frontend = array(
        'lifetime' => 300,
    );
    // バックエンド(Memcached)の設定
    $backend = array(
        'servers' => array(
            array(
                'host'             => 'localhost',
                'port'             => 11211,
                'persistent'       => true,
                'timeout'          => 300,
                'weight'           => 1,
                'retry_interval'   => 15,
                'status'           => true,
                'failure_callback' => null,
            ),
        ),
        'compression' => true,
    );
    $cache = Zend_Cache::factory("Core", "Memcached", $frontend, $backend);
    
    // データをキャッシュ
    $cache->save("value1", "key1");
    $cache->save("value2", "key2");
    $cache->save("value3", "key3");
    
    echo "key1 : " . $cache->load("key1") . \n";
    echo "key2 : " . $cache->load("key2") . \n";
    echo "key3 : " . $cache->load("key3") . \n";
}

上記のアクションを実行し、キャッシュしたデータが画面に出力されていればキャッシュ機能は実装完了です。
次にキャッシュしたデータを取得するアクションを作成します。

/**
 * データ取得アクション
 */
public function getAction()
{
    // フロントエンド(Core)の設定
    $frontend = array(
        'lifetime' => 300,
    );
    // バックエンド(Memcached)の設定
    $backend = array(
        'servers' => array(
            array(
                'host'             => 'localhost',
                'port'             => 11211,
                'persistent'       => true,
                'timeout'          => 300,
                'weight'           => 1,
                'retry_interval'   => 15,
                'status'           => true,
                'failure_callback' => null,
            ),
        ),
        'compression' => true,
    );
    $cache = Zend_Cache::factory("Core", "Memcached", $frontend, $backend);
    
    echo "key1 : " . $cache->load("key1") . "\n";
    echo "key2 : " . $cache->load("key2") . "\n";
    echo "key3 : " . $cache->load("key3") . "\n";
}

上記の追加アクションを実行後、データの取得アクションを実行してデータが取得できれば実装完了です。
実は、キャッシュ機能を実装する際にハマったことがあって、バックエンドのMemcachedにホスト情報を指定すると
何故かキャッシュされないという現象が起きていました。
問題点を調べたところ、servers内の配列にあるfailure_callbackキーに指定するパラメータ値が原因でした。
はじめは、ZendFrameworkのドキュメントを見ながらパラメータを指定していたのですが、初期値が空と書いてあったので同じように設定していました。
実はこれが大間違いで、failure_callbackの初期値はNULLでした。
空の値を設定していたので不正な引数として処理されていたようです。

ついでに他の初期値も確認してみたところ、タイムアウトも5ではなく1になっていました
ドキュメントの初期値

$backend = array(
    'servers' = array(
        array(
            'host'             => "localhost",
            'port'             => 11211,
            'persistent'       => true,
            'weight'           => 1,
            'timeout'          => 5,
            'retry_interval'   => 15,
            'status'           => true,
            'failure_callback' => "",
        ),
    ),
    'compression'   => false,
    'compatibility' => false,
);

実際のライブラリに設定されていた初期値

/**
 * Default Values
 */
const DEFAULT_HOST = '127.0.0.1';
const DEFAULT_PORT =  11211;
const DEFAULT_PERSISTENT = true;
const DEFAULT_WEIGHT  = 1;
const DEFAULT_TIMEOUT = 1;
const DEFAULT_RETRY_INTERVAL = 15;
const DEFAULT_STATUS = true;
const DEFAULT_FAILURE_CALLBACK = null;

protected $_options = array(
    'servers' => array(array(
        'host' => self::DEFAULT_HOST,
        'port' => self::DEFAULT_PORT,
        'persistent' => self::DEFAULT_PERSISTENT,
        'weight'  => self::DEFAULT_WEIGHT,
        'timeout' => self::DEFAULT_TIMEOUT,
        'retry_interval' => self::DEFAULT_RETRY_INTERVAL,
        'status' => self::DEFAULT_STATUS,
        'failure_callback' => self::DEFAULT_FAILURE_CALLBACK
    )),
    'compression' => false,
    'compatibility' => false,
);

さらによく見てみると、実はこのZend_Cache_MemcachedMemcachedではなくMemcacheのインスタンスを生成しているようです。

/Zend/Cache/Backend/Memcached.php

/**
 * Constructor
 *
 * @param array $options associative array of options
 * @throws Zend_Cache_Exception
 * @return void
 */
public function __construct(array $options = array())
{
    if (!extension_loaded('memcache')) {
        Zend_Cache::throwException('The memcache extension must be loaded for using this backend !');
    }
    parent::__construct($options);
    if (isset($this->_options['servers'])) {
        $value= $this->_options['servers'];
        if (isset($value['host'])) {
            // in this case, $value seems to be a simple associative array (one server only)
            $value = array(0 => $value); // let's transform it into a classical array of associative arrays
        }
        $this->setOption('servers', $value);
    }
    $this->_memcache = new Memcache;

おわり

2013年12月11日水曜日

CentOS 5.8 でphp-pecl-memcachedを使う。

php53-pecl-memcached

表題のままですが、作業を行わせて頂ける機会があったのでその時のログです。
そもそも、このCentOSサーバーにはあのphp53がインストールされていたのです。 Σ(・ω・ノ)ノ゛パッケージ少ナイ?
当然、php53-pecl-memcachedなんてものは期待通りのNot available.

では、恐る恐るremiのphp-pecl-memcachedをyumでインストール。

Error: Missing Dependency: libedit.so.0()(64bit) is needed by package php-cli-5.4.22-1.el5.remi.x86_64 (remi)
Error: Missing Dependency: libtokyocabinet.so.7()(64bit) is needed by package php-dba-5.4.22-1.el5.remi.x86_64 (remi)
Error: Missing Dependency: libt1.so.5()(64bit) is needed by package php-gd-5.4.22-1.el5.remi.x86_64 (remi)
Error: Missing Dependency: libedit.so.0()(64bit) is needed by package php-devel-5.4.22-1.el5.remi.x86_64 (remi)
 You could try using --skip-broken to work around the problem

ですよねーー! わかってた!!

ならばとソースからコンパイルして入れようと試みるもconfigureの時点で壮大に大コケ。 *o_ _)oバタッ

今回はphp53を削除してphp 5.4を(remiから)入れる了承を得て作業再開。
なので、以下の作業ログはphp 5.4の環境でのお話になります。



CentOS 5.8 memcachedのインストール

上の話とは関係なくmemcachedのインストール自体はサクッと。イケます。

[root@centos5.8 ~]# yum --enablerepo=remi install memcached memcached-devel
Loaded plugins: downloadonly, fastestmirror, security
Loading mirror speeds from cached hostfile

~中略~

Dependencies Resolved

===================================================================================================================================
 Package                            Arch                      Version                                Repository               Size
===================================================================================================================================
Installing:
 memcached                          x86_64                    1.4.15-2.el5.remi                      remi                     84 k
 memcached-devel                    x86_64                    1.4.15-2.el5.remi                      remi                     11 k

Transaction Summary
===================================================================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 95 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): memcached-devel-1.4.15-2.el5.remi.x86_64.rpm                                                         |  11 kB     00:00
(2/2): memcached-1.4.15-2.el5.remi.x86_64.rpm                                                               |  84 kB     00:00
-----------------------------------------------------------------------------------------------------------------------------------
Total                                                                                              1.0 MB/s |  95 kB     00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : memcached                                                                                                   1/2
  Installing     : memcached-devel                                                                                             2/2

Installed:
  memcached.x86_64 0:1.4.15-2.el5.remi                          memcached-devel.x86_64 0:1.4.15-2.el5.remi

Complete!

インストールが完了したら早速(起動)x(起動)。

[root@centos5.8 ~]# /etc/init.d/memcached start
memcached を起動中:                                        [  OK  ]

是非、memcached-toolも使ってみてください!



CentOS 5.8 にyumでphp-pecl-memcachedを入れる

以降は上でもお話させて頂いた通り、php 5.4の環境での話になります。
remiたんからphp-pecl-memcachedを入れています。

[root@centos5.8 ~]# yum install --enablerepo=remi php-pecl-memcached
Loaded plugins: downloadonly, fastestmirror, security
Loading mirror speeds from cached hostfile

~中略~

Dependencies Resolved

===================================================================================================================================
 Package                              Arch                     Version                                Repository              Size
===================================================================================================================================
Installing:
 php-pecl-memcached                   x86_64                   2.1.0-4.el5.remi.1                     remi                    78 k
Installing for dependencies:
 libmemcached                         x86_64                   1.0.4-1.el5.remi                       remi                   202 k

Transaction Summary
===================================================================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 280 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): php-pecl-memcached-2.1.0-4.el5.remi.1.x86_64.rpm                                                     |  78 kB     00:00
(2/2): libmemcached-1.0.4-1.el5.remi.x86_64.rpm                                                             | 202 kB     00:00
-----------------------------------------------------------------------------------------------------------------------------------
Total                                                                                              3.9 MB/s | 280 kB     00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : libmemcached                                                                                                1/2
  Installing     : php-pecl-memcached                                                                                          2/2

Installed:
  php-pecl-memcached.x86_64 0:2.1.0-4.el5.remi.1

Dependency Installed:
  libmemcached.x86_64 0:1.0.4-1.el5.remi

Complete!

インストールも無事完了ですね。

[root@centos5.8 ~]# cat /etc/php.d/memcached.ini | head -n 2
; Enable memcached extension module
extension=memcached.so

memcachedの設定ファイルを確認しています。
ここで使用するポート番号なども指定出来るので開いて見てください。

[root@centos5.8 ~]# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

仕上げにApacheを再読み込みさせて完了です。

今回、参考にお邪魔させて頂いたページ

本当にありがとうございます。 c(・ω・`c⌒っ

和音のPHPでMemcachedを利用する (php-pecl-memcached)もよろしくお願いします!

2013年12月10日火曜日

PHPでMemcachedを利用する (php-pecl-memcached)

Memcachedのサンプル

PHPでのMemcachedを利用するサンプルです。

データを登録し、別のブラウザ等からアクセスしてデータが正常に取得できるかをテストしています。
下の2ファイル(add.phpとget.php)を用意しました。

はじめにadd.phpを実行し、つぎにget.phpを別のブラウザ等から実行する事で確認します。
値が取得できていればOKとします。

add.php
<?php
$mc = new Memcached();

// Memcachedサーバを追加
$mc->addServer("localhost", 11211);

// データの追加
$mc->add("key1", "value1");
$mc->add("key2", "value2");
$mc->add("key3", "value3");


get.php
<?php
$mc = new Memcached();

// Memcachedサーバを追加
$mc->addServer("localhost", 11211);

// データの取得
echo "key1 : " . $mc->get("key1") . "\n";
echo "key2 : " . $mc->get("key2") . "\n";
echo "key3 : " . $mc->get("key3") . "\n";


実行時間とメモリダンプの情報も記載しておきます。

[root@1803-zm11 ~]# time /usr/bin/php ./add.php
real    0m0.078s
user    0m0.068s
sys     0m0.010s

[root@localhost ~]# time /usr/bin/php ./get.php
real    0m0.079s
user    0m0.067s
sys     0m0.011s

[root@localhost ~]# memcached-tool localhost:11211 dump
Dumping memcache contents
  Number of buckets: 1
  Number of items  : 3
Dumping bucket 1 - 3 total items
add key2 0 1386578473 6
value2
add key1 0 1386578473 6
value1
add key3 0 1386578473 6
value3



memcachedの有効期限

簡単な使い方ですが、追加するデータごとに有効期限もセットできるようです。
有効期限は1秒単位でセットできます。
例)

<?php
$mc = new Memcached();
$mc->addServer("localhost", 11211);

// 有効期限付きのデータを設定
$mc->add("key1", "value1", 300); //  5分
$mc->add("key2", "value2",  60); //  1分
$mc->add("key3", "value3",  10); // 10秒

2013年12月9日月曜日

CentOS 5.8 にyumでPHP5.5をインストールする。

CentOS5.8(i386)に、yumからPHP5.5をインストールする。

始めに、remi.repoの中にremi-php55のリポジトリ設定が存在するか確認し、存在しない場合はリポジトリの追加を行って下さい。

[root@centos5.8 ~]# cat /etc/yum.repos.d/remi.repo
 - 以下、抜粋 -
[remi-php55]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 5 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/5/php55/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/5/php55/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

さっそく、remiたんの[remi-php55]からPHP5.5を取ってみます。

[root@centos5.8 ~]# yum install --enablerepo=remi,remi-php55 php
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile

~中略~

php-cli-5.5.6-1.el5.remi.i386 from remi-php55 has depsolving problems
  --> Missing Dependency: libedit.so.0 is needed by package php-cli-5.5.6-1.el5.remi.i386 (remi-php55)
Error: Missing Dependency: libedit.so.0 is needed by package php-cli-5.5.6-1.el5.remi.i386 (remi-php55)
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest

Missing Dependency
依存関係を解決出来ない様子。(*´∩ω・`)゚
結局、remi, remi-php55に加えepelリポジトリの参照指定を増やすことで解決しました。

[root@centos5.8 ~]# yum install --enablerepo=epel,remi,remi-php55 php
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile

~中略~

Dependencies Resolved

========================================================================================================================
 Package                       Arch                 Version                              Repository                Size
========================================================================================================================
Installing:
 php                           i386                 5.5.6-1.el5.remi                     remi-php55               2.9 M
Installing for dependencies:
 apr                           i386                 1.2.7-11.el5_6.5                     base                     124 k
 apr-util                      i386                 1.2.7-11.el5_5.2                     base                      80 k
 httpd                         i386                 2.2.3-83.el5.centos                  updates                  1.2 M
 libcurl                       i386                 7.27.0-11.el5.remi                   remi-php55               221 k
 libedit                       i386                 2.11-2.20080712cvs.el5               epel                      79 k
 libssh2                       i386                 1.2.7-1.el5.remi                     remi                      82 k
 libxslt                       i386                 1.1.17-4.el5_8.3                     base                     420 k
 php-cli                       i386                 5.5.6-1.el5.remi                     remi-php55               2.8 M
 php-common                    i386                 5.5.6-1.el5.remi                     remi-php55               1.2 M
 php-pear                      noarch               1:1.9.4-23.el5.remi                  remi                     428 k
 php-pecl-jsonc                i386                 1.3.2-2.el5.remi.1                   remi-php55                67 k
 php-pecl-zip                  i386                 1.12.2-2.el5.remi.5.5                remi-php55               315 k
 php-process                   i386                 5.5.6-1.el5.remi                     remi-php55                60 k
 php-xml                       i386                 5.5.6-1.el5.remi                     remi-php55               277 k
 postgresql-libs               i386                 8.1.23-6.el5_8                       base                     197 k
Updating for dependencies:
 openldap                      i386                 2.3.43-25.el5_8.1                    base                     298 k

Transaction Summary
========================================================================================================================
Install      16 Package(s)
Upgrade       1 Package(s)

Total download size: 11 M
Is this ok [y/N]: y
Downloading Packages:
(1/17): php-process-5.5.6-1.el5.remi.i386.rpm                                                    |  60 kB     00:00
(2/17): php-pecl-jsonc-1.3.2-2.el5.remi.1.i386.rpm                                               |  67 kB     00:00
(3/17): libedit-2.11-2.20080712cvs.el5.i386.rpm                                                  |  79 kB     00:00
(4/17): apr-util-1.2.7-11.el5_5.2.i386.rpm                                                       |  80 kB     00:00
(5/17): libssh2-1.2.7-1.el5.remi.i386.rpm                                                        |  82 kB     00:00
(6/17): apr-1.2.7-11.el5_6.5.i386.rpm                                                            | 124 kB     00:00
(7/17): postgresql-libs-8.1.23-6.el5_8.i386.rpm                                                  | 197 kB     00:00
(8/17): libcurl-7.27.0-11.el5.remi.i386.rpm                                                      | 221 kB     00:00
(9/17): php-xml-5.5.6-1.el5.remi.i386.rpm                                                        | 277 kB     00:00
(10/17): openldap-2.3.43-25.el5_8.1.i386.rpm                                                     | 298 kB     00:00
(11/17): php-pecl-zip-1.12.2-2.el5.remi.5.5.i386.rpm                                             | 315 kB     00:00
(12/17): libxslt-1.1.17-4.el5_8.3.i386.rpm                                                       | 420 kB     00:00
(13/17): php-pear-1.9.4-23.el5.remi.noarch.rpm                                                   | 428 kB     00:00
(14/17): php-common-5.5.6-1.el5.remi.i386.rpm                                                    | 1.2 MB     00:02
(15/17): httpd-2.2.3-83.el5.centos.i386.rpm                                                      | 1.2 MB     00:00
(16/17): php-cli-5.5.6-1.el5.remi.i386.rpm                                                       | 2.8 MB     00:05
(17/17): php-5.5.6-1.el5.remi.i386.rpm                                                           | 2.9 MB     00:04
------------------------------------------------------------------------------------------------------------------------
Total                                                                                   509 kB/s |  11 MB     00:21

Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating       : openldap                                                                                        1/18
  Installing     : apr                                                                                             2/18
  Installing     : postgresql-libs                                                                                 3/18
  Installing     : apr-util                                                                                        4/18
  Installing     : httpd                                                                                           5/18
  Installing     : libxslt                                                                                         6/18
  Installing     : libssh2                                                                                         7/18
  Installing     : libcurl                                                                                         8/18
  Installing     : libedit                                                                                         9/18
  Installing     : php-xml                                                                                        10/18
  Installing     : php-common                                                                                     11/18
  Installing     : php-cli                                                                                        12/18
  Installing     : php-process                                                                                    13/18
  Installing     : php-pear                                                                                       14/18
  Installing     : php-pecl-zip                                                                                   15/18
  Installing     : php                                                                                            16/18
  Installing     : php-pecl-jsonc                                                                                 17/18
  Cleanup        : openldap                                                                                       18/18

Installed:
  php.i386 0:5.5.6-1.el5.remi

Dependency Installed:
  apr.i386 0:1.2.7-11.el5_6.5                                apr-util.i386 0:1.2.7-11.el5_5.2
  httpd.i386 0:2.2.3-83.el5.centos                           libcurl.i386 0:7.27.0-11.el5.remi
  libedit.i386 0:2.11-2.20080712cvs.el5                      libssh2.i386 0:1.2.7-1.el5.remi
  libxslt.i386 0:1.1.17-4.el5_8.3                            php-cli.i386 0:5.5.6-1.el5.remi
  php-common.i386 0:5.5.6-1.el5.remi                         php-pear.noarch 1:1.9.4-23.el5.remi
  php-pecl-jsonc.i386 0:1.3.2-2.el5.remi.1                   php-pecl-zip.i386 0:1.12.2-2.el5.remi.5.5
  php-process.i386 0:5.5.6-1.el5.remi                        php-xml.i386 0:5.5.6-1.el5.remi
  postgresql-libs.i386 0:8.1.23-6.el5_8

Dependency Updated:
  openldap.i386 0:2.3.43-25.el5_8.1

Complete!


最後にインストールされたPHPのバージョンを確認して終わりにします。

[root@centos5.8 ~]# php -v
PHP 5.5.6 (cli) (built: Nov 13 2013 08:00:07)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies

少ない内容ですがお役に立てたら嬉しいです。 c(・ω・´c⌒っ




[番外編]

PHP 5.5のphp-mcryptをインストール。

[root@centos5.8 ~]# yum install --enablerepo=remi-php55 'php-mcrypt'
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile

~中略~

Dependencies Resolved

========================================================================================================================
 Package                      Arch                 Version                             Repository                  Size
========================================================================================================================
Installing:
 php-mcrypt                   i386                 5.5.6-1.el5.remi                    remi-php55                  44 k
Installing for dependencies:
 libmcrypt                    i386                 2.5.8-4.el5.centos                  extras                     116 k
 libtool-ltdl                 i386                 1.5.22-7.el5_4                      base                        37 k

Transaction Summary
========================================================================================================================
Install       3 Package(s)
Upgrade       0 Package(s)

Total download size: 196 k
Is this ok [y/N]: y
Downloading Packages:
(1/3): libtool-ltdl-1.5.22-7.el5_4.i386.rpm                                                      |  37 kB     00:00
(2/3): php-mcrypt-5.5.6-1.el5.remi.i386.rpm                                                      |  44 kB     00:00
(3/3): libmcrypt-2.5.8-4.el5.centos.i386.rpm                                                     | 116 kB     00:00
------------------------------------------------------------------------------------------------------------------------
Total                                                                                   212 kB/s | 196 kB     00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : libtool-ltdl                                                                                     1/3
  Installing     : libmcrypt                                                                                        2/3
  Installing     : php-mcrypt                                                                                       3/3

Installed:
  php-mcrypt.i386 0:5.5.6-1.el5.remi

Dependency Installed:
  libmcrypt.i386 0:2.5.8-4.el5.centos                         libtool-ltdl.i386 0:1.5.22-7.el5_4

Complete!

先日の事件もあったので、念の為に確認x確認。

[root@centos5.8 ~]# cat /etc/php.d/mcrypt.ini
; Enable mcrypt extension module
extension=mcrypt.so

(●,,`З´b)b OKッ☆

phpのタイムゾーンエラー (警告)

Unknown: It is not safe to rely on the system's timezone settings. (in Unknown on line 0)

phpで次のような警告(タイムゾーン)が出ている(事後発覚)場合があります(した)。

PHP Warning:  Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0

タイムゾーン設定がされていない場合ですね。
早速、タイムゾーンの設定をして荒ぶるphpさんを黙らせたいと思います。

ではでは、まずは現状の確認から。

[root@centos5.8 ~]# php -i | grep timezone
Default timezone => UTC
date.timezone => no value => no value

php.inidate.timezoneえいじあーとおきょおおおおおおおおう(Asia/Tokyo)を指定してApacheを再読み込みで。

[root@centos5.8 ~]# vi /etc/php.ini
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =               ← コメントアウトを解除して
date.timezone = Asia/Tokyo     ← Asia/Tokyo を追記しました

今回のわたしの環境はPHP5.4でしたので、こちらの方の記事を知識の参考とさせて頂きました。ヽ(´▽`*)ノ

わたしの方では検証していませんが、他サイトさん(こことかここ)の情報によれば、timezoneの設定で日付を扱うphp関数の速度が結構違うみたいですね。

2013年12月7日土曜日

CentOS 6.4 rpmforgeから取得したphp-mcryptの不具合(ファイルが読み込めません) - php5.3

Unable to load dynamic library '/usr/lib/php/modules/module.so'

学校も休日の今日。
何気なくPHPのバージョンを確認して悦に浸ろうとした時のこと。

[root@centos6 ~]# php -v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/module.so' - /usr/lib/php/modules/module.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP 5.3.3 (cli) (built: Jul 12 2013 20:21:47)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies


え。
えええええええええええ!?


何? この警告。 許さない。絶対に


  Unable to load dynamic library '/usr/lib/php/modules/module.so'

module.soが読めていないみたいです。

早速調査開始。
拡張モジュール読み込み設定のあたりだと思うので、/php.d/以下のiniファイルに検索をかけてみました。

[root@centos6 ~]# find /etc/php.d/ -name '*.ini' -type f -print | xargs grep 'module.so'
/etc/php.d/mcrypt.ini:extension=module.so

ビンゴ!☆⌒d(*^ー゚)b
先日、このCentOS6.4サーバーでphp-mcryptの更新を行ったのですが、その時に作られたmcrypt.iniの中身がおかしかったみたいです。
念のため、mcrypt.soの位置を確認します。

[root@centos6 ~]# rpm -ql php-mcrypt
/etc/php.d/mcrypt.ini
/usr/lib/php/modules/mcrypt.so

読み込みモジュール名の書き換えだけで問題ないようなので、viで変更しました。__ロ(。_。*)ケシケシ♪

[root@centos6 ~]# vi /etc/php.d/mcrypt.ini
; Enable mcrypt extension mcrypt
extension=module.so  ← 削除しました。
extension=mcrypt.so  ← 追加しました。

設定ファイルを保存したら、Apacheを再読み込みさせて完了。

[root@centos6 ~]# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

[root@centos6 ~]# php -v
PHP 5.3.3 (cli) (built: Jul 12 2013 20:21:47)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

といった流れで、難なく解決しました。

いやいや。

[root@centos6 ~]# yum list installed | grep 'php-mcrypt'
php-mcrypt.i686         5.3.3-1.el6.rf    @rpmforge

[root@centos6 ~]# grep 'php-mcrypt' /var/log/yum.log
Dec 01 18:18:45 Installed: php-mcrypt-5.3.3-1.el6.rf.i686

rpmforgeめ。 設定ファイルの内容に誤りがあるとは・・・・・・。
面倒臭い。 (´⊆`;) いや、侮れない。


来週から行う稼働中サーバーのPHP5.4化作業もいろいろと気をつけよーっと。

2013年11月19日火曜日

CentOS 5.x ImageMagickのインストール

ImageMagickをインストールする。

yumからのインストールでは取得可能なバージョンが古い為、rpmパッケージからインストールを試ます。

[root@centos5 ~]# wget http://www.imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-6.8.7-7.x86_64.rpm
[root@centos5 ~]# mv ./ImageMagick-6.8.7-7.x86_64.rpm /usr/local/src/ImageMagick-6.8.7-7.x86_64.rpm
[root@centos5 ~]# rpm --install --test /usr/local/src/ImageMagick-6.8.7-7.x86_64.rpm
エラー: 依存性の欠如:
        libHalf.so.4()(64bit) は ImageMagick-6.8.7-7.x86_64 に必要とされています
        libIex.so.4()(64bit) は ImageMagick-6.8.7-7.x86_64 に必要とされています
        libIlmImf.so.4()(64bit) は ImageMagick-6.8.7-7.x86_64 に必要とされています
        libImath.so.4()(64bit) は ImageMagick-6.8.7-7.x86_64 に必要とされています
        libjasper.so.1()(64bit) は ImageMagick-6.8.7-7.x86_64 に必要とされています
        liblqr-1.so.0()(64bit) は ImageMagick-6.8.7-7.x86_64 に必要とされています
        liblzma.so.0()(64bit) は ImageMagick-6.8.7-7.x86_64 に必要とされています
        libwebp.so.4()(64bit) は ImageMagick-6.8.7-7.x86_64 に必要とされています

多数の依存性エラーが吐かれた事によって心折れましたので、ソースからインストールをさせて頂きます。c(・ω・`c⌒っ

[root@centos5 ~]# wget http://www.imagemagick.org/download/ImageMagick.tar.gz
[root@centos5 ~]# mv ./ImageMagick.tar.gz /usr/local/src/
[root@centos5 ~]# cd /usr/local/src/
[root@centos5 src]# tar xfz ./ImageMagick.tar.gz
[root@centos5 src]# cd ImageMagick-6.8.7-7
[root@centos5 ImageMagick-6.8.7-7]# ./configure
[root@centos5 ImageMagick-6.8.7-7]# make
[root@centos5 ImageMagick-6.8.7-7]# make install
[root@centos5 ImageMagick-6.8.7-7]# convert -list format | egrep "GIF|JPEG|PNG"
           see part 5 which describes the image encoding (RLE, JPEG, JPEG-LS),
           and supplement 61 which adds JPEG-2000 encoding.
      GIF* rw+   CompuServe graphics interchange format
    GIF87* rw-   CompuServe graphics interchange format (version 87a)
      JNG* rw-   JPEG Network Graphics
     JPEG* rw-   Joint Photographic Experts Group JFIF format (62)
    PJPEG* rw-   Joint Photographic Experts Group JFIF format (62)
      PNG* rw-   Portable Network Graphics (libpng 1.2.10)
           See http://www.libpng.org/ for details about the PNG format.
    PNG00* rw-   PNG inheriting bit-depth and color-type from original
    PNG24* rw-   opaque or binary transparent 24-bit RGB (zlib 1.2.3)
    PNG32* rw-   opaque or transparent 32-bit RGBA
    PNG48* rw-   opaque or binary transparent 48-bit RGB
    PNG64* rw-   opaque or transparent 64-bit RGBA
     PNG8* rw-   8-bit indexed with optional binary transparency
[root@centos5 ImageMagick-6.8.7-7]# convert -resize x100 -quality 80 /var/www/html/test.jpg /var/www/html/test.png

wgetコマンドを使用し、imagemagickの公式サイトから最新版のソースコード配布パッケージを取得します。
makeファイルを作成し、インストールを実行。

インストール後にconvertコマンドを実行し、対応フォーマットの確認を行っています。
最後の行では実際にconvertコマンドを実行し、画像のリサイズ試験を行っています。

-resize
(画像サイズ変更オプション)
x100
(横幅100px指定。この場合、縦幅は自動調整。 縦幅指定の場合は 100x などと指定可能)
-quality
(画像変換のクオリティ値。1-100を指定可能)
80
(指定された変換クオリティ値)


phpのimagickをインストールする。

[root@centos5 ~]# /usr/bin/php -i | grep 'imagick'
[root@centos5 ~]# pecl install 'imagick'
downloading imagick-3.1.2.tgz ...
Starting to download imagick-3.1.2.tgz (94,657 bytes)
.....................done: 94,657 bytes
~中略~
/php/extensions/no-debug-non-zts-20090626/imagick.so

Build process completed successfully
Installing '/usr/local/include/php/ext/imagick/php_imagick.h'
Installing '/usr/local/include/php/ext/imagick/php_imagick_shared.h'
Installing '/usr/local/include/php/ext/imagick/php_imagick_defs.h'
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20090626/imagick.so'
install ok: channel://pecl.php.net/imagick-3.1.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini

[root@centos5 ~]# vi /etc/php.d/imagick.ini      ← 作成
; Enable imagick extension module
extension=imagick.so

[root@centos5 ~]# ln -s /usr/local/lib/php/extensions/no-debug-non-zts-20090626/imagick.so /usr/lib64/php/modules/imagick.so
[root@centos5 ~]# /etc/init.d/httpd configtest
Syntax OK
[root@centos5 ~]# /etc/init.d/httpd reload
httpd を再読み込み中:                                      [  OK  ]
[root@centos5 ~]# /usr/bin/php -i | grep 'imagick'
/etc/php.d/imagick.ini,
imagick
imagick module => enabled
imagick module version => 3.1.2
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator
imagick.locale_fix => 0 => 0
imagick.progress_monitor => 0 => 0

imagickが未インストールであることを確認したら、peclコマンドにてimagickのインストールを実行します。
インストール完了のメッセージにて「You should add "extension=imagick.so" to php.ini」と表示されているので、それに従います。
この場合は、拡張の設定ディレクトリ/etc/php.d/内にファイル(imagick.ini)を作成し、そこに拡張モジュール読み込み記述を追記しました。
imagick.soへの参照パスが通っていない場合は必要に応じてリンクを張って下さい。
上記の例では ln -s /usr/local/lib/php/extensions/no-debug-non-zts-20090626/imagick.so /usr/lib64/php/modules/imagick.so

設定に問題が無いか確認し、apacheを再読み込みさせます。
最後に、phpにてimagickが有効になったかを確認して終了します。