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

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

EC-CUBE3でカートに商品が入らなくなった際の対応方法

EC-CUBEは、現在バージョン4をが最新バージョンですが、まだまだ、バージョン3を使っているかたもいらっしゃるかと思います。

バージョン3を使っていて、エラーとか、プログラム変更とかはしてなくて、急にカートに商品が入らなくなった場合、PHPのバージョンが7.2以上になってしまっていないか確認してみてください。

なってしまっていたら、PHP7.1に戻して動くか確認してみてください。この対応で大体なおります。どうもPHP7.3では、EC-CUBE3は、細かい不具合がでてしまうようなので、使っている方は、気をつけてください。

シェルを使ってcURLでHTTPステータスコードだけを取得する

大量のホームページを管理している場合、ここのホームページの状態を監視するのは、大変な場合がある。全ページを監視するのは、大変なので、すくなくとも、トップページだけでも、監視するには、以下のコマンドをつかうと結構らくにできます。

 

$ curl -LI ドメイン名 -o /dev/null -w '%{http_code}\n' -s
200

 

 -w (write out)で http_code を指定しつつ、他は -o (output)で /dev/null にでも捨てる。 そして -s (silent)を指定して「進捗どうですか?」を表示しないようにしています。

あとは、は、whileなどを使えば、複数サイトを管理することができますので、試してみてください。

.htaccessを使ってhttpからhttpsにリダイレクトする方法

今は、ホームページをSSLにして、https通信をさせるようにして、セキュリティを向上させるのが当たり前になっています。

だが、まだまだ、httpのままのホームページがあり、新たにhttpからhttpsに変更した際、ホームページに訪問した人やGoogleなどの検索エンジンにしらせるために、強制的にリダイレクトをさせる必要があります。

一番簡単な方法は、.htaccessに以下を追加すれば、かんたんにhttpからhttpsにリダイレクトされます。

 

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

 

SEO対策のために、リダイレクトの際、必ず、HTTPステータスを301にするようにしてください。

※サーバによって使用できない場合があります

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とアパッチの再起動をすれば、反映完了となります。

 

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