Zen Cartは、オープンソースの統合型ECサイト構築システムです。
Windows Web Server 2008 + IIS7.0へのZen Cart(日本語版)のインストール手順を以下に示します。
- PHPのインストール
PHPがインストールされていない場合は、本サイトのPHPページを参照して、PHPをインストールする。 - データベースの設定
Zen CartはデータベースにMySQL が利用できる。
phpMyAdminでの設定方法を示す。- MySQLの管理者ユーザー(rootなど)でphpMyAdminにログインする。
- 「新規データベースを作成する」にZen Cart用のデータベース名(ex. zencart)を記入して「作成」をクリックする。

- 一度トップページに戻ってから、上部のメニューで「特権」ページを選択し、「新しいユーザーを追加する」をクリックする。

- ユーザー情報の入力
Zen Cartデータベースを所有するデータベースユーザーの情報を入力し、画面下の方の「実行する」をクリックする。ユーザー名 テキストフィールドの値を利用する Zen Cartデータベースを所有するユーザー名
ex.) zencartホスト ローカル localhost パスワード テキストフィールドの値を利用する パスワード(生成しても良い) - 表示された画面で下の方にスクロールし、データベースに固有の特権エリアでZen Cart用データベース(ex. zencart)に対して特権を追加する。

- データベースに固有の特権のうち「管理-GRANT」以外のすべてにチェックし、「実行する」をクリックする。

データベースの設定は以上
- Zen Cartのダウンロード
http://zen-cart.jp/62.htmlからZen Cart日本語版をダウンロードする。 - ダウンロードしたファイルを任意のインストールしたいフォルダに解凍する。
ex.) C:¥WebApplications¥zencart
以降、「ZENCART_HOME」と記述する。 - php.iniの設定
phpをインストールしたフォルダにあるphp.iniに対し、PHPのインストール時に設定したこのブログに書いてあるPHPアプリケーションのすべてに共通する設定に加え、以下を設定する。extension=php_mysql.dll
extension=php_gd2.dll
extension=php_mcrypt.dll
extension=php_curl.dll設定後、IISを再起動する。
- 設定ファイルを作成する。
ZENCART_HOME¥includes¥dist-configure.phpをZENCART_HOME¥includes¥configure.phpにコピーする。
ZENCART_HOME¥admin¥includes¥dist-configure.phpをZENCART_HOME¥admin¥includes¥configure.phpにコピーする。
このファイルには、データベースへの接続情報などが書かれている。 - フォルダのアクセス権の設定
以下のファイルまたはフォルダ以下は、IUSRグループが書き込み可能にする。- ZENCART_HOME¥includes¥configure.php
- ZENCART_HOME¥admin¥includes¥configure.php
- ZENCART_HOME¥cache
- ZENCART_HOME¥images
- ZENCART_HOME¥includes¥languages¥english¥html_includes
- ZENCART_HOME¥media
- ZENCART_HOME¥pub
- ZENCART_HOME¥admin¥backups
- ZENCART_HOME¥admin¥images¥graphs
- IIS仮想ディレクトリの設定
「IIS仮想ディレクトリの作成」を参照して、IISの仮想ディレクトリを追加する。
物理パスにはZENCART_HOME¥html(ex. C:¥WebApplications¥zencart¥html)を指定する。 - データ投入スクリプトの修正
C:¥WebApplications¥zencart¥zc_install¥mysql_zencart.sql
BLOB型、TEXT型の列に対してdefaultが設定されているのを修正する。
Version 1.3.0.2-l10n-jp-4では978, 1564-1566行目products_options_values BLOB NOT NULL ,query_builderテーブルへのINSERTに対して、query_keys_listに空文字列を指定する。
Version 1.3.0.2-l10n-jp-4では3266-3271行目INSERT INTO query_builder ( query_id , query_category , query_name , query_description , query_string , query_keys_list) VALUES ( '1', 'email', 'All Customers', 'Returns all customers name and email address for sending mass emails (ie: for newsletters, coupons, GV's, messages, etc).', 'select customers_email_address, customers_firstname, customers_lastname from TABLE_CUSTOMERS order by customers_lastname, customers_firstname, customers_email_address', '');
INSERT INTO query_builder ( query_id , query_category , query_name , query_description , query_string , query_keys_list) VALUES ( '2', 'email,newsletters', 'All Newsletter Subscribers', 'Returns name and email address of newsletter subscribers', 'select customers_firstname, customers_lastname, customers_email_address from TABLE_CUSTOMERS where customers_newsletter = '1'', '');
INSERT INTO query_builder ( query_id , query_category , query_name , query_description , query_string , query_keys_list) VALUES ( '3', 'email,newsletters', 'Dormant Customers (>3months) (Subscribers)', 'Subscribers who HAVE purchased something, but have NOT purchased for at least three months.', 'select c.customers_email_address, c.customers_lastname, c.customers_firstname from TABLE_CUSTOMERS c, TABLE_ORDERS o where c.customers_newsletter = '1' AND c.customers_id = o.customers_id and o.date_purchased < subdate(now(),INTERVAL 3 MONTH) GROUP BY c.customers_email_address order by c.customers_lastname, c.customers_firstname ASC', '');
INSERT INTO query_builder ( query_id , query_category , query_name , query_description , query_string , query_keys_list) VALUES ( '4', 'email,newsletters', 'Active customers in past 3 months (Subscribers)', 'Newsletter subscribers who are also active customers (purchased something) in last 3 months.', 'select c.customers_email_address, c.customers_lastname, c.customers_firstname from TABLE_CUSTOMERS c, TABLE_ORDERS o where c.customers_newsletter = '1' AND c.customers_id = o.customers_id and o.date_purchased > subdate(now(),INTERVAL 3 MONTH) GROUP BY c.customers_email_address order by c.customers_lastname, c.customers_firstname ASC', '');
INSERT INTO query_builder ( query_id , query_category , query_name , query_description , query_string , query_keys_list) VALUES ( '5', 'email,newsletters', 'Active customers in past 3 months (Regardless of subscription status)', 'All active customers (purchased something) in last 3 months, ignoring newsletter-subscription status.', 'select c.customers_email_address, c.customers_lastname, c.customers_firstname from TABLE_CUSTOMERS c, TABLE_ORDERS o WHERE c.customers_id = o.customers_id and o.date_purchased > subdate(now(),INTERVAL 3 MONTH) GROUP BY c.customers_email_address order by c.customers_lastname, c.customers_firstname ASC', '');
INSERT INTO query_builder ( query_id , query_category , query_name , query_description , query_string , query_keys_list) VALUES ( '6', 'email,newsletters', 'Administrator', 'Just the email account of the current administrator', 'select 'ADMIN' as customers_firstname, admin_name as customers_lastname, admin_email as customers_email_address from TABLE_ADMIN where admin_id = $SESSION:admin_id', '');ZENCART_HOME¥zc_install¥demo¥mysql_demo.sql
adress_bookテーブルのentry_telephone列に適当な値を入れるようにする。(デモデータインストール時のエラー対策:1364 Field 'entry_telephone' doesn't have a default value)
Version 1.3.0.2-l10n-jp-4では10行目INSERT INTO address_book (address_book_id, customers_id, entry_gender, entry_company, entry_firstname, entry_lastname, entry_street_address, entry_suburb, entry_postcode, entry_city, entry_state, entry_country_id, entry_zone_id, entry_telephone) VALUES (NULL, 1, 'm', 'JustaDemo', 'Bill', 'Smith', '123 Any Avenue', '', '12345', 'Here', '', 223, 12, '000-000-0000'); - Zen Cartのセットアップを行う。
- セットアップURL(http://{あなたのURI}/{IIS仮想ディレクトリ}/zc_install)にアクセスする。
ex.) http://www.yourdomain.com/zencart/zc_install

- 「ライセンス規約」ページでライセンス規約を確認し、「上記を確認したうえでこれに同意します。」を選択する。

- 「システム検査」ページでその結果を確認する。

「PHP APIモード = cgi-fcgi」「MySQLのバージョン=不明」となる場合があるが、問題ない。 - 「システム設定」ページで必要情報を入力する。

「仮想HTTPパス」にはIISで設定するパス(http://{あなたのURI}/{IIS仮想ディレクトリ}など)を記入する。
ex.) http://itmx.kids-beads.com/zencart
現時点ではSSLは無効にしておく。 - 「phpBB設定」ページ
phpBBと連携する場合は、このページで必要事項を入力する。

- 「データベース設定」ページ
データベースの設定を入力する。
「(1)データベースの設定」で設定したDBユーザー名などを記入する。
MySQLの受信ポートを変更している場合は「データベースホスト名」に{ホスト名}:{受信ポート番号}(ex. localhost:3306)と記述する。

- 「店舗設定」ページ
店舗の情報を入力する。
このページでデモ用のカテゴリ、商品データを入れることもできる。

- 「管理者設定」ページ
管理者のログインIDなどの情報を入力する。

- 「完了」ページ
これでZen Cartのインストールは完了。

- セットアップURL(http://{あなたのURI}/{IIS仮想ディレクトリ}/zc_install)にアクセスする。
- セキュリティの向上
- ZENCART_HOME¥zc_installフォルダを削除する。
- 以下のファイルに対してIUSRグループが書き込み不可能にする。
- ZENCART_HOME¥includes¥configure.php
- ZENCART_HOME¥admin¥includes¥configure.php
WindowsのPHP5.2では、is_writable()が正しい値を返さないため、ショッピングページから「警告 :設定ファイルが書き込み可能になっています ~/includes/configure.php. セキュリティ上危険なので、このファイルに正しいユーザー権限を設定して下さい。」というメッセージが消えない。
それを回避するため、ZENCART_HOME¥includes¥init_includes¥init_header.phpの書き込みチェック部分を無効にする。(24行目)define('WARN_CONFIG_WRITEABLE', 'false'); - /adminフォルダの名称を変更する。
ZENCART_HOME¥admin/includes/configure.phpを修正する。- DIR_WS_ADMIN
- DIR_WS_HTTPS_ADMIN
- DIR_FS_ADMIN
38, 40, 57行目
ex.)define('DIR_WS_ADMIN', '/zencart/admin-xxx/');
define('DIR_WS_HTTPS_ADMIN', '/zencart/admin-xxx/');
define('DIR_FS_ADMIN', 'C:/WebApplications/zencart/admin-xxx/');
- 管理画面(http://{あなたのURI}/{IIS仮想ディレクトリ}/{(10)-(3)で指定したフォルダ名})にアクセスし、(9)-(7)で設定した管理者ユーザーでログインする。
ex.) http://www.yourdomain.com/zencart/admin/
管理画面にログインすると以下のような画面になる。
この管理画面で、デザインの変更や商品の登録などが行える。
メールの設定で、「メール送信 - 接続方法」という項目がありデフォルトでは「sendmail」に設定されている。
これを、Windows上のPHPなので「smtp」に変更したくなるが、「sendmail」のままにすること。

- ショッピングサイトを表示してみよう。
http://{あなたのURI}/{IIS仮想ディレクトリ/
(ex. http://www.yourdomain.com/zencart/)
がショッピングサイトのトップページだ。

以上

