datetime型をunix timestampに一発変換

2009/01/08 | MySQL

最近はあまり使うことはないのだが、以前はカラムを定義する際にdatetime型やdate型をよく使っていた(最近はint型にしてunix timestampでデータを入れるのが好き)。当然のことながら昔作ったプログラムをリニューアルするとき、違和感を覚えることがある。そんなときに便利な関数がunix_timestamp。例えばSELECT文で、以下のように使用する。

SELECT unix_timestamp(timestamp_type_column) FROM table

これでdatetime型やdate型の値をunix timestampにして返してくれる(ちなみにその逆の関数はfrom_unixtime)。SQL文を発行する際にその都度関数を呼び出してもいいだろうけど、それではオーバーヘッドがバカにならないこともある(もちろん相応の負荷があるサイトの場合だが)。なので、元のテーブルを、上記の関数やその他の関数を使って一旦吐き出し、新しいテーブルを作ってそこにデータを流し込むほうがいい。でも、型の変更が原因で諸々問題が出る可能性があることを理解して使わないといけないけれど。

ウェブページのサムネイルをWindowsサーバで

以前、ウェブページのサムネイル生成をLinuxサーバ環境で構築する方法をさんざん検討し、なんとか実現できることを確認できた。でも格安レンタルサーバ(もしくはVPS)で構築するのはかなり面倒そう。最近はWindowsのレンタルサーバもたくさん出てきたので、Windowsサーバでウェブページサムネイルを作成する方法を探してみた。あっけなく見つかった。

記事元はサイボウズラボの秋元さんとかDo You PHPの下岡さんとか。さすがに識者だ。以下下岡さんのサイトにあったものを引用。

<?php
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;

$browser->Visible = true;
$browser->FullScreen = true;
$browser->Navigate("http://www.doyouphp.jp/");

/* Is it completely loaded? (be aware of frames!)*/
while ($browser->Busy) {
    com_message_pump(4000);
}
$im = imagegrabwindow($handle, 0);
$browser->Quit();

$new_x = 320;
$new_y = imagesy($im) * $new_x / imagesx($im);
$newim = imagecreatetruecolor($new_x, $new_y);
imagecopyresized($newim, $im, 0, 0, 0, 0,
  $new_x, $new_yimagesx($im), imagesy($im));
imagepng($newim, "test.png");

imegecopyresizedはimagecopyresampledに変更して使うとのこと。この部分は以前トリミングプログラムを作成したときに把握したところだ。さっそくどこかサーバを借りて試してみたいところではあるけれど・・・。


					

RewriteEngin Onするだけで403 Forbidden

2008/12/26 | apache

mod_rewriteを使おうと、.htaccessに適当に記述してサーバにアップロードし、動作確認をした。

403 Forbidden

えー。意味わかんない。記述間違いでInternal Server Errorなら理解できるのに。もしや書き換え後のURLがアクセス不能になっているのか、と思ったらそうでもない様子。

共用レンタルサーバなんだけど、mod_rewriteがそもそもインストールされていないのか(だったら500エラー?)。あと仮にmod_rewriteがインストールされていても、Apacheの設定で「FollowSymLinks」が有効になっていないとダメらしい。

いろいろ難しいね。

あなたはこのページにアクセスする権限を持っていません

2008/12/21 | SNS/CMS/ブログ

WordPressでこんなエラーが出た。いやいや、自分が管理者で間違いないですけど。ちなみに、エラーが出たWordPressのバージョンはME2.2.1。

何らかの原因で文字コードが変わったりするとこのエラーが出るらしい。例えばデータベース内のテーブル「wp-options」の「wp_user_roles」というところには管理権限に関する情報が書かれている。ここの値は配列がシリアライズして記述されているので、日本語が入っていて文字コードが変わったりすると影響が出て、その結果として権限情報が取得できない、みたいな感じなんだろう。とりあえず、この行がうまく取得できなかった場合にエラーが出そうだ。

で、調べてみたけど、文字コードは変わっていなかった。で、なぜ、エラーが出るのか。

実はWordPressを移設しなくてはならない事情ができて、その際にテーブル名を変えた。デフォルトで入力した際「wp_」だったところを「www_wp_」に変えた。もちろんwp-config.phpの中で$table_prefixの値は書き換えたので、表面上は問題なく表示されていたっぽい。でも、実はwp-config.phpを編集するだけではいけなかった。変更する箇所はデータベース内に3点あって、まずそれらを探す(以下のリスト)。

  • wp_optionsでカラム「option_name」で”wp_user_roles”の値を持つ行
  • wp_usermetaでカラム「meta_key」で”wp_capabilities”の値を持つ行
  • wp_usermetaでカラム「meta_key」で”wp_user_level”の値を持つ行
一見、上記の行を見ても、何もおかしそうな箇所はない。それぞれの値と思われるカラムのデータを見てもwp_っていう文字列が見当たらない。でも、実はそういう問題ではなかった。上記3つの名前そのものがいけないのだ。正しくは以下のように修正。
  • 「wp_user_roles」を「www_wp_user_roles」
  • 「wp_capabilities」を「www_wp_capabilities」
  • 「wp_user_level」を「www_wp_user_level」
こんなところにもテーブル名のprefixが効いてくるとは。PHPでかかれたブログとしてはWordPressが一番メジャーだし、このブログでも使っている。でもいくつか「いただけない部分があるなー」とは思っていたけれど・・・。これって仕様がよくないような気がする。なんだか・・・取って付けたような修正をしていった結果、1箇所変更しただけではうまく変更が効いてくれない、みたいな。まぁ、我慢して使うしかないけれど。

携帯で拡張子のないファイル(画像)を取り扱う

2008/12/19 | その他, ケータイ

それは無理。でも楽をして拡張子なしで画像を保存してしまったので、何とかしなければならない。

その1. mod_rewrite

RewriteEngine On
RewriteRule ^/(.*)\.jpg /image.php?id=$1

.htaccess等で上記のように指定する。画像を呼び出すためのimgタグには、画像ファイルへのパスに「.jpg」と拡張子をつけて出力しておく。こうするとURLが自動的に切り替わり、ファイル名を引数に与えてimage.phpが呼び出される。適宜処理して画像を出力すればいい。

その2. 拡張子.jpgをPHPプログラムとして認識させる

<Files ~ “^image\.jpg$”>
AddType application/x-httpd-php .jpg
</Files>

.htaccessで上記のように指定する。これでimage.jpgはPHPプログラムとして処理される。画像を呼び出すためのimgタグには、image.jpg?id=(ファイル名)のように記述する。これでimage.jpgが呼ばれると、適宜処理して画像を出力すればいい。

携帯向けの場合、画像ファイルの拡張子の後ろに?id=とつけるのは気持ち悪いが手持ちの3キャリアの各端末では表示できたので、とりあえずよしとする。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net