Webの便利屋さん Reis レイズ

あさーく ひろーく Webで便利屋やってます

osCommerce alter PHP5化 MySQL5化

2009年8月 29日 Posted by saga

この前の記事に対して問い合わせが結構あったので、osCommerce alter をとりあえずphp5・MySQL5で動かす手順をご紹介します。

まずは php5に対応する作業です。
もう既にネット上に情報がたくさんあるのですが、要は

①$this でアサインされているものの this を取り除く作業
②.htaccessの修正
③PHPのsafe_modeをOffにする

①は以下の内容を修正します。
(左修正前、右修正後)

$this->h_smarty_obj  → $h_smarty_obj
$this->smarty_obj   → $smarty_obj
$this->box_smarty_obj → $box_smarty_obj
$this->np_smarty_obj  → $np_smarty_obj
$this->fe_smarty_obj  → $fe_smarty_obj
$this->f_smarty_obj  → $f_smarty_obj

$this->h_smarty_obj は includes/header.php に、 f_smarty_obj… は includes/footer.phpに、、、といった具合に修正していくわけですが、できれば phpエディター などの全文検索ができるPHPエディタなどで全文検索し、漏れが無いようにします。

漏れがあると htaccess の display_errors を On にしていると教えてくれますので、その都度修正しましょう。
②の.htaccessはphp4用にコーディングされたものでもphp5で動くようにしたり、文字コードUTF-8が主流の中でEUCで動かしたりしたいという内容を記述します。

AddDefaultCharset EUC-JP
php_flag output_buffering Off
php_flag register_globals On
php_flag register_long_arrays On
php_flag display_errors Off

php_value default_charset EUC-JP
php_value mbstring.detect_order auto
php_flag  mbstring.encoding_translation Off
php_flag  mbstring.func_overload Off
php_value mbstring.http_input auto
php_value mbstring.http_output EUC-JP
php_value mbstring.internal_encoding EUC-JP
php_value mbstring.language Japanese
php_flag  mbstring.strict_detection Off
php_value mbstring.substitute_character none
php_value session.referer_check www.ショップURL.com

③が一番の問題です。
safe_mode は共有サーバーなどでは変更ができないからです。
自分でサーバーを立てていたり、専用サーバーなら safe_mode をOffにすればいいのですがそういう人が全てではありません。

こういう時は phpをCGIモードで動かすという手があります。
htaccessファイルに記述を増やすのですが、これは検証していません。

AddHandler application/x-httpd-phpcgi .php

↑これはPHPをWEBサーバーのモジュールとして動かすのではなくてCGIとして読み込んで使用するという設定になります。
どなたかosCommerce alterをこれでやった人いませんかね?
てか今度試してみます。

次はMySQL5でも動くようにします。
実は問い合わせはこれが一番多いものでした。
これは以前にosCommerce alterのMLで掲載されたものを参考にしています。
(簡単に言うとコピペです。入力が面倒だった。。。)

以下のファイルの from ~ left join 間を () で括る。例 from ( ~ ) left join

account_history.php
advanced_search_result.php
checkout_process.php
default.php
products_new.php
product_reviews_info.php
product_reviews.php
popup_image.php

includes/classes/order.php
includes/modules/featured.php
includes/functions/general.php
includes/boxes/manufacturer_info.php

admin/languages.php
admin/orders.php
admin/products_attributes.php
admin/orders_csv.php
admin/customers.php
admin/includes/functions/general.php
admin/geo_zones.php
admin/edit_orders.php
admin/popup_image.php
admin/tax_rates.php

ありがとう、白石さん^^;

さて、実は問い合わせというのは

「left join 間をどうやって()でくくるのか?」

ということでした。
left join はMySQLに投げるクエリーの中で使われています。
たとえばdefault.php内の具体的なものではこんな感じです。

// We show them all
$listing_sql = “select ” . $select_column_list . ” p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, p.products_qda, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from (( ” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_PRODUCTS . ” p ) left join ” . TABLE_MANUFACTURERS . ” m on p.manufacturers_id = m.manufacturers_id, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c ) left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id where p.products_status = ‘1′ and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = ‘” . $languages_id . “‘ and p2c.categories_id = ‘” . (int)$current_category_id . “‘”;// alter200712
}

from ( ******** ) left join  という風に区切るんですが、複数になった場合は↑の例のように

from (( *********) left join ********* ) left join

↑このようにくくります。
てか長々とMLからコピペして書かなくても最後の数行だけでよかったような。。。

osCommerce いつできるのやら

2008年5月 11日 Posted by saga

最近wordpressばかりいじっています。
しかしosCommerceでの依頼も2件たまっています。

これはがんばらねば!!

後やることと言えば(おもいっきし個人的メモですねw)、

・php5 MySQL5対応
・safe mode on 対応

くらいでしょうか。

とりあえず5月中には完成させます。

ゆっくり進行中 osCommerceの改良

2008年3月 29日 Posted by saga

osCommerce alter2 pre0.0.5 のパッケージに SQLインジェクション対策のアップデートをして、既存のバグに対応したものをとりあえず作り直しました。

しっかし色々やってくと欲が出るもんですね^^;

グリニッジの開発部長さんが、また開発を再開してくれると本当に嬉しいのですが^^;
ソースを見てるとなるほどと関心させられます。

私にもあれだけのスキルがあったらなぁw

とりあえず今目指しているのは

・safe mode onでの稼動
・tableタグの消去
・php5 MySQL5での稼動

最初は気づかずにsafe modeで動かしてたんですが、mail()関数でエラーが出て気づきましたw
影響のある関数を確認していかなくちゃですねー。

tableタグの消去は完全に消すのはどうかなぁーなんて思ってます。
面倒と言えばそれが理由なんですがw
とりあえず全て消去というわけではなく、後のデザイン変更がしやすいように極力使わないようにしたいと思ってます。
せっかくテンプレートがありますしね。
(もう妥協してるような気がする、、、)

php5 & MySQL5でも稼動させるというのは、php5 & MySQL5用のスクリプトにしていくという意味ではありません。
互換で動かしたりして、とりあえず5で動くようにするというものですw
できればパーマリンクなんかもやりたいんですが、、、
そっちって全然わかんないんですよねぇ^^;
勉強しよっと。

急いで開発やりたいのですが、他の案件があってなかなか作業できません。
1週間に3時間程度しか触れていないのが現状です。

時間は自分で作るもの!
でもそれが簡単にできりゃもっと大きな人間になれてただろうなぁw

osCommerce alterのSQLインジェクション対策ファイルをリリースしたとき、数人の人に

「php4だなんて呑気なものだね」

といわれました^^;

でも実際にphp4,MySQL4な環境はまだ多いわけで、実際に使っている人に少しでも役に立てばと思い公開した次第です。
osCommerce alterをいじったバージョンのパッケージ化のリリースは見送るということを以前の記事に書きました。

実際にこちらでリリースすることはかなり先になるか、もしくはリリースの予定自体が無いというのが現状です。

昨日帰宅後、既に日付は今日になっていたのですが、少しosCommerce alter をいじり始めました。
というのも早めに稼動させたいネットショップが出てきたからです。

以前、alterのMLでも話題になっていた php5 & MySQL5 で稼動させるためのハックを参考にとりあえずphp5 & MySQL5で動くようにし、現状把握しているバグに対応しようと思っています。
とりあえず互換で動かすわけですが^^;
だってosC3出たらそっちいけばいいわけですしね。

実際にネットショップとして稼動させる頃には他にも

・テーブルタグの消去
・管理画面におまけ機能を追加
・文字コードをEUCからUTF8へ変更
・静的URL表現機能の追加

までやってから稼動させます。
オープンは4月下旬を予定しているのでこっちも急がないといけません。

なぜosCommerceにそこまで執着するのか?と思われる方もいるでしょうね^^;
僕にとっては既にあるモジュールが魅力的に見えるから、、、というのも答えのうちのひとつです。

magentoでのショップ構築は同時進行していきますが、zen cartの作業は5月以降になりそうです。