管理画面から「ファイル」のページを操作できなくなりました。

2019年6月19日 at 10:41

初心者です。よろしくお願いします。
管理画面から画像をアップロードしようと「ファイル」を選択すると”予期せぬエラー”という表示になり操作ができません。concrete5から画像をアップロードできない状態になってしまいました。
キャッシュをクリアしても同様でした。
それまでは問題なく画像をアップロードできていたようなのですが、私自身が操作していたわけではなく、どのような操作によりエラーがでるようになったのかは確認が難しい状態です。
concrete5のログなどを確認しましたが、何を意味しているのか理解できず解決できません・・・。
また、ロリポップにエラーログというのが確認できないか問い合わせたところ、問題のディレクトリを尋ねられ答えましたが、担当者さんからはCMSからでないと確認できないようですとの回答でした。
解決の手段がわかる方がいらしたら、よろしくお願いします。


〇サーバー:ロリポップ
〇環境情報:
# concrete5 Version
Core Version - 8.3.2
Version Installed - 8.3.2
Database Version - 20180122213656

# concrete5 Packages
Cycle2 Slide Show (1.0.2), Easy Image Gallery (1.4.2), Easy Image Slider (1.2), Genesis Theme (1.1.9), Honest Websites Back To Top (1.0.1), Image Link With Content (1.1), Simple Gallery (1.0.7), Vivid Carousel (1.0.1), Zoomer (1.0.1)

# concrete5 Overrides
None

# concrete5 Cache Settings
Block Cache - On
Overrides Cache - On
Full Page Caching - On - If blocks on the particular page allow it.
Full Page Cache Lifetime - Every 6 hours (default setting).

# Server Software
Apache

# Server API
apache2handler

# PHP Version
5.6.21

# PHP Extensions
apache2handler, bcmath, bz2, calendar, Core, ctype, curl, date, dom, ereg, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, imagick, imap, intl, ionCube Loader, json, libxml, mbstring, mcrypt, mhash, mysql, mysqli, OAuth, openssl, pcre, PDO, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, Phar, posix, Reflection, session, SimpleXML, soap, sockets, SPL, sqlite3, standard, tidy, tokenizer, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib

# PHP Settings
max_execution_time - 120
log_errors_max_len - 1024
max_file_uploads - 20
max_input_nesting_level - 64
max_input_time - 120
max_input_vars - 1000
memory_limit - 128M
post_max_size - 100M
sql.safe_mode - Off
upload_max_filesize - 100M
mysql.max_links - Unlimited
mysql.max_persistent - Unlimited
mysqli.max_links - Unlimited
mysqli.max_persistent - Unlimited
pcre.backtrack_limit - 1000000
pcre.recursion_limit - 100000
pgsql.max_links - Unlimited
pgsql.max_persistent - Unlimited
session.cache_limiter - no value
session.gc_maxlifetime - 7200
soap.wsdl_cache_limit - 5
opcache.max_accelerated_files - 2000
opcache.max_file_size - 0
opcache.max_wasted_percentage - 5

〇管理画面>レポート>ログ:
2019/06/18 10:51:10 例外 admin Exception Occurred: /home/users/2/lolipop.jp-XXXXXXXXXX/web/XXXXXXXXXX/XXXXXXXXXX/concrete/src/File/Search/Result/Item.php:26 Invalid argument supplied for foreach() (2)

〇デバック設定>エラーの出力表示を選択した状態で問題のページを表示した時の画面:
添付画像

添付: 0618error.jpg
タグ:

Re: 管理画面から「ファイル」のページを操作できなくなりました。

2019年6月19日 at 16:35
concrete5のアップデートを行いましたが症状は変わりませんでした・・・。

# concrete5 Version
Core Version - 8.5.1
Version Installed - 8.5.1
Database Version - 20190301133300
 

Re: 管理画面から「ファイル」のページを操作できなくなりました。

2019年6月24日 at 11:28
その後、以下の対応をしました。

1.最後にアップロードされた画像ファイルが、本来であればサムネイル画像が作成されるところ、これだけは作成されずに保存されていたようでした。
アップロードの途中でエラーで作成されなかったものと思い、以下のパスにサムネイル画像を作成・アップロードしました。
/application/files/thumbnails/file_manager_detail_2x/8115/5937/5065/IMG00620.jpg
/application/files/thumbnails/file_manager_detail/8115/5937/5065/IMG00620.jpg
/application/files/thumbnails/file_manager_listing_2x/8115/5937/5065/IMG00620.jpg
/application/files/thumbnails/file_manager_listing/8115/5937/5065/IMG00620.jpg

しかし、エラーメッセージは消えませんでした。

2.エラーの出るPHPからのログ出力
エラーの出ているとされる以下のパスにある Item.php のソースを編集し、処理対象となるデータとその発生箇所を突き止めるため、手動でのログ出力を試みました。
/concrete/src/File/Search/Result/Item.php
log.txtには適切なパーミッションを設定しているにもかかわらず、何も書き込まれませんでした。
不思議に思って設定画面のデバッグ設定を「エラーのデバック出力」に変更したところ、「ファイル」ページのデバッグ画面にはItem.phpの変更したソースが反映されていませんでした。(現在はデバッグ設定、Item.php のソースともに戻しています)
Concrete5のキャッシュをクリアしても、これは変わりませんでした。


補足ですが、同サーバーでもう一つWebサイトを運用しています。こちらは問題なくファイルのアップロードができる状態であり、サーバーやPHPの問題ではなくデータベースに何らかの問題が起きていると考えています。


次なる対応として
データベースに保存されているアップロードに失敗した画像ファイル情報の削除を行いたいのですが、
対象となるテーブルがわからず困っています。
どなたか教えていただけないでしょうか・・・。
 

Re: 管理画面から「ファイル」のページを操作できなくなりました。

2019年6月24日 at 19:42
うろ覚えですいませんが 8.3.2 では、サムネイル生成のところで、エラーが良く起こっていたと思います。

特に画像サイズが大きいもの (ファイルサイズではなく、オリジナルの画像サイズが大きいもの) では、サムネイル生成時にメモリーオーバーなどで concrete5 が落ちてしまうというバグが有りました。

8.3.3 で修正されていると思います。
なので 8.5.1 では直っているはずです。

また、画像ファイルのサイズが大きいと、バグが治っているとは言え、メモリーオーバーなどを起こす可能性があります。

画像サイズが大きいのにも加え、なにか、画像が壊れている可能性もあります。

DBから直接削除したいということですが、ファイル情報はいくつものデータベーステーブルに渡って保存されているので、DBから直接削除するのはおすすめできません。
ファイルマネージャーから検索して削除してください。

ファイルマネージャーから該当のファイルは見つかりませんか?
 

Re: 管理画面から「ファイル」のページを操作できなくなりました。

2019年6月25日 at 9:58
返信ありがとうございます。
FTPから確認した時に最近1点だけ、サイズの大きな画像があげられていました。


現在 管理画面>ファイル を選択すると画面全体が添付画像のような表示になり、ファイルマネージャーが表示・選択できない状態にあります。
添付: error_file.jpg
 

Re: Re: 管理画面から「ファイル」のページを操作できなくなりました。

2019年6月25日 at 10:16
普段私は、管理画面>ファイル からファイルマネージャーの画面を表示させているのですが、他にもファイルマネージャーにアクセスできる方法はありましたでしょうか?
もし方法がありましたら教えて頂けると幸いです。

よろしくお願いいたします。
 

Re: 管理画面から「ファイル」のページを操作できなくなりました。

2019年6月26日 at 18:07
管理画面 - レポート - ログから、ファイルマネージャーにアクセスした時あたりに発生した時間帯でエラーが起きている場合があります。

そのエラーログを教えてもらえますか?

エラーログが見つからなければ、デバッグモードをオンにして、ファイルマネージャーに再び訪問してエラー画面を教えていただきたいです。

デバッグモードのオンの仕方は

1. concrete5 に管理者権限でログイン
2. 「管理画面」に訪問
3. 「システムと設定」ページに訪問
4. 「サーバー設定一覧」の「デバッグ設定」ページに訪問
5. 「サイトユーザーにエラー情報を表示」をチェックし、「エラーのデバッグ出力を表示」を選択

してください。

そうして、ファイルマネージャーページに訪問して、改めてエラー画面を板だ得ますか?
これでエラーの詳細を見ることが出来ます。

※ 本番サーバーであれば、確認が終わったらまたもとの設定に戻すことをおすすめします。



まだなんとも言えないのですが、

- 大きなファイルを上げて処理が中途半端になった
- concrete5 8.5.1 にアップグレードしたときにアップロードし忘れのファイルがあった
- なにか拡張子とは違うフォーマットや、壊れたファイルがアップロードされ、それでデータベースが壊れてしまった

などの可能性があります。

ひとまずエラーの詳細を頂く必要があります。

よろしくおねがいします。
 

Re: 管理画面から「ファイル」のページを操作できなくなりました。

2019年6月26日 at 18:10
すみません、一番最初の投稿にありましたね。
失礼しました。

> 〇管理画面>レポート>ログ:
> 2019/06/18 10:51:10 例外 admin Exception Occurred: [省略]/concrete/src/File/Search/Result/Item.php:26 Invalid argument supplied for foreach() (2)
>
> 〇デバック設定>エラーの出力表示を選択した状態で問題のページを表示した時の画面:
> 添付画像

少々お待ちください。
 

Re: 管理画面から「ファイル」のページを操作できなくなりました。

2019年6月26日 at 18:53
すいません、
ファイルのアップロードが出来ないだけかと思いましたが、
ファイルマネージャーのファイル一覧も見ることが出来ないということでしたね。


私の方でテストしましたが、 concrete5 内のデータベースが壊れてしまったようです。

原因は下記のいずれかが考えられます

- ファイルのアップロード中に何らかの理由で MySQL Database への登録が失敗した
- ファイルを削除しようとしたときにファイルの削除が完全に終わらなかった
- 無理に phpmyadmin などからデータを削除されようとし、中途半端にデータが削除された

いずれで発生したようです。

僕の方で、テスト環境を使って再現しました。
ただ、復旧方法を見つけるのにちょっと時間がかかりそうなので、一旦報告まで。

一番良いのは、データベースのバックアップがあればそれに戻していただくのが良いと思います。

どう復旧できるか見てみようと思いますが、
なにか、上記で心当たりのある操作がわかればより具体的なアドバイスができると思います。
 

Re: 管理画面から「ファイル」のページを操作できなくなりました。

2019年6月26日 at 19:12
僕が故意に僕のローカルで同じ発生させたエラーの復旧方法についてわかりました。

僕の方で、MySQL に直接入って、ファイルに関する MySQL 内のデータを順番に削除していき、ファイルマネージャーでエラーを発生させる箇所と、エラー表示回避を解除する箇所をみつけました。

ただ、この方法は、ファイルマネージャーのエラー表示を回避するだけで、完全な復旧方法ではありません。


concrete5 では、1個のファイルがアップロードされると


- Files
- Fileと名前がつけられているテーブルすべて
- atNumber
- at** (ファイルに属性が追加されている場合)
- AttributeValues
- TreeFileNodes
= TreeNodes

などの10個以上のテーブルにそのファイルの情報が追加されます。

ファイルを削除中、もしくは、手動で1個のファイルを削除しようとすると、
- FileVersions や Files テーブルで削除したいファイルの fID を取得
- TreeFilesNodes テーブルで該当fIDに割り当てられている treeNodeID を取得
- FileVersion テーブルで該当 fID のレコードを削除
- File テーブルで該当 fID のレコードを削除
(ここで、ファイルマネージャーで該当の「Invalid argument supplied for foreach()」エラーがファイルマネージャーで発生)
- TreeNodes テーブルで、さきほど取得した treeNodeID を削除

これで、ファイルマネージャー上からはファイルが消え、エラー無しでファイルマネージャーにアップロードできるようになります。

ただ、最初にお伝えしたように、ファイルの情報はいくつものテーブルに情報が記録されているため、今後、サイトをアップグレードする際に正常にアップグレードできないなどのエラーが発生する可能性があるため、該当するファイルの情報をすべての箇所から削除する必要があるのですが、ファイル属性は fID だけではなく、属性ID (akID) を取得して該当する属性情報を削除する必要があったりします。

さきほどもお伝えしたとおり、バックアップがあれば、バックアップから復旧してサイト運営をされることをおすすめします。

よろしくおねがいします。
 

Re: 管理画面から「ファイル」のページを操作できなくなりました。

2019年7月1日 at 16:40
返信が遅くなりすみません。

私の方では対処できないため
その後は、ご助言頂いた方法をデータベースの知識のある方に試して頂きました。
残念ながらエラーを消すには至りませんでした。

また、バックアップをとっていなかったため、改めて作り直していくことになりました。

お時間を割いてまで調べて頂き、本当にありがとうございました。