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からコピペして書かなくても最後の数行だけでよかったような。。。

3 Responses to “osCommerce alter PHP5化 MySQL5化”

  1. Qve Says:

    いつも(一方的に)お世話になってます。

    私もphp5+MySQL5で動作させなければならなくなり、いろいろ手を入れてなんとか動作しています。

    > AddHandler application/x-httpd-phpcgi .php
    についてですが、動作はしました。
    しかし、アクセスが多いサイトでこれをやってしまうとCGIリソースを食いつぶしてしまい、
    > CGIWrap Error: Real UID could not be changed
    のようなエラーを吐いてサイトが止まってしまいます。
    ですので、必要なファイルに対してのみ .htaccess に記述するのが、現状では最良の手段かも。

    AddHandler application/x-httpd-php5cgi .php

    上記のような書式で対象ファイルを追加していくことで動作するようになります。

    とりあえず、メール送信の動作をするファイルは、必ずといっていいほどsafe_modeのエラーが……。

    あと、
    > from (( *********) left join ********* ) left join
    の件も悩みました。途中でifとか挟んでいると「?」となり、検索ができなくなったりしてました。

  2. saga Says:

    > AddHandler application/x-httpd-phpcgi .php

    おぉ 動作しましたか。

    >しかし、アクセスが多いサイトでこれをやってしまうとCGIリソースを食いつぶしてしまい、
    > CGIWrap Error: Real UID could not be changed

    なるほど^^;

    >とりあえず、メール送信の動作をするファイルは、必ずといっていいほどsafe_modeのエラーが……。
    私はosCommerceを入れてるディレクトリだけ
    php_admin_flag safe_mode off
    とかにしています。
    そうしないとパラメーターも使えないもので^^;

    > from (( *********) left join ********* ) left join
    の件も悩みました。途中でifとか挟んでいると「?」となり、検索ができなくなったりしてました。
    ↑こちらはもう解決したのでしょうか?

  3. Qve Says:

    > php_admin_flag safe_mode off
    おぉ、なるほどー!と思って早速試してみたんですが、Safemodeの変更は許可されていないらしく、
    Internal Server Error
    となりました。残念です。

    > from (( *********) left join ********* ) left join
    はい、解決済みです。途中で if ~ else ~else が入っていたため、
    if (((( hoge ) left join ( fuga) left join
    else piyopiyo ) left join
    else piyopiyopiyo ) left join
    のような部分で凡ミスをしていたためでした(笑)

    今のところ正常動作しているようです。
    あぁ、サーバー選びから慎重にならざるを得ない状態ですね…(笑)

コメントをどうぞ