PHPプロ!TIPS+

1. strftime関数で頭に0がつかない月表示をする

現在もしくは指定した任意の時間の「月」表示をする際、date関数では 'n' を指定する事で1~12の「頭に0がつかない月の値」を取得する事が出来ますが、strftime関数を利用する場合はフォーマット文字列の中に月を10進数で0をつけずに取得するものがありません。ですがちょっとした記述で0を取り除く事ができ、smartyのhtml_select_date等でも汎用的に利用できるようになります。

smartyのhtml_select_dateを利用している時に、月の表示部分やvalueの部分に0がついていない月の表示をしたい時などはありませんか?

month_formatやmonth_value_formatで定義をする事になりますが、ここに記述した値はstrftime関数を通して出力されるため、

{html_select_date field_order="YMD" month_format="%m月"}

と記述すると、01月~09月となってしまい、頭に不要な0がついてしまいます。php内部で処理するための値であればそこまで気にならないかもしれませんが、表示部分で気にする人がいてダメ出しされる場合もあるでしょう。

そこで、month_format="%m月"の「%m」の部分を「%-m」に書き換えてみましょう。これで頭の不要な0を取り除く事が出来ます。

但しこれはstrftime関数のマニュアルの部分にも記述されているのですが、プラットフォームによって動作しない場合があります。

http://www.phppro.jp/phpmanual/php/function.strftime.html

上記の例ですと、XAMPPを利用している方でローカルテストした方はすぐに気がつくと思いますが、Windowsシステム上では動作しません。

この場合「%-m」ではなく「%#m」と、ハイフンの代わりにシャープを記述すると動作します。

Windowsシステム上での記述ルールに関しては、MSDN のウェブサイトにて確認が出来ます。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_strftime.2c_.wcsftime.asp

0詰めの記述の他にも、Windowsシステム上では%e、%T、%R、%Dなどの一部記述が使えない等の違いがあるので、プラットフォームが変わった時などは注意しましょう。

2. PHPの設定ファイルを分離する

PHP言語の特徴の一つに、php.iniによる言語設定があります。デフォルトの設定のまま運用している人も多いかもしれませんが、サーバーごと、バーチャルホストごと、ディレクトリごとなどで、設定項目を変更したい事が多くあると思います。このTipsでは、これらの設定を別々のファイルに分割し、メンテナンス性を向上させる方法を紹介します。

2006年9月1日号のTipsメーリングリストにて、php.ini以外でも設定できる事を紹介しました。

この方法を使うと、ディレクトリごと、バーチャルホストごとに、設定を行うことができます。

実はもう1つ、php.iniと同列であるPHP_INI_SYSTEMレベル設定を、別のファイルに分離する方法があります。

PHPのconfigureオプションに、--with-config-file-pathと共に、--with-config-file-scan-dirという設定項目があります。

これらの意味は、以下の通りです。

  • --with-config-file-path:php.iniファイルのある場所を指定します
  • --with-config-file-scan-dir:設定ファイルを読み込むディレクトリを指定します

前者はデフォルトでは、/usr/local/libに設定されます。そのため、php.iniファイルはこのディレクトリにある必要があります。また、後者のディレクトリを指定することで、php.ini以外のファイルを、php.iniの後に読み込むことができるようになります。

このテクニックを使うと、php.iniはPHPのデフォルトで提供されるものをそのまま修正せずに使用し、独自に設定したディレクトリにてサーバー固有の設定を指定する、といった事が可能になります。

これに伴い、php_ini_scanned_files関数が用意されています。この関数は、php.ini以外に読み込まれたファイルが返されます。

バックナンバーについて

TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。

Tipsꗗy[W 

Pick Up Q&A

Q
PHPでのRSS表示までの流れについて
 このエントリーをはてなブックマークに追加 
A
get_headers()だとフィードを重複取得したり、宜しく無い様なので、 この件は忘れて、フィード内の以下の値をチェックしてください。 RSS1.0: channel>d:date RSS2.0: channel>lastBuildDate ATOM: modifi...

>>続きを読む

phpファイルをどう分けるか、といった問題は経験のある人に相談すると安心できますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)