[解決]時々出る「Syntax error」on KAGOYAサーバー

KAGOYAサーバー(専用サーバー50)で、Zen Cart のテストサイトをアップしているんですが、しばらく何ともなかったのに、突然アクセスしづらくなってしまったんですね。

何か新しいモジュールを入れて、それが原因であれば、そこを取り除くのですが、今回の場合、セットアップ済みの複数サイトが同時に同じ現象に見舞われてしまい、標準インストールのままのサイト(zc_installすら削除してない)までアクセスしづらい状況になってしまったんですね。

アクセスしづらいというのは、更新ボタンを押せば、なんとか表示するけど、次のページへリンクするとまたエラーが出るといった感じです。

Zen Cart ではないんですが、同様のPHPを使ったCMSで同じ現象に悩んでいた方がいたみたいです。

KAGOYAでOpenPNEの設定にハマル

自分は SAKURA なんですが、相棒が KAGOYA でして、OpenPNE の設定でかなり長期間悩んでいました。一緒になってネット検索などをしているとここに当たりました。
酔生夢死: KAGOYAでOPENPNEその後
http://blogs.dion.ne.jp/php/archives/6159089.html
ここによると、ちゃんと「OpenPNE セットアップガイド」通りにやっても管理画面でエラーが出るとのこと。
たしかに、Syntax error が出ました。このエラーから文字コードか OpenPNE のバグかといろいろ探っていたのですが、KAGOYA そのものの問題でした。

KAGOYAでOPENPNEその後

ちなみに環境としてはカゴヤの共用プランに独自ドメインという仕様。
インストールというかセットアップに関しては前回述べた通り、session.auto_startとmbstring.encoding_translationのデフォルト設定によりうまくいかないので、こいつをhtaccessでポチッとな、とするだけ。

結果、KAGOYAのデフォルトPHP設定で「mbstring.encoding_translation」と「session.auto_start」がONになっているのが、問題だったというわけ。

kagoya_php_setting

  • mbstring.encoding_translation = OFF
  • session.auto_start = OFF
  • register_globals = OFF

最近またZen Cart なんですが

しばらく、自分開発のコンパクトなPHPカートを作っていたのですが、最近またZen Cart を弄ってます。

コンパクトなPHPカート(名前はまだない)は、それはそれで、既存のブログに追加したり、HTMLで既に出来上がっているサイトに簡単に追加できるので、便利なんですが。
(個人的には、MODxでサイト構築して、SnippetsでPHPカートに飛ばしたりする方法がいい感じになってきている)

ところが、最近の受注案件では、一からの構築と、高機能を求められるのでそういった部分には、「高機能ショッピングカート」としてZen Cart が必要になってくるわけです。

OsCommerce やEC-CUBE といった選択肢もあるのですが。

  • OsCommerce は、対応モジュールも豊富で、Zen Cart に近い部分が多いので良いのですが、Zen Cart のオーバーライド機能や、テンプレート管理機能に関してちょっと遅れ気味な感じがするので(勉強不足?)。
  • EC-CUBE は、バージョン2に上がったのですが、まだ対応しているサーバーが少ないのと、ちょっとしたカスタマイズにも高額のコストがかかり、気軽には導入できない感じです。一般的なECサイトで、デザインだけカスタマイズできればいいのであれば、EC-CUBE のAjaxなレイアウト管理は、おすすめです。

取引先の業種にもよるのですが、ちょっと特殊なことをやろうとするとZen Cart でないと“小回り”が利かなかったりするんですね。

ショッピングカートを作ってみる

さて、MODxでカートモジュールを作ってみるとかみないとか、言ってるわけですが、ちょっと頓挫気味。

MODxでセッションを管理するのってPluginが必要みたいだけど、そのへんの情報が、まだまだ未熟です。(言い訳)

というわけで、単独のPHPでショッピングカートを作ってみる。

一部では「PHPはセキュリティが甘いから・・」とか「オープンソースは品質に問題が・・」とかいうシステム屋さんがたまにいますが。

『それは、お前らが責任取りたくねーだけの言い訳だろ!』と言いたい。

では、まずレシピから・・

  1. Linuxサーバー(Apache)
  2. MySQL
  3. PHP
  4. Dreamweaver
  5. テキストエディタ(秀丸推奨)

レシピの1~3は、ホスティングサーバーについてくる物で十分です。(月額400円くらい)

あそうそう、間違っても高価なWindowsサーバープラン(IIS)とか選んじゃダメですよ。

IIS版のPHPは、あくまでエミュレーターみたいな物ですから(最近は良くなった?)

ホスティングサーバーによって、MySQLのバージョン、PHPのバージョンが違う場合があるので、自分の使うサーバーがどのバージョンを使っているかよく確認しておきましょう。

PHPが上手く動かなくて、「PHPのバージョンのせいだ・・」とか、「MySQLの文字コードが・・」とかいう人もいますが、それも言い訳でしか、ありません。

きちんとソースを記述すれば問題ありません。

Dreamweaverを使う利点は、HTMLが簡単に記述できる点と、リモートのMySQLサーバーに接続して「まるでサーバー上で作業しているように」PHPコードを記述できるという2点です。

Dreamweaverのコードエディタについているポップヒントと、補完機能は、本当に便利です。

最後のテキストエディタは、秀丸+PHP強調表示を追加して使用するのがベストですね。

最終的な調整とか、PHPコードのクリーンアップとかに使います。

じゃあ、作ってみます。

ショッピングカートの作り方

ショッピングカートって何かを考えると、要するにメールフォームの一つなんだと思う。

今でも時々、メールフォームだけで、注文を受けているページを見る事があります。商品がひとつだけのお店とかそうですね。

それを多数の商品ラインナップに対応すべく、複数の注文を受けられるようにしたり、注文者情報をフォームに入力して、最後は、注文者とお店にメールを送る。

そう考えれば、ショッピングカートがずっと簡単なものに見えてきますね。

1.メール送信部分を作る。

というわけで、基本の基本、注文者とお店にメールを送信する部分を作ります。

この時にメールの内容を日時とともにMySQLに保存する部分も作ります。
これで、注文履歴を参照する“元”ができるわけですね。

2.購入希望商品を持ちまわるカート部分を作る。

ショッピングサイトでは、サイト内をブラブラといろんな商品を見て回るので、サイト内でカートに入れた商品を持ちまわる機能が必要になります。

これは、SESSION関数を使って簡単にできます。

SESSIONには、商品コードと数量、あと必要ならオプション値(色とかサイズ)を保持しておきます。

SESSIONの追加、削除をきちんとできれば上出来です。

3.注文者情報もSESSIONで持ちまわります。

お客様は、どこで気が変わるかわかりません。

時に、住所を入力して、決定ボタンを押す直前に「あ、あれも買おう」とか思って、商品ページに戻る事もあります。

そんな時に、注文ページでまた、一から、名前、住所などを入力するのは、かったるいですよね。

なので、「一度入力された」データーは、ショッピング終了まで保持するようにします。

4.おまけ機能で、他に差をつける。

他のライバルサイトに無い、機能で買い物の楽しさ、カートの使いやすさをアピールします。

  • 郵便番号→住所 自動補完機能。
  • お届け日時の指定をカレンダーで指定。
  • 商品レビュー。
  • 他のおすすめ商品。
  • ポイント機能。

などなど、流行のAjaxとかいろいろ使ってイケテルカートを目指します。

MySQL GUI ツールを使ってみる

今時なホスティングサーバーなら、データベースにMySQLやPostgreSQLなんかが使えると思います。

またデータベースの管理用にphpMyAdminとかphpPgAdminとかが、インストールされてたります。

普通はそれらのツールを使えば、だいたい事足りるのですが、専用サーバーとかデータセンターとか、なんだかこだわったサーバーですと、接続ホストを制限してたり、いろいろ面倒な事があります。

(面倒とか言ってはいけないんですが)

そこでMySQLの本家というか開発元の「MySQL AB」が提供しているMySQL GUI Tools(英語)を使ってみる。

Zen Cart カスタマイズ

人は忘却する葦である。

とか言う言葉をどっかで聞いた事がある。

Zen Cart のカスタマイズ(どこのファイルいじれば、ここがこうなるとか・・・)、忘れた。

大体の流れは、分かっているんだけど、 その度にいちいちメインから辿ってる自分がまどろっこしい。。

かといって、「たぶんココ!」って、変更したらうまく表示しなかったり。

外部記憶装置が必要みたいです<俺
+Googleデスクトップの脳ミソ版って出ないのかなー