EC-CUBE」カテゴリーアーカイブ

さくらインターネットの共用サーバでEC-CUBEのモバイル版を動かす

現在運用中のEC-CUBEのサイトがある。

さくらインターネットの共用サーバで動作している。

で、今まではPCサイトのみで動作していたのだが、モバイル版もカスタマイズして使えるようにして欲しいと。

専用サーバの場合、ゴリゴリとサーバ自体の設定をいじれるから問題無いのだが、さくらの共用サーバはそうもいかない。

インストールされた状態のままでもうまく動かない。

色々やって、うまく動くようになったので、備忘録。

1) SC_DbConn.phpの修正(data/class/SC_DbConn.php)

DB接続部分でなにやらエラーが出てうまく動かなかったので、コンストラクタのDB接続部分をこんな感じで修正。

// 既に接続されていないか、新規接続要望の場合は接続する。
if(!isset($objDbConn->connection) || $new) {
if($dsn != "") {
$objDbConn = DB::connect($dsn, $options);
$this->dsn = $dsn;
// ここから下3行を追加
$buf = $objDbConn->prepare('SET NAMES utf8');
$objDbConn->execute($buf);
mysql_set_charset("utf8");
} else {
if(defined('DEFAULT_DSN')) {
$objDbConn = DB::connect(DEFAULT_DSN, $options);
$this->dsn = DEFAULT_DSN;
} else {
return;
}
}
}

2) php.iniをばらまく

さくらサーバの場合、html/mobile配下に設置されている.htaccessが効かないので、php.iniにして、その配下のディレクトリ全てにばらまく。

$ cd html/mobile
$ mv .htaccess .htaccess.bk
$ vi php.ini
mbstring.language=Japanese
output_handler=null
mbstring.encoding_translation=Off
magic_quotes_gpc=Off
mbstring.internal_encoding=UTF-8
variables_order=EGPS
session.auto_start=Off
session.use_trans_sid=On
$ cp ./php.ini ./cart/
$ cp ./php.ini ./contact/
$ cp ./php.ini ./entry/
$ cp ./php.ini ./forgot/
$ cp ./php.ini ./frontparts/bloc/
$ cp ./php.ini ./guide/
$ cp ./php.ini ./mypage/
$ cp ./php.ini ./products/
$ cp ./php.ini ./regist/
$ cp ./php.ini ./shopping/
$ cp ./php.ini ./unsupported/
$ cp ./php.ini ./user_data/

とりあえず、こんな感じでうまく動くようになりました。

でわ。

IEでの納品書PDF表示障害(Ver2.4.0)

管理画面の受注管理の検索一覧より、各受注の帳票をPDFで出力する事が出来ます。

さて、その帳票(納品書)をダウンロードせずに、ブラウザからPDFを開いた場合、IEだとエラーが発生し、表示出来ません。

こんなエラーメッセージが出ます。

「この文書を開くときにエラーが発生しました。ファイルが壊れています。修復できませんでした。」

この障害を回避する為には、

data/pdf/fpdf.php

を以下のよう編集する必要があります。

/* 1024行目付近 */
switch($dest)
{
case 'I':
//Send to standard output
if(ob_get_contents())
$this->Error('Some data has already been output, can\'t send PDF file');
if(php_sapi_name()!='cli')
{
//We send to a browser
header('Content-Type: application/pdf');
if(headers_sent())
$this->Error('Some data has already been output to browser, can\'t send PDF file');
// IEでPDFを表示出来るように追加 Start
header('Cache-Control: ');
header('Pragma: ');
// IEでPDFを表示出来るように追加 End
header('Content-Length: '.strlen($this->buffer));
header('Content-disposition: inline; filename="'.$name.'"');
}
echo $this->buffer;
break;
case 'D':
//Download file
if(ob_get_contents())
$this->Error('Some data has already been output, can\'t send PDF file');
if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
header('Content-Type: application/force-download');
else
header('Content-Type: application/octet-stream');
if(headers_sent())
$this->Error('Some data has already been output to browser, can\'t send PDF file');
// IEでPDFを表示出来るように追加 Start
header('Cache-Control: ');
header('Pragma: ');
// IEでPDFを表示出来るように追加 End
header('Content-Length: '.strlen($this->buffer));
header('Content-disposition: attachment; filename="'.$name.'"');
echo $this->buffer;
break;
case 'F':
//Save to local file
$f=fopen($name,'wb');
if(!$f)
$this->Error('Unable to create output file: '.$name);
fwrite($f,$this->buffer,strlen($this->buffer));
fclose($f);
break;
case 'S':
//Return as a string
return $this->buffer;
default:
$this->Error('Incorrect output destination: '.$dest);
}

これで、IEでも正常に納品書PDFが表示出来ました。

でわ。

商品詳細画面にて「Warning: getimagesize」が表示される問題の回避策

今回は、EC-CUBE 2.4.0 です。

商品詳細画面を表示すると、以下、表示されました。

Warning: getimagesize() [function.getimagesize]: Filename cannot beempty in /home/sodc/www/eccube-2.4.0/data/class/pages/products/LC_Page_Products_Detail.php on line 282

原因は、商品詳細画面にて使用する、商品の拡大画像が登録されていないから。

管理画面で商品の拡大画像を登録すれば、上記表示されません。

しかしながら、商品の拡大画像をいちいち登録していくのはナンセンスなので、ちょろっとソースを修正してい対応します。

# cd eccube/data/class/pages/products

# vi LC_Page_Products_Detail.php

// 以下をコメントアウト

Line 276

  // 拡大画像のウィンドウサイズをセット

  if (isset($this->arrFile[“main_large_image”])) {

    $image_path = IMAGE_SAVE_DIR . basename($this->arrFile[“main_large_image”][“filepath”]);

    } else {

      $image_path = “”;

    }

    list($large_width, $large_height) = getimagesize($image_path);

    $this->tpl_large_width = $large_width + 60;

    $this->tpl_large_height = $large_height + 80;

Line 500

    // 拡大画像のウィンドウサイズをセット

    if (!empty($this->arrFile[“main_large_image”])) {

      list($large_width, $large_height) = getimagesize(IMAGE_SAVE_DIR . basename($this->arrFile[“main_large_image”][“filepath”]));

    }

    $this->tpl_large_width = isset($large_width) ? $large_width + 60 : 0;

    $this->tpl_large_height = isset($large_height) ? $large_height + 80 : 0;

これでWarningの表示はなくなります。

そんな感じで。

でわ。

EC-CUBE 2.4.1の文字化け回避

ちょっくらEC-CUBEを触る事がありまして、最新版を入れたところ文字化けしましてね。

UTF-8でうまくいかなかったので、その回避の為の設定を記載します。

※あまり詳しくは書かないです

■環境

OS   : CentOS 5

Apache : 2.2.3

PHP   : 5.1.6

MySQL  : 5.0.22

1) EC-CUBEのファイルを展開する

# unzip eccube-2.4.1.zip

2) PHPの設定

# cd eccube-2.4.1/html

# vi .htaccess

php_value default_charset UTF8

php_flag magic_quotes_gpc Off

php_flag auto_detect_line_endings On

php_value output_handler mb_output_handler

php_value mbstring.language Japanese

php_flag mbstring.encoding_translation On

php_value mbstring.internal_encoding UTF-8

php_value mbstring.detect_order auto

php_value mbstring.substitute_character none

php_value mbstring.http_input auto

php_value mbstring.http_output pass

php_value upload_max_filesize 5M

3) MySQLでDBと接続ユーザを作成

# mysql -u root

mysql> create database test_db default character set utf8;

Query OK, 1 row affected (0.00 sec)

mysql> grant all on test_db.* to test_db_user@localhost identified by ‘パスワード’;

Query OK, 0 rows affected (0.04 sec)

4) ちょっとApacheの設定

DocumentRoot:eccube-2.4.1/html

に設定

5) EC-CUBEのDBアクセスファイルを編集

# cd eccube-2.4.1/data/class/

# vi SC_DbConn.php

————————————————-

66行目付近にこれを追加

if (DB_TYPE == ‘mysql’) {

$objDbConn->query(‘SET NAMES utf8’);

}

————————————————-

6) EC-CUBEのインストール

http://example.com/install/index.php

これで大丈夫なはず・・・

でわ。