ECcube2.11.0でFatal error:Call to undefined function imageCreateFromJpeg()と言うエラーがでた場合

環境

  • さくらVPSの標準OS Centos5.5 64bit版
  • php5.2.17

原因

phpのライブラリで画像関連の関数が入っているgdってライブラリがあるんだけど、そのライブラリの中のImageCreateFromJpeg()って言う関数が使えないよーふえーんって言うのが原因。

対処法

jpegのライブラリを入れる

yum install libjpeg libjpeg-devel

以下のconfigureオプションを付けてphpを再コンパイルする

--with-jpeg-dir=/usr/lib --with-libdir=lib64

Apache再起動して反映

service httpd restart

ECcubeの管理画面で、システム設定>システム情報を確認して

JPG Support enabled

になっているのを確認。

【さくらVPSで運用 CentOs5.5】APC編

APC (Alternative PHP Cache)

APCPHPの中間コードやキャッシュやを最適化して高速化してくれるモジュール。

要は、サイトの表示が早くなる。

PECL (the PHP Extension Community Library)

C言語で書かれたPHP用拡張モジュールライブラリ。
登録されている拡張モジュールをネットワーク経由でインストールしたり出来ます。

あ、そういうもんだったのね。
PHPのモジュール入れるのに便利なやつってことで覚えておこうっと。

インストール

まず、PECLをインストール

# sudo yum -y install php-pear

なんで、php-peclじゃないんだろ。
って思うんだけど、peclってコマンドを使える様にするためにpearを入れるって感覚なんだろうきっと。

次に、APCインストールに必要なやつをインストール。入れないとエラーで怒られる。

# sudo yum -y install php-devel

php-devel パッケージには PHP 拡張を構築するために必要なファイルが含ま れています。もし独自の PHP 拡張をコンパイルするならこのパッケージをイ ンストールする必要があります。
http://penguin.triumf.ca/comps/9/ja_frames/rpms/php-devel.php

ここではphpizeを使うのに必要ぽい。

# sudo yum -y install gcc

GNU が作成している C/C++ コンパイラFreeBSDLinux などは標準の C コンパイラgcc になっている (ccとgccはハードリンクされている)。Solaris など商用マシンでも gcc の重要度は高く、OS 標準のコンパイラではコンパイルできず、gcc を使わないといけないソフトウェアも多い。
http://x68000.q-e-d.net/~68user/unix/pickup?gcc

# sudo yum -y install httpd-devel

apxsコマンドを使うためのやつ。
apxsはapacheの追加でモジュール拡張する時に便利なやつらしい。
http://d.hatena.ne.jp/shimooka/20081006/1223281545


意味が理解できたら、次からはこれ一発でおk

# sudo yum -y install php-devel php-pear gcc httpd-devel

やっとAPCのインストール

# pecl install apc

なんかエラーでた。

PEAR::raiseErro() in /usr/share/pear/PEAR/REST.php on line 165

えー。そんなのありかよ。

sudo vi /usr/share/pear/PEAR/REST.php

×raiseErro()
〇raiseError()

に直してあげる。

本来なら、ここで pecl install apc でわーいってなると思うんだけどなぜかエラーを吐く。
仕方ないので、手動インストールに切り替えた。

# svn checkout http://svn.php.net/repository/pecl/apc/trunk apc
# cd apc
# phpize
# ./configure
# make
# sudo make install

# sudo vi /etc/php.ini

一番下apcのエクステンション使うよって追加。
extension=apc.so

Apache再起動して反映させる。

# service httpd restart


完了。
php.iniに追加するのは、peclでインストール成功しても手動でインストールしてもやる。
当たり前だけど。

wordpressで重いなーと思って入れてみたが、体感で分かるくらい早くなった。
ていうか、数値での測り方がわからんw

ECcube構築メモ インストール編

バージョン選定

ECcubeダウンロード

2011/04/06時点での最新バージョンは、2011年3月23日にでたVersion 2.11.0でどうもすごく軽くなってスマートフォンにも対応しているらしい。
が、モジュールがまだ全然ないのとどうせバグがいっぱい出てくるんだろうと踏んで前の正式版2.4.4を入れることにした。

サーバー環境

さくらVPSで構築
構築は、前のエントリー参照。

ECcube用のサーバー設定

EC-CUBE(2.x系)/1_インストール/01_サーバ設定方法
このまま。

アプリケーション

インストール後に、ECcube管理で確認した表示。

  • EC-CUBE
    • 2.4.4
  • OS
    • Centos5.5
  • DBサーバ
    • MySQL 5.1.52
      • ユーザー作成

mysql> GRANT ALL PRIVILEGES ON eccube_db.* TO eccube_db_user@localhost IDENTIFIED BY ' ********';

全権限を与えた「eccube_db_user」ってユーザーを作りまっせと言う意味。多分。

      • 権限を反映させる

mysql> FLUSH PRIVILEGES;

エラーでたよね?知ってる。この対処法はこちら

      • データベースの作成

mysql> CREATE DATABASE eccube_db

  • WEBサーバ
    • Apache/2.2.3
      • AllowOverride noneからAllに変更。設定の上書きを許可するか?って意味。多分。.htaccessの上書きを許可しないと携帯で文字化けしたりする。


Options FollowSymLinks
AllowOverride All

  • PHP
    • 5.2.16
      • php.iniの設定を推奨の値に変更

# sudo vi /etc/php.ini

mbstring.language = Japanese
auto_detect_line_endings = on
output_handler = mb_output_handler
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = on
mbstring.detect_order = auto
mbstring.substitute_character = none
magic_quotes_gpc off

      • Apacheを再起動して設定を反映させる。

# sudo service httpd restart

  • GD
    • Loaded

パーミッションの変更

インストール時にいろいろ怒られるので権限を与えとく。

# sudo chmod 属性値 -R ディレクト

data/install.php    ……(属性:666)
インストール設定情報が書き込まれます
html/user_data     ……(属性:777)
フロント画面のテンプレート等が保存されます
html/cp ……(属性:777)
html/upload ……(属性:777)
管理画面からアップロードした画像等が保存されます
data/cache ……(属性:777)
data/class ……(属性:777)
data/Smarty      ……(属性:777)
Smartyテンプレートのコンパイル後のファイルが保存されます
data/downlaods/update ……(属性:777)
アップデート機能でダウンロードしたファイルが保存されます
data/downloads ……(属性:777)
data/logs ……(属性:777)

あとは、インストールしたドメインにアクセスしてインターフェイスに従ってインストールすればおk

【さくらVPSで運用 CentOs5.5】PHP編

※サーバー運用の素人の個人メモなので、あんまり参考にしない方がいいかも。

PHPのインストール

yum -y install php php-mbstring php-mysql php-gd
 phpインストール

sudo service httpd restart
 アパッチ再起動

【さくらVPSで運用 CentOs5.5】mysql編

※サーバー運用の素人の個人メモなので、あんまり参考にしない方がいいかも。

mysqlインストール

rpm -qa mysql-server
 入ってるか確認する

sudo yum -y install mysql-server
 入ってなければインストール


cd $HOME
cp /etc/my.cnf .
sudo vi /etc/my.cnf
 my.cnfの編集(文字コードの設定)


[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

■追加部分
# character-set
default-character-set=utf8
skip-character-set-client-handshake

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

■追加部分
[client]
default-character-set=utf8

■追加部分
[mysql]
default-character-set=utf8

■追加部分
[mysqldump]
default-character-set=utf8


chkconfig --list mysqld
 自動起動になっているか確認
 
sudo chkconfig mysqld on
 なっていなければ設定

sudo /etc/rc.d/init.d/mysqld start
 mysqlを起動

sudo mysqladmin -u root password 'パスワード'
 パスワードの設定

mysql -u root -p
 mysqlにログイン

use mysql
DELETE FROM user WHERE user = '' OR ( user = 'root' AND host != 'localhost' )
 mysqlデータベースから、不要なユーザーの削除

DROP DATABASE test
 不要なデータベースの削除

ユーザーを作る

GRANT ALL PRIVILEGES ON DB名.* TO ユーザー名@localhost IDENTIFIED BY 'パスワード';
FLUSH PRIVILEGES;

FLUSH PRIVILEGES;

ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
ってエラーがでると思う。
そしたら、このテーブルを作ってやれば解決。

CREATE TABLE `servers` (
`Server_name` char(64) NOT NULL,
`Host` char(64) NOT NULL,
`Db` char(64) NOT NULL,
`Username` char(64) NOT NULL,
`Password` char(64) NOT NULL,
`Port` int(4) DEFAULT NULL,
`Socket` char(64) DEFAULT NULL,
`Wrapper` char(64) NOT NULL,
`Owner` char(64) NOT NULL,
PRIMARY KEY (`Server_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

参考リンク

なんで、ないのかはよく分からん。

【さくらVPSで運用 CentOs5.5】apache編

※サーバー運用の素人の個人メモなので、あんまり参考にしない方がいいかも。

apacheインストール

# rpm -qa httpd
 インストールされているか確認

# sudo yum -y install httpd
 インストール

# rpm -qa httpd
# httpd -v
 バージョン確認

httpd.confの編集
# sudo cp /etc/httpd/conf/httpd.conf $HOME
 コピーを取っておく

# sudo vi /etc/httpd/conf/httpd.conf
 
 ディレクトリにアクセスした際に、ファイル一覧が生成され無い様に変更
 Options Indexes FollowSymLinks
 ↓
 Options FollowSymLinks
 
 最低限の情報しか与えない様に変更
 ServerTokens Prod
 ServerSignature Off

 不要なモジュールの削除
 http://memo.majide.com/index.php?%A1%DAApache%A1%DB%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%A4%CE%BA%EF%BD%FC%A4%CB%A4%E8%A4%EA%A5%E1%A5%E2%A5%EA%A4%F2%C0%E1%CC%F3%A4%B9%A4%EB

# sudo apachectl configtest
 起動テスト

# sudo service httpd start
 アパッチ起動

# chkconfig --list httpd
 自動起動になっているか確認

# sudo chkconfig httpd on
 なっていなければ自動起動にする

バーチャルホストの設定


DocumentRoot /var/www/html
ServerName yourdomain.com


DocumentRoot /var/www/html2
ServerName test.yourdomain.com

例えばこんな感じでバーチャルホストを設定したとする。

# sudo service httpd configtest

ドン

[warn] _default_ VirtualHost overlap on port 80, the first has precedence

こんなエラーがでたら

NameVirtualHost *:80

こいつがコメントアウトされている可能性が高い

ログローテーションの設定

エラーログや、アクセスログの容量が2Gを超えるとアパッチは起動を停止してしまう。
これを期間を決めて自動で削除するように設定する。

以下を参考にした。
http://linux.kororo.jp/cont/server/logrotate.php