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

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

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

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

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

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

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

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

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

【ツール】パスワード生成ツール(複数生成版)

パスワードを自動生成するツール

https://clouds.tokyo/blog/create_pswd

の複数生成版を作ってみました。
最大1000個のパスワードを一瞬で生成できます。
大量のパスワードを一括生成したい場合はこちらをどうぞ。

すべてブラウザ内(javaScript)で処理が完結し、サーバーにログなど一切残りませんので安心してお使いください。

【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というマークを付けた行までが一括削除されます。