WordPress本体のバージョンを最新にしようとして失敗した結果、ログインをするとエラー画面になってしまうという嫌な経験をしました。その解決をした対処方法をまとめました。もし、同じ経験をした人の参考になればと思います。
目次
ファイルをコピーできませんでした。というエラーでWordPressの更新を失敗したときの対処方法
WordPressの新しいバージョンがリリースされ、更新を促すメッセージが出ていたので、何気なく更新した結果、以下のように「ファイルをコピーできませんでした。」インストール失敗という結果になってしまいました。
お客さまのサイトや収益をあげているサービスで使っているWordPressの場合には、不用意に更新はしませんし、更新する場合にはバックアップ等もしっかりするのですが、このサイトは個人ブログなんで特別なカスタマイズもしていないということもあってポチっと更新をしたのが大失敗でした。
WordPress更新の失敗の結果、ダッシュボードでエラーが表示されるようになった
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'new_user_email_admin_notice' not found or invalid function name in /public_html/wp/wp-includes/class-wp-hook.php on line 298
というエラーが管理画面上部に表示されるようになってしまいました。
まぁ、個人ブログだしそのうち対応するかと思ってたら、ダッシュボードを開くと以下のエラー表示になり、WordPressの管理画面が使えなくなっていて、ちょっと焦りました。。
Fatal error: Uncaught Error: Call to undefined function wp_privacy_anonymize_ip() in /wp/wp-admin/includes/class-wp-community-events.php:267 Stack trace: #0 /wp/wp-includes/script-loader.php(1022): WP_Community_Events::get_unsafe_client_ip() #1 /wp/wp-includes/class-wp-hook.php(298): wp_localize_community_events('') #2 /wp/wp-includes/class-wp-hook.php(323): WP_Hook->apply_filters('', Array) #3 /wp/wp-includes/plugin.php(453): WP_Hook->do_action(Array) #4 /wp/wp-admin/admin-header.php(118): do_action('admin_print_scr...') #5 /wp/wp-admin/index.php(100): include('/home/egglay/ha...') #6 {main} thrown in /wp/wp-admin/includes/class-wp-community-events.php on line 267
ログインすると上記のエラー画面になるのでどうしようかと思いましたが、幸いホームページの表示には問題なく、上部メニューから各メニューの操作はできました。ただ、プラグインの有効・無効の切り替えることができないなど、いくつかの問題も発生していましたので、すぐの対応が必要だと思い、対処しました。
エラーメッセージを見て、エラーが出ているディレクトリーのパーミッション変更で解決
運が良いのか、これまでWordPressの本体の更新では失敗したことがなかったので、エラーメッセージの確認と念のための調査の結果、割とすぐに解決できました。
この投稿の上部に表示しているWordPress更新失敗のエラーメッセージを確認してみると、許可(パーミッション)がなくファイルを開くことができずにコピーに失敗したとあります。
Warning:copy(/wp/wp-includes/Text/Diff/Renderer/inline.php):failed to open stream:Permission denined in …
ホームページ制作などを本業とはしていないとか、WordPressを自動インストールして使っているだけという人には馴染みがないと思うのですが、WEBサーバーにアップされているファイルにはパーミッションが設定されています。パーミッションとは、WEBで公開されているファイルを誰もが見ることができるので、誰が読み書きできるかを設定しないといけないので、それを設定したものです。
で、上記のエラーをその点から見ると、/wp/wp-includes/Text/Diff/Renderer/inline.php というファイルを開く許可(パーミッション)が無かったということになりますので、確認をしてみると/wp/wp-includes/Text/Diff/Renderer/というディレクトリーのパーミッションが644(権限によっては書き込みに制限される設定)でした。そこで、このディレクトリーのパーミッションを755(すべての権限に読み書きを許可)に変更したうえで、WordPress本体の更新をしたところ、無事にすべての問題が解決しました。
※パーミッションの権限説明はここでは本題ではないのですごく簡略して書いています。詳しく知りたい人は調べてください。
パーミッションの変更の方法
パーミッションというのを変更したらよいということはわかったけど、それってどうやって変更するのかという疑問を持っている方もいると思いますので、その点もまとめておきます。
FTPソフトの場合には、パーミッションの変更というメニューがあるはず
FTPソフトを使ってサーバにアクセスできる人は、FTPソフトを使うが簡単です。ソフトによって具体的な操作方法は異なると思いますが、以下のように変更をしたいディレクトリーを指定してパーミッションを変更できる操作があるはずです。ちなみに下記画面NextFTPというソフトです。
サーバのファイルマネージャー等のツールを使っても変更できる
昔はホームページを公開するというとFTPソフトが必須でしたが、WordPress等の普及でFTPソフトを使う機会のない人も多いと思います。私自身も久しぶりに起動しました。。
こちらも各レンタルサーバーなどによって操作方法は異なると思いますが、各レンタルサーバにはファイルマネージャー的なツールが用意されてることが多いので、そのツールを使って変更することができます。
例えば、XSERVERの場合には、ファイルマネージャーにログインすると以下のような画面になりますので、変更をしたいディレクトリーやファイルにチェックを入れてパーミッションの変更というボタンを押すと変更ができます。
こちらの対処方法で、解決しない場合もあります。また、エラーの原因や操作によっては状況が悪化する場合もあります。事前にバックアップを取る、他のサイトも参考にするなどして慎重に対処をしてください。