【Linux】CentOS6.5でPHP5.3をいきなりPHP7.1にする

PHPのシステム開発でPHP7以上が要求される案件も増えてきていると思います。

でもCentOS6.5での標準はすでにサポートが切れて久しいPHP5.3です。
そろそろ「PHP5.3で稼働しています」と言うのが恥ずかしくなってきました。

意を決してPHP7にバージョンアップすることにしたのですが、
まずは本番サーバーで試す前に
スタンバイサーバーでPHP7.1にバージョンアップしてみました。

すぐにWebサーバーを再起動して動作確認しましょう。

ちなみに私のサーバーでは、なんとPHP4の名残でコンストラクタの定義でクラス名を使っていたところがあって、エラーになってました。

【PHP】日本語でも英語でもない言語でのメール送信

日本語のメールを送信するプログラムとして

こんな感じのシステムがありました。(かなり省略してます)

これで日本語のメールは問題なく送信できるのですが、
このシステムをコピーしてベトナム語版を作ろうという話になりました。

WEBやメールの日本語の文言をすべて外だしにし、
言語に応じたメッセージを入れるように改修しました。

しかしベトナム語のメールが文字化けしました。

当然ですね。

この部分、

に修正、これで文字化けは解決、多言語に対応するメール送信プログラムになりました。

【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倍くらいの差がありました。

【TCPDF】HTMLからのPDF出力で社印(角印)を会社情報にかぶせたい

PHPからPDF出力が簡単にできるTCPDFですが、
その中でもさらに、HTMLタグでPDFが作成できる機能は
WEBアプリの開発者にとっては
とても簡単に成形されたPDFが作成できるので便利です。

最近のバージョンではHTMLのタグだけではなく、
スタイルシートもある程度は反映してくれます。
ただ、さすがにブラウザとは違うので
すべてのHTMLやスタイルの表現が使えるわけではありません。

WEBでPDF出力がよく使われるもののひとつに
「領収証の出力」
がありますが、
このとき紙の領収証と同じように
会社情報に社印(角印)を少しかぶせて表示させたいですよね。

ブラウザ上ならスタイルでいろんなやり方がありますが、
TCPDFのHTML変換機能では使えないものが多いようです。
いろいろ試した結果、実現できた方法はtableタグのスタイル「padding-top」でした。

例: