画像をファイルとして保持するのではなくて、DBにバイナリとして保持する方法&表示する方法をメモっておきます。
まず画像をbase64_encode()でエンコードしてDBに登録します。
表示するときが少しめんどくさくて、以下のような感じでできました。
[HTML] hoge.html
<img src="view_image.php">
[PHP] view_image.php
$base64ImgData = DBから画像データを取得する処理();
header("Content-type: image/gif"); // gifの場合
echo base64_decode($base64ImgData);
imgタグのsrc属性に直接バイナリを記述する方法は、最近のブラウザでは対応してないものがあるんだそうで、上記のように画像出力用のPHPなどを用意するのが良いそうです。
まず画像をbase64_encode()でエンコードしてDBに登録します。
表示するときが少しめんどくさくて、以下のような感じでできました。
[HTML] hoge.html
<img src="view_image.php">
[PHP] view_image.php
$base64ImgData = DBから画像データを取得する処理();
header("Content-type: image/gif"); // gifの場合
echo base64_decode($base64ImgData);
imgタグのsrc属性に直接バイナリを記述する方法は、最近のブラウザでは対応してないものがあるんだそうで、上記のように画像出力用のPHPなどを用意するのが良いそうです。
PR
メールを大量に送信したい場合、mb_send_mail() ではなくPEAR::Mail あるいは PEAR::Mail_Queueを使用した方がいいとのこと。
mb_send_mailはメール送信の際にSMTPソケットを開閉するので、タイムアウトの原因になるんだとか。
参考サイトは以下の通りです。
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1016176975
www.drk7.jp/MT/archives/000890.html
ml.php.gr.jp/pipermail/php-users/2005-September/027438.html
あと、メールログが貯まりすぎて止まってしまうのではないか、という見解があったのでそちらも載せておきます。
oshiete1.watch.impress.co.jp/qa2507654.htmlokwave.jp/qa1167364.html
ちなみに、mb_send_mail()が大量のメール配信に向いていないことはドキュメントにもしっかり載ってます(笑)
mb_send_mailはメール送信の際にSMTPソケットを開閉するので、タイムアウトの原因になるんだとか。
参考サイトは以下の通りです。
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1016176975
www.drk7.jp/MT/archives/000890.html
ml.php.gr.jp/pipermail/php-users/2005-September/027438.html
あと、メールログが貯まりすぎて止まってしまうのではないか、という見解があったのでそちらも載せておきます。
oshiete1.watch.impress.co.jp/qa2507654.htmlokwave.jp/qa1167364.html
ちなみに、mb_send_mail()が大量のメール配信に向いていないことはドキュメントにもしっかり載ってます(笑)
MySQLで左に指定の文字を詰める関数があります。
[MySQL]
lpad('123', 5, '0');
ってやると、00123になります。
この関数をどうしてメモるかって、非常に検索しづらいからですな。
「桁合わせ」とか「001」とかで検索して四苦八苦しました(笑)
[MySQL]
lpad('123', 5, '0');
ってやると、00123になります。
この関数をどうしてメモるかって、非常に検索しづらいからですな。
「桁合わせ」とか「001」とかで検索して四苦八苦しました(笑)
全角文字のみ入力可能にしたい、という要求があったので調べてみました。
はじめはゴリ押しで半角文字を全部書くのを思いついたんですが、どうもスマートじゃないと思ったわけです。
正規表現で、英文の半角空白からチルダ (~)まで( !"#$%&'()*+,-./0〜9:;<=>?@A〜Z[\]^_`a〜z{|}~ )
をマッチさせるのは、以下のように文字コードを指定して書きます。
[正規表現と使用例]
$result = ereg("[\x20-\x7E]", $string]);
うーん、こりゃ便利!
他の案件でも使おっと(笑)
--- 2007/0704 追記 -----
コメントでもご指摘のあったように、2バイト目に「¥(半角)」なんかを含む文字は結構あるようです。
で、新しく考えたのは以下の通り↓。
[ PHP ]
if (ereg("(^|[^\x81-\x9F\xE0-\xFC])[\x21-\x7f]", $_GET["name"])){
echo '半角文字を含む!';
} else {
echo '半角文字を含まない!';
}
記号がマッチした場合、その直前の文字が「文字列の先頭」か「漢字コードの1バイト目で使われるコードではない」場合、記号を含むと判断しています。
とは書いてみたものの、まだ不安だなぁ・・・文字コード関連については時間を見つけて勉強しないと。
[参考文献]
www.kent-web.com/pubc/jcode/
www.psl.ne.jp/perl/pdojo00c.html
www.psl.ne.jp/perl/pdojo00b.html
ash.jp/code/unitbl21.htm
はじめはゴリ押しで半角文字を全部書くのを思いついたんですが、どうもスマートじゃないと思ったわけです。
正規表現で、英文の半角空白からチルダ (~)まで( !"#$%&'()*+,-./0〜9:;<=>?@A〜Z[\]^_`a〜z{|}~ )
をマッチさせるのは、以下のように文字コードを指定して書きます。
[正規表現と使用例]
$result = ereg("[\x20-\x7E]", $string]);
うーん、こりゃ便利!
他の案件でも使おっと(笑)
--- 2007/0704 追記 -----
コメントでもご指摘のあったように、2バイト目に「¥(半角)」なんかを含む文字は結構あるようです。
で、新しく考えたのは以下の通り↓。
[ PHP ]
if (ereg("(^|[^\x81-\x9F\xE0-\xFC])[\x21-\x7f]", $_GET["name"])){
echo '半角文字を含む!';
} else {
echo '半角文字を含まない!';
}
記号がマッチした場合、その直前の文字が「文字列の先頭」か「漢字コードの1バイト目で使われるコードではない」場合、記号を含むと判断しています。
とは書いてみたものの、まだ不安だなぁ・・・文字コード関連については時間を見つけて勉強しないと。
[参考文献]
www.kent-web.com/pubc/jcode/
www.psl.ne.jp/perl/pdojo00c.html
www.psl.ne.jp/perl/pdojo00b.html
ash.jp/code/unitbl21.htm
Webサイトに地図を載せようと思って、前からやってみたかったGoogleMapを使ってみることにしました。
まず気になったのは「商用利用可能なのか?」という点でしたが可能らしい、というか超推奨。
日本語では、
「マップ API は、非営利であればどんなウェブサイトでも無償で利用できるベータ サービスです。」(http://code.google.com/intl/ja_ALL/apis/maps/ から引用)
と、ダメっぽい表現になっていますが、実際には
「一般人が無償でアクセスできるWebサイトであればOK(メインコンテンツが無償でなければならない)」
ということなんだとか。
で、実際に利用してみました。
まずは、本家サイトから登録。
code.google.com/intl/ja_ALL/apis/maps/
そうすると、キーとサンプルコードがもらえます。
サンプルコードを流用すれば地図は表示できます。
大きさは地図が表示されるDIVタグの大きさを変えればOK(CSS)。
表示の初期位置はちょっと面倒で、ジオコーディングで緯度と経度を取得する必要があります。
自分はGoogleが用意してるWebツールを使ったのですが、ぶっちゃけわかりづらいです。
この点については、『Geekなページ』に便利なツールがあったので、使わせてもらうのが良いと思います。
マーカーやコントローラの設定など、わかりやすく解説されていてとても助かりました。
www.geekpage.jp/web/google-maps-api/
というわけで、細かい設定方法などは上記のサイト様に任せて(汗)、自分はハマった点を書いておこうと思います。
とりあえずFireFoxでは問題なく動いたんですが、IE7ではダメでした。
まず、バージョンの指定を「v=2」から「v=2.x」に変更し、最新バージョンを利用するように変更しました。
それでもなんだか表示崩れがありました。
色々ためして、以下の状態だと表示が崩れることがわかりました。
[HTML]
<a name="map"></a>
<div id="map"></div>
…えーと、IEはJavaScriptのgetElementById()でname属性も見るの…?
半ば脱力しながら実装が終了しました。
まず気になったのは「商用利用可能なのか?」という点でしたが可能らしい、というか超推奨。
日本語では、
「マップ API は、非営利であればどんなウェブサイトでも無償で利用できるベータ サービスです。」(http://code.google.com/intl/ja_ALL/apis/maps/ から引用)
と、ダメっぽい表現になっていますが、実際には
「一般人が無償でアクセスできるWebサイトであればOK(メインコンテンツが無償でなければならない)」
ということなんだとか。
で、実際に利用してみました。
まずは、本家サイトから登録。
code.google.com/intl/ja_ALL/apis/maps/
そうすると、キーとサンプルコードがもらえます。
サンプルコードを流用すれば地図は表示できます。
大きさは地図が表示されるDIVタグの大きさを変えればOK(CSS)。
表示の初期位置はちょっと面倒で、ジオコーディングで緯度と経度を取得する必要があります。
自分はGoogleが用意してるWebツールを使ったのですが、ぶっちゃけわかりづらいです。
この点については、『Geekなページ』に便利なツールがあったので、使わせてもらうのが良いと思います。
マーカーやコントローラの設定など、わかりやすく解説されていてとても助かりました。
www.geekpage.jp/web/google-maps-api/
というわけで、細かい設定方法などは上記のサイト様に任せて(汗)、自分はハマった点を書いておこうと思います。
とりあえずFireFoxでは問題なく動いたんですが、IE7ではダメでした。
まず、バージョンの指定を「v=2」から「v=2.x」に変更し、最新バージョンを利用するように変更しました。
それでもなんだか表示崩れがありました。
色々ためして、以下の状態だと表示が崩れることがわかりました。
[HTML]
<a name="map"></a>
<div id="map"></div>
…えーと、IEはJavaScriptのgetElementById()でname属性も見るの…?
半ば脱力しながら実装が終了しました。