ブログ

  • 【MySQL】SQL発行時に日時計算(加算・減算)する方法

    PHP+MySQLを利用していて、DATETIME型のカラムに対して、直接、加算・減算をしたSQLの条件を指定したい場合の方法について覚書しておきます。

    もちろん、PHPで日時計算をして、変数に代入してからSQLに組み込むなどしても日時の加算・減算の条件付けはできるのですが、SQLの発行時点で加算・減算した方が楽に操作できます。

    MySQLの公式マニュアルにも記述があるのですが、MySQLのマニュアルは読みづらいと思うので要点をまとめてみました。

    (参考)公式マニュアル
    http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html

    該当するのはDATE_ADD DATE_SUBの箇所です。

    分かりづらいので、具体的なSQLを組んでみます。

    "SELECT count(id) as cnt FROM table  
    WHERE (date > (NOW() - INTERVAL 60 SECOND)",

    上記SQLは、dateカラムにある値が、現在時刻から60秒前以降の値のものを抽出して、そのidの数を数えるというものです。

    ポイントは、INTERVAL です。

    INTERVALの前にマイナス-・プラス+記号をつけることで、減算・加算ができます。

    +(-) INTERVAL 数値 単位 という構文になります。

    単位は、

    MICROSECOND
    SECOND
    MINUTE
    HOUR
    DAY
    WEEK
    MONTH

    など様々なものが使えます。公式マニュアルに詳しく載っているので参考にしてください。

    加算・減算の対象となるのは、NOW()関数だけではなく、DATETIME型の具体的な数値でもOKなようです。

    もう一つの方法は、DATE_ADD()、DATE_SUB() 関数を使用する方法です。

    (date >= DATE_SUB(CURDATE(), INTERVAL 10 DAY))

    CURDATE()関数は今日の年月日を返します。10 DAY の部分に日時に対応するものを置くと、日時を加算・減算することができます。

    上記例では、今日の日付から 10日前の年月日を返すことになります。

    ちなみに、INTERVALを利用せず、

    NOW()-60

    などとしてもエラーにならず値を取得することができます。

    ただし、-60ならば、60秒前となりますが、-100とすると100秒前ではなく、1分前となります。DATETIMEを数値の羅列にしたものから100を引く計算になるので1分前となるわけです。

    混乱を避けるためにも、INTERVALを利用した方がよさそうです。

  • WordPressサイトが開かなくなった時の対処法

    本日、当ブログにアクセスしたところ、なぜか、表示されない障害に遭遇。

    3~4時間ほど、あれこれ思案して、最終的には、ブログの手動バージョンアップ(アップグレード)で障害を解消しました。

    以下、その時の状況を覚書しておきます。

    まず、障害に気づいたのは、IEでアクセスした際、表示に時間がかかり、「このページは開くことができません。」とかいうエラーメッセージが表示され時点です。

    最初は、サーバーの障害、または、DNS障害かと思ったのですが、同一サーバーにある他サイトやブログは表示されるので、このブログ自体の障害と推測しました。

    しかし、ブログの障害の原因は特定できず。

    設定ファイルの異常かとも考えましたが、最近は、特に弄ってはいないので、設定ファイルの線は薄そう。 

    表示されない以上、どこかに不具合があるのは確かなので、思いきって、バージョンアップすることに。

    ただ、ブログが表示できないため、ログインしての自動バージョンアップではなく、FFFTPを使用して、手動でバージョンアップを実行しました。

    手動バージョンアップの手順

    1. WordPress日本語本家から、最新版のWordPressをダウンロード
    2. サーバーからwp-contentディレクトリをダウンロード(バックアップ)
    3. wp-config.phpファイル(設定ファイル)をダウンロード (バックアップ)
    4. .htaccessファイルをダウンロード (バックアップ)
    5. データベースをバックアップ
    6. wordpress直下のファイルを削除
    7. wp-adminディレクトリを削除
    8. wp-includeディレクトリを削除
    9. wp-contentディレクトリ内のlanguagesディレクトリを削除
    10. 削除したディレクトリ・ファイルの場所に、新ディレクトリ・ファイルをアップロード
    11. wp-config.phpファイルをアップロード
    12. .htaccessファイルをアップロード
    13. wp-admin/upgrade.phpにアクセスしてアップグレードを開始

    ディレクトリ・ファイルの削除、アップロードは、FFFTPを使用しました。まとめてアップロードするとフリーズするので、小さなディレクトリ単位で少しずつアップロードするのが良いと思います。

    また、最初にバックアップを取って置くと安心できます。データベースのバックアップも取っておいた方が良いでしょう。

    基本的な作業は、削除したところに、新バージョンのディレクトリ・ファイルをアップロードするだけです。wp-contentディレクトリは、language以外はそのまま残しました。

    今回はこれで上手くいきましたが、そうでない場合にはプラグインも削除・更新した方が良いかもしれません。

    結局、小一時間で作業は終了しました。

    表示されなかった不具合が解消され、ついでにバージョンアップもできたので良しとします。

  • 【vista】デフラグをコマンドプロンプトで実行する

    前回、パソコンのCドライブとDドライブを結合したので、ついでに新Cドライブのデフラグを実行しました。

    ただ、vista以降のパソコンでは、デフラグツールが簡素化されて、デフラグの実行状況などが判別できなくなっています。

    もっとも、デフラグをコマンドプロンプトから実行する場合には、比較的、詳細なデータを確認できるので、vistaや7でデフラグを実行する場合には、コマンドプロンプトを利用するのも一つの方法です。

    【デフラグをコマンドプロンプトで実行する方法】

    スタートメニュー → アクセサリ → コマンドプロンプト と進みコマンドプロンプトを実行します。

    この際に、コマンドプロンプトを選択し、右クリックで『管理者として実行』から開くことが必要です。

    プロンプトが C:¥Windows¥system32> となっていればOKです。

    以下のコマンドを打つと利用法が表示されます。

    defrag -?

    ハイフンの前には半角スペースが必要です。
    ここで表示される説明を読むと、ほぼ使い方がわかります。

    デフラグコマンドプロンプト

    Cドライブをデフラグするなら

    defrag c:

    と打てば良いわけです。

    とりあえず、まずは、デフラグ前の情報を表示するのが良いでしょう。

    defrag c: -a

    このコマンドを打つと詳細が表示されます。ただ分析に数分かかることもあるので表示されるまでしばらく待ちます。

    詳細表示がされデフラグを実行する必要があれば、詳細モードを指定してデフラグを実行します。

    defrag c: -v

    こうすることで、デフラグツールでは表示されない、詳細データを確認しながらデフラグを実行することができます。

    デフラグ後確認すると以下のようになります。

    デフラグ結果

    簡単なコマンドでデフラグの詳細を確認できるので、コマンドプロンプトを利用してデフラグをするのがオススメです。

  • 【vista】Cドライブの容量不足解消法 ~CドライブとDドライブを統合(結合)する~

    現在、自分がメインで使っているパソコンの内臓ハードディスクは、CドライブとDドライブに分かれているのですが、Cドライブが46GB、Dドライブが87GBという構成であり、使っているうちにCドライブの容量が逼迫し足りなくなってきました。

    容量を圧迫するデータである、写真、音楽、ビデオファイルをすべてDドライブに移動しても、Cドライブの残りが1GBを切ったのでやむなく、CドライブとDドライブを結合した次第です。

    以下、その時の作業を覚書しておきます。
    なお、お約束ですが、作業は自己責任でお願いします。

    【CドライブとDドライブの結合方法】

    まず、CドライブとDドライブの結合にあたり、Dドライブのデータをすべて外付けHDDなどにバックアップします。

    Dドライブのデータをバックアップしておかないと結合後にデータを戻すことができません。

    次に、スタートメニューから、

    コントロールパネル → システムとメンテナンス → 管理ツール → コンピュータの管理 → 記憶域 → ディスクの管理

    と進みます。(図1)(図2)

    (図1)

    コンピュータの管理

    (図2)

    ディスクの管理

    結合する前には、Dドライブが表示されているのがわかります。

    なお、原則として、[ボリュームの拡張] が行えるドライブは、そのすぐ”右隣”に [未割り当て領域] もしくは [空き領域] を作成できるドライブに限られます。

    このDドライブを選択し右クリックします。

    『ボリュームの削除』という項目があるので、クリックします。するとバックアップを促す注意が表示されます。(図3)

    (図3)

    注意

    バックアップを取ったことを確認してから、『はい』を選択します。するとDドライブが削除されます。

    この段階では、まだ、Cドライブは増えていないので、今度は、Cドライブを増やす処理を行います。

    (図2)の画面で、Cを選択して右クリックをします。すると『ボリュームの拡張』という項目が表示されるので、クリックします。次に、『ボリューム拡張ウィザード』という画面が表示されるので指示にしたがっていきます。(図4)

    ボリューム拡張ウィザード

    ウィザードが終了すると、Cドライブが拡張されて、容量が増えていることが確認できます。

    (図5)

    cドライブとdドライブの結合

    以上で、CドライブとDドライブの結合は終了です。

    CドライブとDドライブを分けて使う必要がなく、Cドライブの容量不足に悩まされているなら、この方法を使うと、パソコンの初期化が不要で、10分前後で作業が終わるのでオススメです。

  • 【書評】体系的に学ぶ 安全なWebアプリケーションの作り方

    『体系的に学ぶ 安全なWebアプリケーションの作り方』 徳丸浩(著)の書評です。

    良い点

    • WEBアプリへの攻撃を具体的に体験できる
    • ほぼすべての脆弱性とその対策を網羅
    • 実習環境とサンプルスクリプトを完備
    • 主にPHPで解説
    • 文章が読みやすく理解しやすい

    悪い点

    • 初心者には若干ハードルが高い

    総評

    WEBアプリケーションのセキュリティに関し、現時点で最高の本です。

    セキュリティに関するトピックを網羅していながら、詳細で具体的な解説が多く理解しやすくなっています。

    予め用意されている実習環境を構築することで、攻撃手法とその防御策を実際に体験し学習することができます。

    解説に用いられている言語は、9割ほどがPHPなのでPHP既習者には特にお勧めです。PHP未学習者は、その点に注意が必要です。

    もっともPHPなどの言語そのものの解説はないので、初心者ならばPHPの入門書を何冊か読んだ後にこの本を読むのがお勧めです。

    この本はセキュリティだけで450ページ以上あるので、PHP入門書でセキュリティの基礎を学んでおくと途中で挫折することなく最後まで読みきれると思います。

    体系的に学ぶ 安全なWebアプリケーションの作り方