【PHP】取得した現在日時が9時間ずれているときは

PHPでdateやstrtotimeで取得した現在日時が9時間ずれているときは、
日本ではないタイムゾーンが設定されている可能性があります。

まず確認すべきは php.iniのdate.timezoneの設定です。

になっていない場合は修正します。

もしレンタルサーバーなどの制限でphp.iniが編集できない場合は、コード上で

でタイムゾーンを設定できます。

ほとんどの場合はこれで解決なのですが、
たまに、外部ライブラリを使用していると
上記のようにタイムゾーンを指定しているにも関わらず
時間のずれが直らない場合があります。

そんなときは、strtotimeでずれた分だけ時間をずらし返してやりましょう。

スマートではないかもしれませんが
こういう臨機応変な対応もときにはアリだと思います。

【PHP】PHPExcelの処理が遅すぎるとき

PHPExcelはPHPでExcelのブックやシートを読込み、作成、出力できるライブラリです。

CSVではなくExcelで出力することで
はじめから可視化しやすい形で出力できるのですが、
データ量やシートの複雑さによっては
出力にかなり時間がかかるようになってしまうことがあります。

もし何も考えずにループの中で

を多用しているならば、チューニングによって
劇的に速くなるかもしれません。

例えば、帳票の出力などでは動的に行が増える場合が多いと思いますが、
ループの中で

のように1行ずつ追加していくような処理は、
かなりパフォーマンスが悪いようです。

そういうときには、追加する行数を計算してから

を1回実行することでパフォーマンスが向上します。

もし行数を計算するためだけに追加でループさせる必要があったとしても
1行ずつ

を実行するよりははるかに速い場合が多いようです。

また、

も、もしループの中で同じスタイルを1行ずつ実行しているのならば、
できる限りループの外で一括で実行することで
劇的にパフォーマンスが向上する可能性があります。

私の場合、実際にExcelで帳票を出力する場面があったのですが、
何も考えずに実装したときと、上記のとおりチューニングした場合とでは
10倍くらいの差がありました。

【Linux】pecl_httpがインストールできないときは

CentOS6、PHP5.3.3の環境でpecl_httpをインストールしようとしたところ、こんなメッセージが出ました。

最新バージョンのインストールにはPHP7.0.0以上が必要なようです。
しかしいくつものサービスが稼働中のサーバーでしたので
PHPのバージョンを上げるにはリスクがありました。

調べたところ、最新ではない古いバージョンのpecl_httpなら
インストールできるらしいので試してみました。

すると先程のメッセージは出ず、処理が進んでいくので

インストールできたー

と思ったら、次のようなメッセージで止まりました。

curlを入れろということらしいので
curlを入れます。

そして再び

これでインストールできました。
あとは /etc/php.ini に下記を追加します。

これでwebサーバーを再起動すればOKです。

【Linux】viで複数行を一括削除

viではブックマーク機能(mコマンド)を使って複数行を一括削除できます。

まず、削除したい最初の行と最後の行にマークをつけます。
マークをつけるのはmを押した後、任意のアルファベットですから、
たとえば最初の行で

と打ち、最後の行で

と打ちます。

次にコロンを打ってコマンドモードにして、

と打ちます。
「’最初のマーク,’最後のマークd」ですからわかりやすいですね。
これでaというマークを付けた行から
bというマークを付けた行までが一括削除されます。

【Linux】no local interfaceでPostfixの起動に失敗する

Postfixを起動しようとして「失敗」と出たら、
まずはログを確認しましょう。

/var/log/maillog

このようなメッセージがあり、ipv6を使用してない場合は
/etc/hosts を開いて

の行を削除しましょう。これで起動できる場合があります。