ConoHa VPSでKusanagiで運営しているWordPressの投稿画面で画像をアップロードしたところ、次のエラーが発生しました。その対処策をお知らせします。
エラー発生
アップロード中にエラーが発生しました。後ほど再度お試しください。
英語表記にしていると、
An error occurred in the upload. Please try again later
に相当します。
このエラーが発生した直後メディアライブラリに、対象の画像は表示されません。なので、すぐには記事中に挿入することはできません。
しかし、奇妙なことに、編集ページをリロードしたり、違うページからメディアライブラリを開くとその画像が表示されています。その時点では記事に挿入することができます。つまり、アップロードはできているけど、何かがおかしいようです。
この状態のままで、画像をアップロードするごとにリロードすれば、記事を書き進めて行くことは可能でしょうが、さすがに面倒なので、すぐにこの問題に取り組むことにしました。
数日前まで普通にアップロードできていました。何も設定を変えたつもりはないので、不思議で仕方ありません。
数時間の試行錯誤
最初、ダッシュボード上の次のWarningに注目しました。
こんなWarningあったかなぁ、と不思議でしたが、サーバーにログインして
1 |
# chmod 755 wp-content |
でパーミッションを変えてみました。Waningは消えましたが、やはり画像のアップロードの問題は変わりません。
次のページを見て、
Can´t upload images “An error occurred in the upload. Please try again latgain-lat/
あっ、先日適用している子テーマのfunction.phpを少し変更したな、と思い出しました。それを以前の状態に戻したり、正常なWordPressのものにしてみたり、しましたが変化無し。
数時間試行錯誤し、「サーバー側で何か勝手に変更が加えられたのでは?」という気になり、ConoHa VPSのサポートに聞いてみようかなと思いました。
以前サポートに連絡した際「ログみました?」って聞かれたの思い出しました。連絡する前に、まずはログを確認することにしました。
ログに不可思議な部分が
サーバー側(Nginx)のログを見ると、次のようなエラーが出力されていました。
1 2 3 4 5 6 7 8 9 10 11 12 |
# cd /home/kusanagi/xxxx.com/log/nginx # tail ssl_error.log 2020/04/02 10:07:24 [error] 31564#0: *11234 FastCGI sent in stderr: "PHP message: WordPress データベースエラー: Table 'xxxx.wp_pTC_logs' doesn't exist for query SHOW FULL COLUMNS FROM `wp_pTC_logs` made by require('wp-admin/menu.php'), require_once('wp-admin/includes/menu.php'), do_action('admin_menu'), WP_Hook->do_action, WP_Hook->apply_filters, pTC_menu, logMe" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: xxxx.com, request: "GET /wp-admin/admin.php?_wpnonce=8bf9afc081&jobid=1&page=backwpupjobs&action=runnow HTTP/2.0", upstream: "fastcgi://127.0.0.1:9000", host: "xxxx.com", referrer: "https://xxxx.com/wp-admin/admin.php?_wpnonce=8bf9afc081&jobid=1&page=backwpupjobs&action=runnow" 2020/04/02 10:08:26 [error] 31564#0: *11234 FastCGI sent in stderr: "PHP message: WordPress データベースエラー: Table 'xxxx.wp_pTC_logs' doesn't exist for query SHOW FULL COLUMNS FROM `wp_pTC_logs` made by require_once('wp-admin/admin.php'), require('wp-admin/menu.php'), require_once('wp-admin/includes/menu.php'), do_action('admin_menu'), WP_Hook->do_action, WP_Hook->apply_filters, pTC_menu, logMe" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: xxxx.com, request: "GET /wp-admin/edit.php HTTP/2.0", upstream: "fastcgi://127.0.0.1:9000", host: "xxxx.com", referrer: "https://xxxx.com/wp-admin/index.php" 2020/04/02 10:08:31 [error] 31564#0: *11234 FastCGI sent in stderr: "PHP message: WordPress データベースエラー: Table 'xxxx.wp_pTC_logs' doesn't exist for query SHOW FULL COLUMNS FROM `wp_pTC_logs` made by require_once('wp-admin/admin.php'), require('wp-admin/menu.php'), require_once('wp-admin/includes/menu.php'), do_action('admin_menu'), WP_Hook->do_action, WP_Hook->apply_filters, pTC_menu, logMe" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: xxxx.com, request: "GET /wp-admin/post.php?post=2929&action=edit HTTP/2.0", upstream: "fastcgi://127.0.0.1:9000", host: "xxxx.com", referrer: "https://xxxx.com/wp-admin/edit.php" 2020/04/02 10:08:47 [error] 31564#0: *11234 FastCGI sent in stderr: "PHP message: WordPress データベースエラー: Table 'xxxx.wp_pTC_logs' doesn't exist for query SHOW FULL COLUMNS FROM `wp_pTC_logs` made by require_once('wp-admin/admin.php'), require('wp-admin/menu.php'), require_once('wp-admin/includes/menu.php'), do_action('admin_menu'), WP_Hook->do_action, WP_Hook->apply_filters, pTC_menu, logMe" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: xxxx.com, request: "POST /wp-admin/async-upload.php HTTP/2.0", upstream: "fastcgi://127.0.0.1:9000", host: "xxxx.com", referrer: "https://xxxx.com/wp-admin/post.php?post=2929&action=edit" 2020/04/02 10:23:35 [error] 31564#0: *11234 FastCGI sent in stderr: "PHP message: WordPress データベースエラー: Table 'xxxx.wp_pTC_logs' doesn't exist for query SHOW FULL COLUMNS FROM `wp_pTC_logs` made by require_once('wp-admin/admin.php'), require('wp-admin/menu.php'), require_once('wp-admin/includes/menu.php'), do_action('admin_menu'), WP_Hook->do_action, WP_Hook->apply_filters, pTC_menu, logMe" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: xxxx.com, request: "POST /wp-admin/async-upload.php HTTP/2.0", upstream: "fastcgi://127.0.0.1:9000", host: "xxxx.com", referrer: "https://xxxx.com/wp-admin/post.php?post=2929&action=edit" 2020/04/02 10:27:58 [error] 31564#0: *11234 FastCGI sent in stderr: "PHP message: WordPress データベースエラー: Table 'xxxx.wp_pTC_logs' doesn't exist for query SHOW FULL COLUMNS FROM `wp_pTC_logs` made by require_once('wp-admin/admin.php'), require('wp-admin/menu.php'), require_once('wp-admin/includes/menu.php'), do_action('admin_menu'), WP_Hook->do_action, WP_Hook->apply_filters, pTC_menu, logMe" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: xxxx.com, request: "GET /wp-admin/plugins.php HTTP/2.0", upstream: "fastcgi://127.0.0.1:9000", host: "xxxx.com", referrer: "https://xxxx.com/wp-admin/admin.php?_wpnonce=8bf9afc081&jobid=1&page=backwpupjobs&action=runnow" 2020/04/02 10:28:14 [error] 31564#0: *11234 FastCGI sent in stderr: "PHP message: WordPress データベースエラー: Table 'xxxx.wp_pTC_logs' doesn't exist for query SHOW FULL COLUMNS FROM `wp_pTC_logs` made by require_once('wp-admin/admin.php'), require('wp-admin/menu.php'), require_once('wp-admin/includes/menu.php'), do_action('admin_menu'), WP_Hook->do_action, WP_Hook->apply_filters, pTC_menu, logMePHP message: WordPress データベースエラー: Table 'xxxx.wp_pTC_logs' doesn't exist for query SHOW FULL COLUMNS FROM `wp_pTC_logs` made by deactivate_plugins, do_action('deactivate_ptypeconverter/pTypeConverter.php'), WP_Hook->do_action, WP_Hook->apply_filters, pTC_uninstall, logMePHP message: WordPress データベースエラー: Table 'xxxx.wp_pTC_logs' doesn't exist for query SHOW FULL COLUMNS FROM `wp_pTC_logs` made by deactivate_plugins, do_action('deactivate_ptypeconverter/pTypeConverter.php'), WP_Hook->do_action, WP_Hook->apply_filters, pTC_uninstall, logMePHP message: PHP Warning: Use of undefined constant pTypeConverter - assumed 'pTypeConverter' (this will throw an Error in a future version of PHP) in /home/kusanagi/9bfcdec559455691f40435a0/DocumentRoot/wp-content/plugins/ptypeconverter/pTypeConverter.php on line 82PHP message: PHP Warning: Use of undefined constant pTypeConverter - assumed 'pTypeConverter' (this will throw an Error in a future version of PHP) in /home/kusanagi/9bfcdec559455691f40435a0/DocumentRoot/wp-content/plugins/ptypeconverter/pTypeConverter.php on line 82PHP message: PHP Warning: Use of undefined constant pTypeConverter - assumed 'pTypeConverter' (this will throw an Error in a future version of PHP) in /home/kusanagi/9bfcdec559455691f40435a0/DocumentRoot/wp-content/plugins/ptypeconverter/pTypeConverter.php on line 82PHP message: PHP Warning: Use of undefined constant pTypeConverter - assumed 'pTypeConverter' (this will throw an Error in a future version of PHP) in /home/kusanagi/9bfcdec559455691f40435a0/DocumentRoot/wp-content/plugins/ptypeconverter/pType 2020/04/02 10:46:58 [error] 31564#0: *11234 access forbidden by rule, client: xxx.xxx.xxx.xxx, server: xxxx.com, request: "GET /wp-content/uploads/backwpup-ce2f00-backups/ HTTP/2.0", host: "xxxx.com" 2020/04/02 10:47:04 [error] 31564#0: *11234 access forbidden by rule, client: xxx.xxx.xxx.xxx, server: xxxx.com, request: "GET /wp-content/uploads/backwpup-ce2f00-backups/ HTTP/2.0", host: "xxxx.com" 2020/04/02 13:57:40 [error] 31564#0: *13459 open() "/home/kusanagi/9bfcdec559455691f40435a0/DocumentRoot/wp-content/uploads/cant-login-naver-from-line/msg-from-line.png" failed (2: No such file or directory), client: 66.102.8.14, server: xxxx.com, request: "GET /wp-content/uploads/cant-login-naver-from-line/msg-from-line.png HTTP/1.1", host: "xxxx.com" |
以下の部分に注目しました。
WordPress データベースエラー: Table 'xxxx.wp_pTC_logs' doesn't exist
wp_pTC_logsというテーブルが無いとのこと。調べるとpTypeConverterというプラグインを入れたら作成されるテーブルとのこと。少し見覚えのあるプラグインです。
MySQLにログインして確認すると、やはりそんなテーブルは存在しないですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
> show tables; +--------------------------------+ | Tables_in_k_EeF8Xw | +--------------------------------+ | cerber_acl | | cerber_blocks | | cerber_countries | | cerber_lab | | cerber_lab_ip | | cerber_lab_net | | cerber_log | | cerber_qmem | | cerber_traffic | | wp_cerber_files | | wp_cerber_sets | | wp_cerber_uss | | wp_commentmeta | | wp_comments | | wp_links | | wp_mgmlp_folders | | wp_options | | wp_postmeta | | wp_posts | | wp_site_cache | | wp_sitemanager_device | | wp_sitemanager_device_group | | wp_sitemanager_device_relation | | wp_term_relationships | | wp_term_taxonomy | | wp_termmeta | | wp_terms | | wp_urls | | wp_usermeta | | wp_users | +--------------------------------+ 30 rows in set (0.00 sec) |
なんとか正常化
pTypeConverterというプラグインをオフにしたところ。。。
直りました!普通にアップロードできるようになりました。そもそも次の記事のようにプラグインを1つ1つ停止していくことで、解決できたという人もいたので、素直に従っておけばよかったです。とはいえ、プラグインをむやみに停止する事自体が他の問題を引き起こしそうなので怖くてできませんでした。
wordpressで「アップロード中にエラーが発生しました」の対処法
ただ、このエラー、様々な理由により発生するようです。なので、一度ログを確認してみるのをおすすめします。
原因の考察。いくつもの謎。
なぜ、pTypeConverterというプラグインに必要なwp_pTC_logsというテーブルが無いのだろうと考えて見ました。
私は一度サーバーを移行したことがあるのですが、その際にデータベースの全テーブルではなく必要なテーブルだけ選択して移行しました。環境に依存していそうなテーブルは除外したためです。WordPressに必須なテーブルとプラグインで使用しているテーブルは選択したつもりだったのですが、もしかしたらそこでwp_pTC_logsを選択しなかったからかもしれません。
でも、サーバー移行したのは数ヶ月前で、その後、画像のアップロードは正常にできていまし、最近設定を変えた記憶はありません。なぜこのタイミングで発生したかは謎です。
また、今回ログにエラーが出力されたので気づけました。しかし、昨日からこの事象を確認していたのですが、昨日のログにはなぜかこのエラーは発生していません。これも謎です。
最初に触れたダッシュボードに表示されたパーミッションのWarningも、こちらも変えた覚えはないのに変わっていたのが謎です。これはサーバーサービス側が勝手に変えてないかなぁ。
ITの世界では、「よく分からないけど直った。」というものほど怖いものはありません。とはいえ、この調査にずっと時間をかけているわけにはいきません。
同時に他の不具合も直った
ちなみに、このエラーの他に、WordPressの挙動でおかしい部分がありました。WordPressやプラグインの新しいバージョンがあることを知らせるメッセージが2重に出てしまう、というものです。上の方のメッセージはずれて表示が崩れてますしね。
WordPress 5.4 が利用可能です ! 今すぐ更新してください。
英語だと、
WordPress 5.4 is available! Please update now.
新しいバージョン WP Cerber Security が利用可能です。インストールしてください。
なんと、これらの問題も解決しましたようです。プラグインの方は一度しか表示されないメッセージなので確認はできていないのですが、WordPress全体の方は2つ表示されることはなくなりました。
さらに、BackWpUpというバックアップをとるプラグインを実行した際に、
フォルダーを作成できません
英語だと
Cannot create folder
というエラーが発生してバックアップをとれなかったのですが、上記の対処の後は正常にとれるようになりました。
ちなみに、この問題は、バックアップ先のディレクトリのパーミッションを755から777に変更する事でも、解消できました。しかし、本質的な原因はpTypeConverter周りにあるので、pTypeConverterを削除し、パーミッションは755に戻しておきました。