バージョン選択

フォーラム

メニュー

オンライン状況

42 人のユーザが現在オンラインです。 (32 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 42
もっと...

サイト内検索

質問 > 管理機能 > 商品画像が消えてしまいます

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
nekochan
投稿日時: 2017/2/20 21:35
対応状況: −−−
常連
登録日: 2011/6/17
居住地: 千葉県
投稿: 41
商品画像が消えてしまいます
商品画像が消えてしまいます。
EC-Cube3.0.13新規インストール
レンタルサーバー:ファーストサーバ、Zenlogic
Os:Linux
データベース:MySQL5.1.73
Webサーバー:Apache
PHP:5.6.21
プラグイン:あり
カスタマイズ:あり(公開されている普通行われる程度)
<症状>
html/upload/save_imageに登録保存してある全画像データが消失します。

商品画像データは3週間ほど前に一括してFTPでアップしています。暫く何事もなかったのですが3日前、アップしたはずの画像が消失していることに気づきました。save_imageの中のファイルが完全に消失しています。
サーバーの不具合ではないかと、調べてもらいましたが、そちらには何も特に異常はないとのことでした。
再度画像ファイルをアップした所、正常に戻り帰宅し、翌朝確認しましたがフロント画面では問題はありませんでした。
ところが午後2時過ぎから商品データの編集、画像の追加を始めたところ、既に表示されていた画像がみるみる消えてゆきます。
ただちにファーストサーバの方に異常がないか問い合わせたところ、エラーログはなく、外部からファイル破壊のような侵入の形跡もないとのことでした。
問題の時間帯のサーバー上のファイル数の推移を提出してもらったのが下のデータです。
①2016/1/31~2017/2/18 17時頃まで 約44000ファイルで大きな増減はみられず
②2017/2/18 17時頃を境に約20000ファイルまでファイル数が減少
③2017/2/19 14時30分頃を境に約65000ファイルまでファイル数が増加
④2017/2/20 15時頃を境に約20000ファイルまでファイル数が減少
⑤2017/2/20 16時30分頃を境に約44000ファイルまでファイル数が増加

ファイル数44000が大体の正常値です。②でsave_imageの中の画像が完全消失しています。③で際アップロードして復旧した状態です。ここで65000ファイルになっているのは、慌ててアップしたため、バックアップのsave_imageフォルダごとsave_imageの中にアップしてしまい、やむなく追加でフォルダの中身だけアップしたため画像ファイル数が2倍になっています。FileZillaで入れ子のsave_imageフォルダを削除しようとすると、エラーとなって削除できないので放置しました。
④商品データをいじり始めると30分もたたないうちにみるみる画像が消失してしまいました。この時にはuploadディレクトリからsave_imageフォルダごと消えてしまいました(完全神隠し状態)⑤でsave_imageフォルダごとuploadディレクトリにアップロード。
異常が起こるきっかけは大体次のようです。
(1)画像ファイル数が24000以上
(2)画像ファイルの追加等管理画面から操作を加えた時

同様な現象がEC-Cube2.4系の時に報告されていますが、迷宮入り?
http://3dmoscow.ru/an.php?session_new=aHR0cDovL3hvb3BzLmVjLWN1YmUubmV0L21vZHVsZXMvbmV3YmIvdmlld3RvcGljLnBocD90b3BpY19pZD05NjM1JmFtcDtmb3J1bT0xMA$$?

上記2.4系での異常発生のきっかけは、同じ画像を複数商品で参照しているときだそうです。もちろん私の方でも、一部ありますが、それほど多くはありません。

ちなみに同じファーストサーバでEC-Cube2.11.5を運用していますが4年間そのような問題が起きたことはありません。
現在の状態では危なくてサイト公開できません。どなたか、対策を教えて頂けないでしょうか。
umebius
投稿日時: 2017/2/21 12:44
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 商品画像が消えてしまいます
外部からのアクセスの可能性は完全にゼロという前提ですと
(FTP・MySQL・サーバーのコントロールパネル・EC-CUBE管理画面のパスワードは念のため全て変更しておいたほうが良いような気もします)

ファーストサーバ以外のサーバーでそっくりそのまま同じサイトを設置して同様の現象が起こるかどうかなど、原因の切り分けが必要なように思います。

あとはインストールしているプラグインでバグがないかどうか。
サーバーのCronでおかしな定時処理が行われていないかどうか。
ログを取るなりデバッグが必要かと思います。

可能性があるとすれば「商品の削除」時でしょうか。

Admin/ProductController
ここならプラグインなどから全削除操作できるので。(バグでも悪意でも)
$deleteImagesの値をデバッグしてみると良いかもしれません。

public function delete(Application $app, Request $request, $id = null)
    {
        $this->isTokenValid($app);
        $session = $request->getSession();
        $page_no = intval($session->get('eccube.admin.product.search.page_no'));
        $page_no = $page_no ? $page_no : Constant::ENABLED;

        if (!is_null($id)) {
            /* @var $Product \Eccube\Entity\Product */
            $Product = $app['eccube.repository.product']->find($id);
            if (!$Product) {
                $app->deleteMessage();
                return $app->redirect($app->url('admin_product_page', array('page_no' => $page_no)).'?resume='.Constant::ENABLED);
            }

            if ($Product instanceof \Eccube\Entity\Product) {
                log_info('商品削除開始', array($id));

                $Product->setDelFlg(Constant::ENABLED);

                $ProductClasses = $Product->getProductClasses();
                $deleteImages = array();
                foreach ($ProductClasses as $ProductClass) {
                    $ProductClass->setDelFlg(Constant::ENABLED);
                    $Product->removeProductClass($ProductClass);

                    $ProductClasses = $Product->getProductClasses();
                    foreach ($ProductClasses as $ProductClass) {
                        $ProductClass->setDelFlg(Constant::ENABLED);
                        $Product->removeProductClass($ProductClass);

                        $ProductStock = $ProductClass->getProductStock();
                        $app['orm.em']->remove($ProductStock);
                    }

                    $ProductImages = $Product->getProductImage();
                    foreach ($ProductImages as $ProductImage) {
                        $Product->removeProductImage($ProductImage);
                        $deleteImages[] = $ProductImage->getFileName();
                        $app['orm.em']->remove($ProductImage);
                    }

                    $ProductCategories = $Product->getProductCategories();
                    foreach ($ProductCategories as $ProductCategory) {
                        $Product->removeProductCategory($ProductCategory);
                        $app['orm.em']->remove($ProductCategory);
                    }

                }

                $app['orm.em']->persist($Product);

                $app['orm.em']->flush();

                $event = new EventArgs(
                    array(
                        'Product' => $Product,
                        'ProductClass' => $ProductClasses,
                        'deleteImages' => $deleteImages,
                    ),
                    $request
                );
                $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_PRODUCT_DELETE_COMPLETE, $event);
                $deleteImages = $event->getArgument('deleteImages');

                // 画像ファイルの削除(commit後に削除させる)
                foreach ($deleteImages as $deleteImage) {
                    try {
                        $fs = new Filesystem();
                        $fs->remove($app['config']['image_save_realdir'] . '/' . $deleteImage);
                    } catch (\Exception $e) {
                        // エラーが発生しても無視する
                    }
                }

                log_info('商品削除完了', array($id));

                $app->addSuccess('admin.delete.complete', 'admin');
            } else {
                log_info('商品削除エラー', array($id));
                $app->addError('admin.delete.failed', 'admin');
            }
        } else {
            log_info('商品削除エラー', array($id));
            $app->addError('admin.delete.failed', 'admin');
        }

        return $app->redirect($app->url('admin_product_page', array('page_no' => $page_no)).'?resume='.Constant::ENABLED);
    }


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

nekochan
投稿日時: 2017/2/21 16:23
対応状況: −−−
常連
登録日: 2011/6/17
居住地: 千葉県
投稿: 41
Re: 商品画像が消えてしまいます
umebius 様
ご回答ありがとうございます。
まず、当初の状況説明の訂正です。過去の質問(2.4系)に『画像を複数商品で参照するとき発生する』とありますが、私の場合には多くないと書きましたが、間違いでした。規格を設定していますので相当多いです(1商品に規格6個のものもあり)。しかも異常が起きたのはまさに管理画面で規格を設定していた時でした。現象としては過去の質問と同じかもしれません。残念ながらどういう結論になったか不明ですが。
 
$deleteImagesの値のデバッグ
お示しいただいたソースとこちらでインストールしている物が違わないということを確認するということですね。
src/Eccube/Controller/Admin/Product/ProductController.php内のご指摘部分をチェックしましたが、同じでした。

Ec-Cubeの場合アップできるファイル数の上限というのはありますでしょうか?仮にあっても『これ以上入らない』という警告は出てもいきなり既存画像を消すということはないはずですが。
恐れ入ります、もう少しお知恵をお貸しください。

umebius
投稿日時: 2017/2/21 16:30
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 商品画像が消えてしまいます
規格登録に関してですが、規格登録画面は画像には直接は関係無いはずです。

ひとまずインストールしているプラグインの一覧をご教示いただけませんでしょうか。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

umebius
投稿日時: 2017/2/21 16:35
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 商品画像が消えてしまいます
ちなみに管理画面よりCSVによる商品登録は行われていますか?


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

nekochan
投稿日時: 2017/2/21 19:41
対応状況: −−−
常連
登録日: 2011/6/17
居住地: 千葉県
投稿: 41
Re: 商品画像が消えてしまいます
umebius様
現在インストール中のプラグインは下記の通りです。
商品データは数回に分けてcsv登録しています。データ量が少ないカテゴリーでは問題なかったのですが大きなカテゴリーで500エラーが出たのでファーストサーバに問い合わせたところ.htaccessに下記の1行を加えるように言われ解決しました。メモリ量は64Mから128Mと増やしアップロードで500エラーが出なくなる量にしました。もっと大きい方がいいかもしれませんが。
php_value memory_limit 192M



SEO管理プラグイン
無効にする / 削除 3.0.4
SEO3

メール設定プラグイン (停止中)
有効にする / 削除 1.0.0
MailTemplateEditor

OrderPdf 0.0.2
無効にする / 削除
OrderPdf

おすすめ商品管理プラグイン
無効にする / 削除 1.0.1
Recommend

ショッピングガイド
無効にする / 削除 1.1.1
ShoppingGuideitoben


ピックアップ商品管理プラグイン (停止中)
有効にする / 削除 1.0.1
Pickup


売上ランキング (停止中)
有効にする / 削除 1.0.0
SalesRanking


定休日管理プラグイン
無効にする / 削除 1.0.4
Holiday

ファイルを選択
アップロード
新商品自動表示
無効にする / 削除 1.1.1
NewitemAuto


最近チェックした商品 (停止中)
有効にする / 削除 1.1.1
CheckedItem


関連商品プラグイン
無効にする / 削除 0.0.2
RelatedProduct


以上よろしくお願い申し上げます。
umebius
投稿日時: 2017/2/22 12:04
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 商品画像が消えてしまいます
関連商品プラグインは特におかしいところはないと思うので、
プラグインで万一にもこのような可能性があるとすればSEO管理プラグイン、ピックアップ商品管理プラグインでしょうか。(弊社で未調査、かつ、商品編集ページに影響している可能性があるプラグインという意味でです)
ピックアップ商品管理プラグインは公開配布されているプラグインでしょうか?オーナーズストアで見かけませんでした。


CSVインポートは画像削除はしないので関係ありませんでした。申し訳ございません。


ファイルの総個数については、EC-CUBEがどうというより、レンタルサーバーで制限がある会社は良くあります。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

nekochan
投稿日時: 2017/2/23 13:51
対応状況: −−−
常連
登録日: 2011/6/17
居住地: 千葉県
投稿: 41
Re: 商品画像が消えてしまいます
umebius様
お調べありがとうございます。
ピックアップ商品管理プラグインはテンプレートを購入したときセットでついていたものです。おすすめ商品とほとんど同じ機能なので外してもいいかと思っています。
アップロードするファイル数についてはファーストサーバの方では(契約容量を越えなければ)制限はないということです。容量についていえば現状まったく問題ありません。
nekochan
投稿日時: 2017/2/28 18:56
対応状況: −−−
常連
登録日: 2011/6/17
居住地: 千葉県
投稿: 41
Re: 商品画像が消えてしまいます
画像消失の原因がわかりました。以下の状況で起こります。
EC-Cube3では商品データをcsvで一括登録する時、画像データは複数個でも一括登録できます。その際画像ファイルはカンマ区切りで入力します。
この時、不要な捨てカンマがあるとsave_imageフォルダにある全画像消失の原因になります。
<例>
A.jpg,B.jpg,C.jpg が正しい記述ですが、A.jpg,B.jpg,C.jpg, とすると最後のカンマにより、もう1個画像があると判断されるようです。
アップロード後、管理画面で見ると画像3個の後にnoimageのアイコンが表示されます。フロント画面にもnoimageのアイコンが表示されます。これが目障りだからと管理画面でnoimageの画像を×印を押し削除すると、全画像ファイルの消失が起こります。
これを修正するためには、その商品を削除して入れなおすか、数が多い場合にはcsvファイルで画像のフィールドを入念にチェックして上書きアップロードするしかないようです。
カンマがあっても実際に画像ファイルがなければ、”空”とみなすようにしてもらえば助かるのですが。
umebius
投稿日時: 2017/3/1 15:05
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 商品画像が消えてしまいます
ありがとうございます、再現確認いたしました。
報告しておきます。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,287名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.