ラベル トラブル の投稿を表示しています。 すべての投稿を表示
ラベル トラブル の投稿を表示しています。 すべての投稿を表示

2025年4月30日水曜日

BackWPUP 5.2 のアップデートした後に WordPress サイトがアクセスできなくなった問題への対処と起こった理由

2025年4月30日、手持ちの WordPress サイトについて「重大なエラー」ということでサイトにアクセスできなくなる問題が発生しました。実際にはキャッシュ系プラグインをいれていたおかげて、本日更新したか(キャッシュ更新した)、最近アクセスしていなかった(キャッシュがない)場合にのみでていたので、気づくのに少し時間がかかりました。

WordPress のデバッグを有効にしてみると、下記のようなエラーが表示されました。
Query Monitor というデバッグ用のプラグインもいれていたので、整理された状態でエラーがでてますね。原因は、「cal_days_in_month」関数が定義されていないよというもの

対処方法


暫定的な対応としては、FTPなどをつかってサーバーにある WordPress フォルダから、 wp-content > plugins に移動して、「backwpup」のフォルダを削除する、ということになります。ようするにプラグインを WordPress から消すということです。

今回の問題が修正されたあとに、改めてBackWPUP プラグインを新規インストールすれば、設定などはデータベース側に残っているのでそのまま使えるでしょう。

あるいは他のプラグインの乗り換えるという手もあります。
また、自前でバックアップシステムを構築可能なら、その方が安全かもしれません。


自前でバックアップシステムを構築する(技術者向け)


サーバーを管理運用している人対象、つまりはサーバーに ssh などでログインして、シェルスクリプトや cron などを使って自動バックアップなどを手掛けたりしているなら、参考になるかなと思います。

WP-CLI を利用したバックアップツールを作成して、下記に置きました。
UNIX系OSのサーバー管理をしているならわかるかなと思います。自由に使ってもらっても構いません。



WordPress には、WP-CLI というコマンドベースでユーザー制御したり、データベースからデータをバックアップしたり、プラグインや本体のアップデートなども可能なツールがあります。プラグインが WP-CLI に対応していれば、コマンドからプラグインの対応している機能を実行できたりします。BackWPUP も対応しており、WP-CLI を通じてバックアップを行うこともできます。

筆者も下記のような感じでバックアップしておりました。

Knowledge for WordPress: 複数サイトのメンテナンスを WP-CLI でやろう!(サーバー管理者編)

こうしたものを使えば

1. WP-CLI をサーバーにインストールする
*単体で実行可能。レンタルサーバーによっては wp コマンドとして存在する場合もあるがバージョンが古いこともある

2. WordPress のデータベースバックアップ
wp db export --default-character-set=utf8mb4

コマンド(4バイト UTF-8に対応)でSQL形式でバックアップできます。

3. WordPress本体を tar コマンドで tar.gz 形式でバックアップ

これらができれば、プラグインに頼らずともバックアップ可能になります。
ただ古いバックアップを削除するときには、下記のように7日より古いファイルは削除するなどの find コマンドなどの併用利用は必要になってくるでしょう。ただこのあたりはコマンドの意図するところを正しく理解できないなら、使うべきではありません。うっかり本体データごと削除してしまうおそれがあるためです。

find バックアップフォルダ/ -name "backup_*.tar.gz" -type f -mtime +7 -exec rm -f "{}" \;

以下、今回なぜこんなことが起こったのかをまとめておきます。

cal_days_in_month 関数が未定義のためにエラーがでた


PHPの公式ドキュメントによれば、年月をいれるとその月が何日あるのかを調べることができる関数のようですね。

PHP: cal_days_in_month - Manual

特に PHP8など最新版でも動作するようなので、これだけ見ると???という感じです。

いずれにせよ関数がないなら、Warningだけにとどめて無視してほしいという気持ちもありますが、それはそれで意図した動作をしないおそれもあるのでエラーで気づかせてくれるというのもまた必要ではあるので難しいところです。


cal_days_in_month 関数は標準で実装されていないかもしれない問題

下記をみると、Windows版 PHP にはこの関数は標準実装されているようですが、Linux OS 等が利用されてることも多い、レンタルサーバーなどでは明示的に別途 PHP を --enable-calendar オプションつきで実装(コンパイル)する必要があるようです。

PHP: Installation - Manual
https://www.php.net/manual/en/calendar.installation.php

手持ちのさくらインターネットのサーバーで、下記のようにテストコードを書いて、phpコマンドから実行すると、

 <?php
ini_set('display_errors', "On");
cal_days_in_month(CAL_GREGORIAN,2,2025);

下記のように関数が定義されていないとエラーになります。

Fatal error: Uncaught Error: Call to undefined function cal_days_in_month() in /home/****/sample.php:4
Stack trace:
#0 {main}
  thrown in /home/***/sample.php on line 4

さくらインターネットのWeb UIから、php.ini において下記を参考に

さくらのレンタルサーバのPHPの環境を確認、整えてみよう | さくらのホームページ教室

extension = calendar.so

をいれてみるも駄目。

phpinfo() コマンドで calendar 系のモジュールが入っているがどうか調べると、一応入っているのは入っているが、この関数が使えるものではなさそう。

% php -r "echo phpinfo();" |grep -i calendar
Calendar => Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong

そのため、結局はプラグイン作者側が未定義関数がでそうなものについては、その関数がない場合のエラー処理をしてくれているのがよいということになるなぁという感じです。それ以前に、GitHub Actions 等標準的な環境での PHP Unit Test を開発者側もしてほしいものですね。もし、していても問題が発覚しないならどうしようもないですけれども...

2025年4月30日 @kimipooh


2016年6月13日月曜日

【備忘録】出ました!投稿・固定ページ編集データが表示できない(文字色が白)問題

表示できないのではなく、

  1. 文字色が「白」
  2. ビジュアルリッチエディタが動作しない
  3. ビジュアルリッチエディタとテキストエディタの切り替えができない

とまぁ上記の感じになるのです。
実際本文は白文字でテキスト形式(HTMLデータ)が入っています。
さらにビジュアルリッチエディタのアイコンが出ず、SafariやChrome(MacOS 10.10)、Windows7の端末でも問題がおきました。
WordPressのビジュアルリッチエディタとテキストエディタが表示・使用できないときの対処方法 (http://hi-linx.net/cannot-use-editer/) を参考に、キャッシュのクリア(サーバーやクライアント側両方)、WordPressの再インストールをしても解決せず。特にサーバー側のPHPログのエラーもなし。

参考情報

2016年4月27日水曜日

PHP7 で破棄された関数によるWordPressの問題編(1)mysql_real_escape_string / set_magic_quotes_runtime #wordpress

1つの WordPress を nginx + PHP7 な環境に移行しました。
ここでは PHP7 周りでおっとっと、、という事例について備忘録ついでに紹介していきます。今回は、「mysql_real_escape_string」です。


mysql_real_escape_string は PHP7から廃止された!

のでこの関数をつかっている場合にはエラーが出ます。
この関数は、MySQLデータベースにSQLクエリを渡すときに特殊文字をエスケープする関数です。esc_html などと同じような感じですね!

ログには
  • 2016/04/27 11:33:38 [error] 23763#0: *1 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function mysql_real_escape_string() in 使っているPHP(パス含む)

という感じで出ます。

mysqli_real_escape_string に変更せよ!

2016年4月14日木曜日

wp core update で WordPress 本体のアップデートができない場合には・・・

ようやく原因を見つけたのでメモ。

Acunetix WP Security プラグイン問題


Acunetix WP Security プラグインを入れて、下記の設定をオンにしていると、 wp core update をしても常に最新と出てしまう(wp core version で 4.4.2 と最新ではないのに)。あるいは、Segmentation fault という致命的なエラーがでる(手持ちの MAMP環境 on MacOS 10.10.5 , WordPress 4.5 ではこれが出た...)。
  • Remove core update notifications from back-end for all but administrators

回避策


  • Remove core update notifications from back-end for all but administrators
をオフにする。
すると wp core update は正常に動作しました。

Segmentation fault が出る原因は?


MacOS 10.10.5 で MAMP 3.5, WP 0.23.0 の環境での話です。
何故そのようなことになるのか。ちょっと追跡してみました。

wp-scan-security/res/inc/WsdSecurity.php
    public static function fix_removeCoreUpdateNotification()
       ...
       add_filter( 'pre_site_transient_update_core', create_function( '$a', "return null;" ) );
    }

この青文字の部分で問題が起こっていたのでした。
で、これ以上の追跡は時間切れなのでしません〜

User Access Manager プラグイン問題

2015年8月13日木曜日

WordPress - Installer プラグインが激重な件 #wpml

ここ最近、管理画面のみ激遅(何か動作させるのに30秒〜1分ぐらいかかる)ってことで、今日一日チェックしていました。

最初はApacheやMySQL、PHP周りをチェックしましたが、WordPressの特定サイト以外は特に遅いとは感じませんでした。まぁ若干チューニングアップはしましたので、他のサイトが少し速くなったのはよかったかもね。

結論からいうと、WPMLプラグインの自動更新を提供する「Installer」プラグインが犯人でした。こいつを停止すると、約7倍速くなりました... とても気づきにくいのでメモしておきます。

今回の現象

管理画面のみ応答が遅く、よく「接続が切れた」というメッセージが出て使いものにならないレベルになった。ウェブサイトの表示側は問題なし。

2015年7月27日月曜日

【備忘録】<「1」はWPML 3.2.3で解決予定> WPMLプラグイン関連トラブル(投稿が表示できない、他の言語にリダイレクトされる)#wpml

本日はこの2つのトラブルに見舞われたので備忘録しておきます。
※私の特殊環境かもしれないので(ちょっと多忙で完全に確認できていない)、その点はご留意ください。

「1」については、サポートへ報告したところ、バグだったとのこと。
WPML 3.2.3 devでテストした所、問題なく動作したので、3.2.3がリリースされたら解決するでしょう。2015年8月13日

1. 各言語で同じスラッグ(タグ)を利用するとメイン言語に強制転送されてしまう。

WPML3.2.2で確認しました。WPMLのサポートフォーラムに投稿(Cannot work in case of using same tags in each languageしておきました。まぁとりあえず時間ないから、ざっくりとした説明しかしなかったんですけどね...

http://◯◯/test  :日本語
http://◯◯/en/test:英語

とします。ここでのタグは、「test」です。

http://◯◯/en/test にアクセスすると、http://◯◯/test に飛ばされてしまう。

という状況に陥ったということです。
いままではいけていましたし、過去にもそういったトラブルがありました。

https://wpml.org/forums/topic/2nd-level-pages-with-same-slug-redirecting-to-main-language/

のでバグだろうなぁと思います。バグじゃなく仕様なら、そもそも同一タグを設定できないようにしておかないとねぇ。


2. WordPress 4.3.2にアップデートしたら投稿、固定ページ等一覧表示がでなくなった


データはあるようなのですが、管理画面の一覧表示にでなくなったという現象が手持ちのWPML導入サイト(16サイト)で同時に出てました。固定ページなど表示ページの「編集」や直接URLをタイプするとアクセスできるので、WPML 3.1.9.7とWordPress 4.3.2の相性問題かなと思います。
WordPress の方は順調にWP-CLI (コマンドラインツール「wp-cli」を利用したWordPressプラグインアップデートの自動化などを参考)による自動アップデートが動作したのでアップグレードされていたのですが、するとWPML3.1.9.7を利用していたサイトで問題が発生したということです。

解決策:WPML 3.2.2 へアップグレード


WPML 3.1.9.7から 3.2.2への自動アップグレードが、どうも正しく動作していないようで
(独自方式を採用)、そのためエラーがでていたって感じです。
手動でログインして全サイト(16サイト)をアップグレードするのは、超面倒なのでWP-CLIとシェルスクリプトを組み合わせて一括処理パッチを作成してやっちゃいました。

そういえば、以前WPMLのフォルダがミスってアップデートされており、一括フォルダ変更が必要だったときもパッチ作成したなぁ。
(詳細は、【トラブル】WPML 3.1.8.5にアップデート失敗して動作しない(解決策あり)参照)

プラグインの半自動アップデート方法(WPML編)

2015年5月7日木曜日

【修正されたバグ】サイトが非SSL、管理画面がSSL(/wp-admin/ 以下)の場合、メディア追加するとリンクがSSLに強制設定されてしまう

本件は、WordPress 4.2からのバグで、4.2.2で修正されています(5月7日)。
これに気づけず、フックを使ってあーでもない、こーでもないと修正してたんですが(末尾の付録参照)、勝手にリアルタイムで直ったので「アレレ??」って思ったんですよね。

今後も同じようなことが起こりそうなので、備忘録として残しておきます。

何が起こった?!


突然、独自ドメインに構築したWordPress上の「メディア」を使って追加した添付ファイルをダウンロードしようとすると、

---
この Web サイトのセキュリティ証明書には問題があります。
  (中略)
セキュリティ証明書の問題によって、詐欺や、お使いのコンピューターからサー
バーに送信される情報を盗み取る意図が示唆されている場合があります。
  (以下省略)
---

と「Internet ExplorerやChromeがいってきたけど、どういうこと?!」
って問い合わせが来たんですよね。

管理画面のみSSL暗号化(https:// アクセス)にしていて、SSL証明書に、オレオレ証明書(自己証明書)を使っている場合に起こる問題です。

2015年4月27日月曜日

【既知バグ】WordPress 4.2でWPMLプラグイン利用時にデフォルト言語以外でメニュー保存できない(WPML 3.1.9.7で解決)

WPMLの最新版 3.1.9.6(手持ちの3.1.5でも再現)での既知バグです。
開発元が問題を認識して暫定対応策(下記)を講じてますので、次のバージョンでは解決していることでしょう。

※2015年5月8日現在、WPML 3.1.9.7で解決しています。

問題点

WordPressでWPMLプラグインを有効にし、2つ以上の言語を設定している場合のみにおこります。WPMLを利用するということは、2つ以上の言語をつかうということなので、WPML利用者は皆同じバグに遭遇するはず。

WordPress 4.2にアップデートすると、外観→メニューからデフォルト言語以外のメニューを保存しようとすると、404ページに飛んでしまい保存できない。

暫定対応策

2015年4月16日木曜日

カスタムメニューを追加すると別のメニューが消えていく現象への対策

※ wp-config.phpに init_set関数で設定する方法はうまくいかないので削除し、かわりに httpd.confの方法を追加(2015年6月26日)

WordPressの外観のメニューを増やしていくと、ある時件名の現象がおこります。
その場合、PHPの制限によって生じている可能性があります。

カスタムメニュー関連プラグインを使っていたので、それを眺めること5分。
プラグインじゃないなぁと思って、PHP周りで何かないかネットで調べること5分、それっぽい情報を発見。プラグインのPHPファイルが2つしかなくてコード行数も大したことがなかったのも幸いしました。

WordPressのカスタムメニューが82個以上登録できねーおらおらーって時の対処方法

うーん、なにやら見たことのあるヘッダー画像で、タイトルの癖も例の人に似てるよなぁと思ったら、WordPressプラグイン開発のバイブル執筆者の一人、@miya0001さんのページじゃないですか!前はサイドメニューがあったような気がしたのですが、、、また今度お会いしたらお礼いっておこう(なにもプレゼントしませんけど...)。

ともあれ、ここに書かれた通りの問題でした。感謝!

対処方法

2015年2月25日水曜日

【トラブル】WPML 3.1.8.5にアップデート失敗して動作しない(解決策あり)


ということで多言語サイトが単一言語サイトになってしまっていたのでした。
WordPressではプラグインは自動更新するのが一般的なので、多くの人がひっかかっているんじゃないのかなぁと思います。私の場合には、2015年2月25日の午前1時頃に仕込んでいたプラグイン自動アップデートをしたときに問題発生していました。

原因


WPML 3.1.8.5のプラグインフォルダのミス
  • WPML 3.1.8.4以下: wp-content/plugins/sitepress-multilingual-cms
  • WPML 3.1.8.5: wp-content/plugins/sitepress-multilingual-cms-3.1.8.5
ということで、「sitepress-multilingual-cms」のはずが新しいプラグインを公開したときに、フォルダにバージョンナンバーをつけたままやっちゃったんだろうなぁと推測。


関連情報

解決方法

2014年10月29日水曜日

【トラブル】BackWPUPプラグインでバックアップする際「SSL certificate problem」と出てしまった場合

管理画面をSSL暗号化通信(https://)を使っている場合、上記エラーがでてバックアップできないことがあります。オレオレ証明書を使っているからなのですが、そこはそれ公的証明書を取得できない何らかの事情があるかもしれません。

公的証明書を購入する以外で、このBackWPUPのSSL証明書チェックを回避する方法は2通りあります(BackWPUP開発者が提示)。

1. functions.phpに下記を追加

 add_filter( 'https_local_ssl_verify', '__return_false' );

2. プラグインの追加

をダウンロードして展開(解凍)したフォルダを、wp-contents/plugins フォルダに入れて、そのプラグイン「Disable WordPress local connection SSL verifying」を有効にする。

「1」「2」とも挙動は同じです。

関連情報

2014年9月3日水曜日

【トラブル(対応中)】「The Event Calendar」と「WPML」プラグインを導入時に、第2言語でWordPress内部検索が出来ない

普段WordPress内部検索を試していないのでいつからかは不明ですが、指摘を受けて気づきました。どういうことかというと


の右サイドバーにある検索では問題なく動作しますが、


の英語サイトから検索すると、検索結果なしになるのです。

Apacheのログエラーを見たら、

ということでSQL構文エラーが出てます