PHPで月末の日付を取得する

12月 23rd, 2008

今まで知らなかったんですが以下の方法で取得できるそうです。

date('y-m-t');

date()関数の日付部分に「t」を指定するだけ。もちろん第2パラメータで指定された日付に従った月末日を返します。

echo date('y-m-t', strtotime('2008-02-01'));
//2008-02-29
このエントリーをはてなブックマークに追加
はてなブックマーク - PHPで月末の日付を取得する

PHP

超久々の更新

7月 28th, 2008

超久々の更新です。書く事があんまりなかったりコメントスパムの対処が面倒くさかったり、Wordpressのバージョンアップをさぼってたらいつの間にか自動アップデートが出来なくなっていたり(さすがに2.0→2.6はいきなりは無理だった)で、モチベーションが下がりきっていたんですが、
今日、重い腰を上げて手作業で2.0から2.6へ移行させてみました。CMS側がかなりリッチになってます。コメントスパム対策もばっちりです(実はWordpressには標準でそういうプラグインが入っていた・・・)。
大分環境が快適になったので、相変わらず書く事があまりないけどそのうちまた更新しようと思います。

とりあえず今日は簡単な近況報告。

  • 新しくWebアプリを作ってみようと思います。今は企画中。アイデアが固まってきたら記事にするつもりです
  • 会社でやっているJavaの勉強会に参加する事になりました。ちょっとずつ覚えて行こうと思います
このエントリーをはてなブックマークに追加
はてなブックマーク - 超久々の更新

Information

「2>&1 >/dev/null」は間違い

9月 11th, 2007

出力結果を完全に破棄するシェルスクリプトを書く時、よく

/usr/bin/php -q xxx.php 2>&1 > /dev/null

という具合に書いていたんですが、そうやって破棄し続けている筈のデータがなぜか/var/spool/mail/rootに溜まり続けていました。
おかしいと思って調べてみたら、やっぱり間違ってました。

正解は以下の通り。

/usr/bin/php -q xxx.php > /dev/null 2>&1

今回は以下のサイトを参考にさせてもらいました。
シェルのリダイレクトにまつわる失敗

このエントリーをはてなブックマークに追加
はてなブックマーク - 「2>&1 >/dev/null」は間違い

Linux ,

MySQL、SSHの認証が重い、遅い

9月 3rd, 2007

先日、朝出社してみたら突然お客さんの使ってるシステムにアクセスできなくなるという問題が起きました。
DBに接続しないページは見れるので原因はDBサーバーにあるだろうと思い話を聞いてみると、何でもWEBシステム上(WEBサーバー)から繋ごうとするとNGだとか。
付け焼刃的な対応ですんなり直ったことは直ったんですが、原因が意外で驚いたのでメモ。

ググってみたら同じような問題に遭遇した人が何人かいたため参考にさせてもらいました。

MySQLが認証時にクライアントのIPアドレスの逆引きを行っているのに、クライアントのIPの逆引き設定が行われていないことが原因だったようで、名前解決だけで10秒以上かかる状態のため、認証待ちの接続が溜まり過ぎてWEBシステムにアクセス出来なくなっていたようです。
max_clientの設定値は1000とかに設定していたんですが、実際には100~200程度でアクセスできない状態となっていました(この辺りは”mysqladmin processlist”で確認できるらしい)。

とりあえず、MySQLの場合はuserテーブル内でホスト名に”xxx.com”のようにドメイン名を使わなければ問題なさそうで、幾らか接続のオーバーヘッドも解消できるようなのでmy.cnfに”skip-name-resolve”を付け、再起動して対応しました。

後から気が付いたんですがSSHも同様でした。
今後認証周りが極端に遅い時は名前解決に問題がないかも疑ってみよう。と思いました。

このエントリーをはてなブックマークに追加
はてなブックマーク - MySQL、SSHの認証が重い、遅い

MySQL, Network ,

fgetcsv()でファイルを読み込むと日本語が消える?

8月 21st, 2007

久々にPHPでハマりました。
CSVデータの解析をする時に良く使うfgetcsv()ですが、ある環境で使おうとしたら解析結果から日本語が消えているという現象が発生しました。
ググってみれば割とすぐに引っかかるけどあまり有名な話ではないような気がするのでメモ。

オフィシャルによると、fgetcsv()はロケールを意識するとのことです。
今回この現象が発生したサーバーは環境変数のLANGが”en_US.UTF-8″にセットされていたため、この値が参照されていたと思われます。

注意: この関数はロケール設定を考慮します。もし LANG が例えば en_US.UTF-8 の場合、 ファイル中の 1 バイトエンコーディングは間違って読み込まれます。

PHP: fgetcsv – Manualより

解決策としては以下の方法があるようです。

  1. 日本語を使用する際はフィールドをダブルクォートで囲む
  2. setlocale(LC_ALL, ‘ja_JP.EUC’);等で一時的にロケールを変更する

前者の方法はエクセルが保存するCSVに対してフレンドリーではないのであまり好ましくない気がします(手作業で返還するか変換スクリプトを作ることになる)。

このエントリーをはてなブックマークに追加
はてなブックマーク - fgetcsv()でファイルを読み込むと日本語が消える?

PHP , ,