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


2009年12月 3日 10:09 am
いつも(一方的に)お世話になってます。
私も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とか挟んでいると「?」となり、検索ができなくなったりしてました。
2009年12月 3日 10:42 am
> 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とか挟んでいると「?」となり、検索ができなくなったりしてました。
↑こちらはもう解決したのでしょうか?
2009年12月 4日 5:00 pm
> 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
のような部分で凡ミスをしていたためでした(笑)
今のところ正常動作しているようです。
あぁ、サーバー選びから慎重にならざるを得ない状態ですね…(笑)