突然ログイン(管理画面の操作)だけができなくなったときの対処 ~さくらサーバー編~

公開日:2019年4月17日 使い方など
Knowledge Base Wordpress パソコン カスタマイズ 設定

そんな馬鹿な・・・な件ですが本当に発生したことです。

さくらインターネットのサーバーでWordpressサイトを運営している知人から「何もしてないのに突然ログイン画面が表示できなくなった」と連絡がありました。

確認したところフロントエンド(訪問者が見る画面)は正常に表示できるのに、「wp-login.php」への直接アクセスでも、「wp-admin」からのリダイレクトでも500エラーが出る症状でした。

パソコンやサイト関係で「何もしてない」っていうのは大抵・・・とも思いましたがどうやら違うようです。

早速ファイルマネージャーで該当ディレクトリを見てみると、あったはずの「.htaccess」ファイルがなくなっていました。そのサイトは標準のパーマリンクを使っているのでフロントエンドは問題なく表示されるのだろうと判断し、Wordpressに必要な部分だけの.htaccessファイルをアップロードしてみましたが解決せず・・・。

大切なサイトなのでいろいろとそのままいじくりまわすのはちょっと避けたいところでしたので、こんなときはサイト全体(ファイル・フォルダとデータベース)をバックアップ。他サーバーでも同じ現象が出るのかとひとまずこのサイトを収容している「カラフルボックス」でサイトを再現したら(要するに引っ越し)、正常に表示されるではありませんか!!!

どうやらさくらインターネット特有の症状のようです(ひょっとしたら他サーバーでも発生する可能性があるかも知れません)。

別サーバーでは動作するのにさくらインターネットだけ何で??さらに混迷を極めます。

カラフルボックスのPHPのバージョンは7.2、それで正常に動作。一方さくらインターネットのPHPバージョンは5.2.7(いつの時代?)なので、カラフルボックスにあるサイトをこの環境のさくらサーバーへ移したら問題があるかも知れませんが逆は考えにくい・・・更に混迷を極める状況です。

でも・・・案外簡単な方法で解決できました。

突然ログイン(管理画面の操作)だけができなくなったときの対処

このままサイトへログインできなければサイトの存在意義もありませんし、何より別のサーバーで動くんだし、さらにはバックアップという強い味方がいるのでちょっと怖いものなしの状態。ひとまずデバックをONにしてエラー表示させてみました。

すると・・・

数々のワーニング項目はありましたが、不具合ではないので無視。唯一エラーとなっていたのが

Fatal error: Uncaught Error: Cannot create references to/from string offsets in /サイトのディレクトリ/wp-includes/user.php:54 Stack trace: #0 /サイトのディレクトリ/wp-login.php(795): wp_signon('', '') #1 {main} thrown in /サイトのディレクトリ/wp-includes/user.php on line 54
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. 上のようなことがないのに更新できない
  6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

コードを転載する場合には

ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

内容を要約すると
/サイトのディレクトリ/wp-includes/user.phpの処理ができません
理由は/サイトのディレクトリ/wp-login.phpの795行目にあるwp_signon(”, ”)の処理がおかしいからです
というもの。

え?Wordpress標準のファイルなのに・・・なんで??状態でした。

ここは何でも載ってるインターネットに頼るしかということでエラー内容を検索してみたら、海外のサイトに解決方法が掲載されていました。

手順を紹介します。

  1. サイトの「wp-login.php」をFTPでダウンロードします
  2. エラーが出ているという795行目付近を見ます(行数はエラー内容を確認してください)
  3. 以下のように修正します
  4. 【修正前】

    $user = wp_signon( '', $secure_cookie );
    【注意】コードをコピーして使用する前に必ずお読みください

    この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

    使用については自己責任でお願いします

    コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

    万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

    コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

    コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

    その場合には以下の方法で修正を行ってみてください

    1. コードの中に全角の記号が入っていませんか?
    2. 半角にすることで解消できます
    3. コードの中に全角の空白(スペース)がありませんか?
    4. 半角にすることで解決できます
    5. 上のようなことがないのに更新できない
    6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

    コードを転載する場合には

    ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

    【修正後】

    $user = wp_signon( array(), $secure_cookie );
    【注意】コードをコピーして使用する前に必ずお読みください

    この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

    使用については自己責任でお願いします

    コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

    万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

    コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

    コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

    その場合には以下の方法で修正を行ってみてください

    1. コードの中に全角の記号が入っていませんか?
    2. 半角にすることで解消できます
    3. コードの中に全角の空白(スペース)がありませんか?
    4. 半角にすることで解決できます
    5. 上のようなことがないのに更新できない
    6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

    コードを転載する場合には

    ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

  5. サーバーの元の場所へ上書きアップロードします

これで解消されました。

この行で何が行われているのかというと、ログアウト状態(Cookieの保存期間が切れ、完全にログアウトした状態)の時に「”」という空の文字列をセットして再度ログイン画面を表示しなさいという命令が出ています。

そしてuser.phpへ「''」という空の文字列を投げ、ログイン画面を出しなさいという動作の流れのようです。

そこで「”」という空の文字列を投げたら「そんな人いましぇ~~ん」となり再び「wp-login.php」へ戻ってきて、それでも「”」なんだから処理して!!とuser.phpへ投げ、「そんな人いましぇ~~ん」・・・の繰り返し、つまり500エラーが発生していたのです。

上の変更部分は「”」という空の文字列ではなく、「array()」誰でもいいから!!という内容にしたということです。

要はサイトに登録しているユーザーが1人でもいて、ログアウト状態だったらログイン画面を出しなさい!!という風にしたのでログイン画面が表示されるようになったということなんですね。

何となくイメージつかめたでしょうか??

これで解決してめでたしめでたし!!ではあるものの、何で突然、しかもさくらインターネットに設置しているWordpressだけ発生したのか?(前述したように同じものが「カラフルボックス」では動く)甚だ疑問です。

まあとりあえず解決したからいいか・・・。

他のサーバーでも同じことが発生するかもしれませんが、ひとまずさくらサーバーで運営しているWordpressサイトで何もしていないのに突然バックエンドだけ入れなくなった、ログイン画面が500エラーで表示されなくなったという方はバックアップを取った上で試してみてください。

「何もしていない」のですからその他何もする必要はありません。

ログイン500エラーの根本原因は何?

対応が先だったので後から検証したのですが、今回の根本原因はさくらサーバーのPHPバージョンを7.2へ変更したことによりWordpressの旧バージョンで使われていた

$user = wp_signon( '', $secure_cookie );
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. 上のようなことがないのに更新できない
  6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

コードを転載する場合には

ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

という記述が無効になったことでした。

どのバージョンから改善後の記述に変わったのかまでは調べていませんが、Wordpressのバージョン5.00では記述が変わっていましたのでWordpressのバージョンアップは必須だと思います。

※本体のバージョンアップによりテーマやプラグインでの不具合が発生する可能性があったり、サイトの表示や動作に影響が出る可能性がありますので本体のバージョンアップ前にはデータベースを含めてバックアップを取り、復元できるスキルを身に着けておく必要があるでしょう。

とはいえ、旧バージョンのWordpressもカラフルボックスサーバーでは動いたわけですし、ログインできなかったら本体のバージョンアップもできない話ですから何度も警告メールを送るなどして対応できないんでしょうかねぇ(あくまで個人の印象ですし、ひょっとしたらその知人が警告メールを捨てちゃったのかも知れないので何とも言えません・・)

いつでもご相談・サイトカスタマイズの依頼を受け付けています

Wordpressのカスタマイズ、不具合解消のご相談はすべてココナラのダイレクトメッセージからお受けしております。まずはこちらのバナーからお気軽にお問い合わせください。

※一度もココナラを使ったことがない方はココナラへの無料登録が必要です。こちらから登録後、上のリンクをクリックする、またはココナラトップページから「ひまあーと」を検索してお問い合わせください。


【スポンサーリンク】


記事の拡散にご協力をお願いします

閲覧いただきありがとうございました。役に立つ情報でしたら是非SNSでシェアをお願いします

関連情報