IT技術に関する情報掲載サイト

プログラミングに関することを掲載します。

EC-CUBEで「ContextErrorException in AbstractToken.php line 164: Notice: unserialize(): Error at offset 」と表示されたとき

EC-CUBEで、MYページにログインしたあと、MYページ内のページを何回移動したら、エラーとなったり、ログアウトしたりという現象がでて困った。

特に修正したわけではないのに、エラーとなるのは、おかしいなと色々調べてみると、どうも、PHP7.3にバージョンアップしたものに伴うsymfonyのバクのようだったので、以下のURLを参考に直してみました。

 

EC-CUBEフォーラム 「PHP7.3にした後、商品購入をすると、購入完了画面でunserializeエラーになる」

xoops.ec-cube.net

 

以下の修正を適用しました。

github.com

LinuxのCentOSでのホスト名の変更方法

 新しくサーバの設定をする際に、デフォルトのホスト名がIPアドレスになっていたので、メールを送信するときに不都合が起こるので、ホスト名を変えてみた。

hostnameでも変更できるようだけど、hostnamectlコマンドを使ってみました。

まず、現在の設定を確認

 

$ hostnamectl

Static hostname: xxx-xxx-xxxx

Icon name: computer-vm

Chassis: vm Machine ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Boot ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Virtualization: kvm

Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-957.1.3.el7.x86_64 Architecture: x86-64

Static hostnameが現在のホスト名となります。

次にホスト名を変更します。

hostnamectl set-hostname 新ホスト名

サンプルで

$hostnamectl set-hostname new-hostname 

 

と実行して、もう一度、hostnamectlで変わっているか確認し、Static hostnameが変わっていたら、変更完了です。

実際変わっているか、hostnamectlで確認してみると、

$ hostnamectl 

Static hostname: new-hostname

Icon name: computer-vm

Chassis: vm Machine ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Boot ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Virtualization: kvm

Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-957.1.3.el7.x86_64 Architecture: x86-64

 

 

となっていれば、反映完了です。

ちなみに、hostnamectl ツールは、システム上で使用中の 3 つのクラスのホスト名を管理するためのものです。

 

なぜかファイルに書き込めことができない

サイトがうまく表示されないという障害が起こって、色々しらべてみると、どうも、ファイルに書き込みができないことがわかりました。ファイルに書き込めないと言う場合、普通、ディスク容量がいっぱいということがおおいのですが、df -kでしらべてみても、ディスクの使用率は、100%になっておらず。じゃあ、書き込もうとしているフォルダやファイルにアクセス権限がないのかと思い、あまりよくないけど、それぞれの権限をchmod 777でアクセス権限を解放してみてけど、まだ、治らず。すごく困っていろいろしらべてみたのですが、どうも、ファイルがたくさんありすぎで、inodeがいっぱいになってしまったらしい。

inodeとは

inode(アイノード)は、ext2などのUnixファイルシステムで古くから使われているデータ構造である。 inode にはファイル、ディレクトリなどのファイルシステム上のオブジェクトに関する基本情報が格納される。

余計なファイルを削除したら、なおりました。

inodeの使用率は、調べるには、df -iでしらべることができます。

ファイルシステムによりますが、なかなかおこらないと思いますが、しっておいてそんはないことかと思います。

 

ERROR: failed to prepare the stderr pipe: Too many open files (24)

ERROR: failed to prepare the stderr pipe: Too many open files (24)

なんのエラーかというと
fastcgi  php-fpm開いているファイルが多すぎる
ためです。

大規模サイトや複数サイトを一括して管理しているとどうしても、デフォルトで設定している値を超えてしまう場合があります。

現在の値を確認するためには、

ulimit -n

を実行するとわかります。

変更の仕方としては、/etc/php-fpm/www.confにかかれている

rlimit_files = 65535

を変更して、php-fpmとアパッチの再起動をすれば、反映完了となります。

 

なかなかこの設定を変更する機会がすくないのですが、覚えておくと便利かもしれません。

 

Got error 'PHP message: PHP Warning: Illegal string offset 'remember'

Wordpressの古いバージョンで、PHP7系列で動かした際に、

Got error 'PHP message: PHP Warning: Illegal string offset 'remember'

 とエラーとなった場合、対応方法。

 wp-login.phpの以下の部分を修正すれば、なおります。

$user = wp_signon( '', $secure_cookie );

$user = wp_signon( array(), $secure_cookie );

 

もちろん、Wordpressの最新バージョンでは対応済みですが、なんらかの理由でバージョンアップできないときに参考にしてください。

 

PHP7では、変数が配列かどうかのチェックを厳しくしているので、ご注意ください。

Macでsshをしたときに"error: buffer_get_ret: trying to get more bytes 3 than in buffer 0"とでたときの対処法

Macsshをしたときに"error: buffer_get_ret: trying to get more bytes 3 than in buffer 0"とでたときの対処法をご紹介

ターミナルを使って、sshで遠隔でサーバにログインしようとした際に、パスワードはあっているのに、エラーとなってログイン出来ないときがありました。エラー内容は、

error: buffer_get_ret: trying to get more bytes 3 than in buffer 

です。

色々ネットで調べてみると、どうも、最初にログインする際に作成される公開鍵の作成に失敗してしまったようです。

直し方としては、

~/.sshにあるknown_hostsに対象サーバの公開鍵が記述されているので、一旦その行を削除し、再度sshでログインできれば、ログインできます。

エラー内容から、エラーの原因がわからず、知らないとできないエラーだと思いますので、知っとくといいかもしれません。

 

Lets Encryptで証明書更新時にError: couldn't get currently installed versionと出たときの対応方法

 

Lets Encryptで証明書更新時にError: couldn't get currently installed versionと出たときの対応方法は、2パターンある

 

  1. 既存で登録されているcertbot-autoのバージョンが合わないので、入れ直し。certbot-auto実行時にこちらのディレクトリが再生成されるようなので削除して再実行します。

    # rm -r /opt/eff.org/certbot/

    # ./certbot-auto --debug -v

    # /usr/bin/certbot-auto renew --force-renew

     

  2. ”/opt/eff.org/certbot/venv/bin”直下にあるpipを使って以下のようにLet’s Encryptのモジュールを更新する方法

    //環境変数を削除

    # unset PYTHON_INSTALL_LAYOUT

    //Let's Encryptモジュールを更新

    # /opt/eff.org/certbot/venv/bin/pip install --upgrade certbot

1がだめだったら、2をやってみるとうまくいくかもと思います。

両方ともそれぞれが終わったら、Apacheの再起動を忘れずに。

基本cronで自動更新できるようにしたほうがらくだね、