EC-CUBE2.11.1でAPCの動作を確認してみる

2011年05月31日 • works10 CommentsRead More »

EC-CUBE2.11.1でAPCの動作を確認してみるec-cube-banner

EC-CUBEはそれなりに負荷の高いアプリです
APCを使って少しでも負荷を下げたいところですが2.4.4の時はDB周りがAPCに対応できないと言う問題がありました

EC-CUBE2.11.1ではどうなったのか確かめてみたいと思います

PHP5.2.9+APC3.0.19の場合

だーいぶわかりにくいですがMDB2.phpとか含まれているので動いている模様

PHP5.3.6+APC3.1.6の場合

画面の一番下にf見慣れたFatal errorが

Fatal error: Class 'MDB2' not found in /var/www/apps/eccube-2.11.1/data/class/SC_Query.php on line 76
 
Call Stack:
    0.0820    2554744   1. SC_Helper_Session>sfSessWrite() /var/www/apps/eccube-2.11.1/data/class/helper/SC_Helper_Session.php:0
    0.0820    2555336   2. SC_Query>SC_Query() /var/www/apps/eccube-2.11.1/data/class/helper/SC_Helper_Session.php:85
 
Dump $_GET
   $_GET['transactionid'] = '2da42b0d905ea0063638499b3be5cbf1cd29b3a2'
   $_GET['product_id'] = ''
   $_GET['category_id'] = ''
Dump $_POST

このエラーが出ているとなにが起きるかというと、SESSIONへの書き込みが出来ないのでカゴの中に商品が入らなくなってしまいます。

動作するように修正してみる

# vim data/class/pages/LC_Page.phpのfunction destroy() に1行足します

session_write_close();

すると、エラーが消えました(*´Д`*)
これコミットしておこうかな・・・

ちゃんとカゴにも商品が入るようにヽ(´ー`)ノ
なんでこれで直るのかはPHPのSESSIONの書き込みが変わったことが原因なのですが省略します

APCの管理画面にもMDB2.phpやSC_Helper_Session_Ex.phpが出ているのでちゃんと動いている模様

と、いうわけでEC-CUBE2.11.1でAPCは1行追加すれば問題なく動く、と思います

#2012/03/08追記

EC-CUBE2.11.5ではAPCをONにしていると管理画面が500エラーになり開けないことを確認しています
上記修正内容で問題なく動くことを確認していますがPHP5をお使いの場合

EC-CUBE2.11系のパフォーマンスを185%あげる4つの手法 | のぶろぐに書いた方法を利用しますとよりパフォーマンスがよくなります

SC_Helper_Session_Exに追記します

function __destruct() {
         session_write_close();
     }

このエントリーをはてなブックマークに追加 EC-CUBE2.11.1でAPCの動作を確認してみる 4354d670-256f-012f-0630-12313f00aced

関連記事してそうな記事

ec-cube-bannerEC-CUBE2.11.0リリース記念、パフォーマンス60%向上は本当か試してみた
ec-cube-bannerEC-CUBEのモバイルサイトにQRコードを埋め込もうとして非常に苦労した件
PHPで冗長化したコードを検出できるPHPCPDを使ってEC-CUBEのコミッターをするよ
EC-CUBEインストール画面1EC-CUBE2.11.0-betaがリリースされたのでレビューしてみる
EC-CUBEの帳票出力機能はIE6に対応していない

同じカテゴリーの最新記事

文字崩れhomebrewを使ってRictyを導入してみた
Imagickの基本的な使い方
ec-cube-bannerDOCOMOのSSLで問題が起きたのでContent-Lengthを出力するようにした話
2391747442_eaedaa1ff4_m1facebookで重要なアップデートのみにしたら元に戻せなくなった
「YARPP」と「Auto Post Thumbnail」を使って関連記事に画像を表示しつつ、画像がない場合はno-imageを表示してみた | のぶろぐ「YARPP」と「Auto Post Thumbnail」を使って関連記事に画像を表示しつつ、画像がない場合はno-imageを表示してみた

Tags: , ,

  • MAIMAX

    設定してみましたが、エラーが消えません。

    もしよろしかったら、場所が合っているか教えてください。

    function destroy() {
    // 一定時間以上かかったページの場合、ログ出力する。
    // エラー画面の表示では $this->timeStart が出力されない
    if (defined(‘PAGE_DISPLAY_TIME_LOG_MODE’) && PAGE_DISPLAY_TIME_LOG_MODE == true && isset($this->timeStart)) {
    $timeEnd = SC_Utils_Ex::sfMicrotimeFloat();
    $timeExecTime = $timeEnd – $this->timeStart;
    if (defined(‘PAGE_DISPLAY_TIME_LOG_MIN_EXEC_TIME’) && $timeExecTime >= (float)PAGE_DISPLAY_TIME_LOG_MIN_EXEC_TIME) {
    $logMsg = sprintf(“PAGE_DISPLAY_TIME_LOG [%.2fsec]“, $timeExecTime);
    GC_Utils_Ex::gfPrintLog($logMsg);
    session_write_close();

    }
    }

    }

  • のぶ

    session_write_close();を書く場所が違うと思います

    function destroy() {
    // 一定時間以上かかったページの場合、ログ出力する。
    // エラー画面の表示では $this->timeStart が出力されない
    if (defined(‘PAGE_DISPLAY_TIME_LOG_MODE’) && PAGE_DISPLAY_TIME_LOG_MODE == true && isset($this->timeStart)) {
    $timeEnd = SC_Utils_Ex::sfMicrotimeFloat();
    $timeExecTime = $timeEnd – $this->timeStart;
    if (defined(‘PAGE_DISPLAY_TIME_LOG_MIN_EXEC_TIME’) && $timeExecTime >= (float)PAGE_DISPLAY_TIME_LOG_MIN_EXEC_TIME) {
    $logMsg = sprintf(“PAGE_DISPLAY_TIME_LOG [%.2fsec]“, $timeExecTime);
    GC_Utils_Ex::gfPrintLog($logMsg);

    }
    }
    session_write_close();// ←一番下に
    }

    ただし、この記事を書いた後にここだと少しパフォーマンスに問題が出るかもしれないなーと悩んでいたりもします

  • http://drsupple-usa.com/ MAIMAX

    お返事ありがとうございました。

    一番下に書いてみたところ、違うエラーは出ますが  システムエラーの表示はでなくなりました・

    • のぶ

      ちなみにどんなエラーが出ていますか?

  • http://drsupple-usa.com/ MAIMAX

    こんなエラーです

    Fatal error: https://drsupple-usa.com/products/detail.php?product_id=11 SERVER_ADDR: 208.117.46.101 REMOTE_ADDR: 202.229.164.19 USER_AGENT: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2 SQL: PREPARE mdb2_statement_mysql_13c4709a22d9f0ee47868c3aa313304e1b76f1ffca FROM ‘SELECT category_id FROM dtb_product_categories WHERE product_id = ? ‘ PlaceHolder: array ( 0 => 11, ) MDB2 Error: unknown error _doQuery: [Error message: Could not execute statement] [Last executed query: EXECUTE mdb2_statement_mysql_13c4709a22d9f0ee47868c3aa313304e1b76f1ffca USING @0] [Native code: 1615] [Native message: Prepared statement needs to be re-prepared] /home/www/drsupple-usa.com/products/detail.php 34:LC_Page_Products_Detail_Ex->process /home/www/drsupple-usa.com/data/class_extends/page_extends/products/LC_Page_Products_Detail_Ex.php 56:LC_Page_Products_Detail->process /home/www/drsupple-usa.com/data/class/pages/products/LC_Page_Products_Detail.php 84:LC_Page_Products_Detail->actio in /home/www/drsupple-usa.com/data/class/SC_Query.php on line 909

    • のぶ

      SQLのエラーが出ていますね・・・これはAPCをoffにすると出ないのでしょうか?

  • http://drsupple-usa.com/ MAIMAX

    すみません。
    PHPなど全く分からなくて、、

    APCをOFFにするにはどのようにしたらよいのでしょうか。

    また、OFFにしたことで なにか 機能的に使えなくことはございますか。

    現在の APCの設定環境です。

    apc.cache_by_default On On
    apc.canonicalize On On
    apc.coredump_unmap Off Off
    apc.enable_cli Off Off
    apc.enabled On On
    apc.file_md5 Off Off
    apc.file_update_protection 2 2
    apc.filters no value no value
    apc.gc_ttl 3600 3600
    apc.include_once_override Off Off
    apc.lazy_classes Off Off
    apc.lazy_functions Off Off
    apc.max_file_size 1M 1M
    apc.mmap_file_mask no value no value
    apc.num_files_hint 1024 1024
    apc.preload_path no value no value
    apc.report_autofilter Off Off
    apc.rfc1867 Off Off
    apc.rfc1867_freq 0 0
    apc.rfc1867_name APC_UPLOAD_PROGRESS APC_UPLOAD_PROGRESS
    apc.rfc1867_prefix upload_ upload_
    apc.rfc1867_ttl 3600 3600
    apc.serializer default default
    apc.shm_segments 1 1
    apc.shm_size 8M 8M
    apc.slam_defense On On
    apc.stat On On
    apc.stat_ctime Off Off
    apc.ttl 0 0
    apc.use_request_time On On
    apc.user_entries_hint 4096 4096
    apc.user_ttl 7200 7200
    apc.write_lock On On

  • http://drsupple-usa.com/ MAIMAX

    すみません。
    apcモードOFFにしたのですが、エラーは変わりませんでした。

    • のぶ

      なるほど、APCがらみのエラーではないみたいですね。
      なにかカテゴリーのカスタマイズなどしていればそこが原因かもしれません

      これ以上はソースをひととおり眺めないと解決できそうにありません;

  • http://drsupple-usa.com/ MAIMAX

    ありがとうございます。

    カテゴリーのカスタマイズしてます。

    それが原因なのかもですねぇ、、

Top