今日のチェキ 2008-02-28
最近の携帯メールアドレスのドメインには「disney.ne.jp」「bandai.jp」も候補に加えなきゃならんらしい
■NTT東西、NGNサービスの名称「フレッツ 光ネクスト」と料金案を公表
Next Generation Network – Wikipedia
最近の携帯メールアドレスのドメインには「disney.ne.jp」「bandai.jp」も候補に加えなきゃならんらしい
■NTT東西、NGNサービスの名称「フレッツ 光ネクスト」と料金案を公表
Next Generation Network – Wikipedia
Cドライブ直下のwebdavフォルダ利用、VPN、localhostからのみSSLにて通信可能。
認証は設けない。
サーバは引き続きApache2.2onSSL。
SSLの利用の仕方は別途(WindowsのApache2.2でSSLを利用する)。
confの設定
conf/httpd.conf
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_lock_module modules/mod_dav_lock.so
↓
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_lock_module modules/mod_dav_lock.so
#Include conf/extra/httpd-dav.conf
↓
Include conf/extra/httpd-dav.conf
こっちは全般的に書き直し
conf/extra/httpd.conf
Alias /webdav "C:/webdav"
<Directory "C:/webdav">
Dav On
Order Deny,Allow
Denny from all
Allow from 5.0.0.0/8 #Hamachi VPN
Allow from 127.0.0.1
SSLRequireSSL
</Directory>
Lockファイルがないので作成します。
コマンドプロンプトかファイル名を指定して実行で。
touch C:/Program Files/Apache Software Foundation/Apache2.2/var/DavLock
Apacheの再起動で終わり。
RingServer等からopenssl組み込み済みのバイナリを取得する。
今回は「apache_2.2.8-win32-x86-openssl-0.9.8g.msi」
インストーラでデフォルトのままインストール。
コマンドラインから秘密鍵(server.key)、公開鍵(server.csr)、証明書(server.crt)を作成する。
cd C:\Program Files\Apache Software Foundation\Apache2.2\bin
openssl.exe genrsa -out ../conf/server.key 1024
openssl.exe req -new -key ../conf/server.key -out ../conf/server.csr -config ../conf/openssl.cnf
openssl.exe x509 -in server.csr -out ../conf/server.crt -req -signkey ../conf/server.key -days 365
公開鍵作成時にいろいろ質問されます。
httpd.confのコメントアウトをはずす。
#LoadModule ssl_module modules/mod_ssl.so
↓
LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf
↓
Include conf/extra/httpd-ssl.conf
Apache2.2を再起動する。
PHPでのメール送信の場合、直接ポート叩いてくれとか言われた。
特殊な環境ではなく偉大なる先人がPHPのmail使えねとレッテルを貼ったようだ。
先人はそもそもmbstring関数まわりの扱いが間違っているんですが。
mb_send_mail
マニュアルにあるとおり、mb_language()の設定に基づき変換されます。
「ja」、「japanese」を指定した場合「内部エンコードからISO-2022-JP」に変換され送信されます。
大体この関数に渡す前にmb_convert_encoding()でISO-2022-JPに変換して文字化け起こしてるケースがほとんど。
mb_encode_mimeheader
第二引数を省略した場合はmb_language()の設定に基づいて変換された上でヘッダ用にBASE64エンコードと文字列追加が行われます。
「ja」、「japanese」を指定した場合「内部エンコードからISO-2022-JP」に変換されます。
結果が長い場合はCRLFで改行されるので(本来はそれが正しいのですが)CRは削除したほうがよさげです。
スクリプトをEUC-JPで書いてるならphp.iniの設定は以下の2つは必須です。
mbstring.language = japanese
mbstring.internal_encoding = eucJP-win
スクリプト内でも関数を用いて上記の値は変更可能なので環境によっては利用前に設定する方向で。
mb_send_mailを利用した場合
$subject = "サブジェクト";
$body = "本文";
$to = "to@example.jp";
$from = "from@example.jp";
mb_language('japanese');
mb_internal_encoding('eucJP-win');
$header = "From: ".$from;
$sendmail_param = "-f".$from;
mb_send_mail($to, $subject, $body, $header, $sendmail_param);
mailを利用した場合
$subject = "サブジェクト";
$body = "本文";
$to = "to@example.jp";
$from = "from@example.jp";
mb_language('japanese');
mb_internal_encoding('eucJP-win');
$subject = str_replace("\r", "", mb_encode_mimeheader($subject));
$body = mb_convert_encoding($body, 'ISO-2022-JP');
$header = "From: ".$from."\n".
"Mime-Version: 1.0\n".
"Content-Type: text/plain; charset=ISO-2022-JP\n".
"Content-Transfer-Encoding: 7bit";
$sendmail_param = "-f".$from;
mail($to, $subject, $body, $header, $sendmail_param);
PEAR::Mail
require_once 'Mail.php';
$subject = "サブジェクト";
$body = "本文";
$to = "to@example.jp";
$from = "from@example.jp";
mb_language('japanese');
mb_internal_encoding('eucJP-win');
$subject = str_replace("\r", "", mb_encode_mimeheader($subject));
$body = mb_convert_encoding($body, 'ISO-2022-JP');
$header = "From: ".$from."\n".
"Subject: ".$subject."\n".
"Mime-Version: 1.0\n".
"Content-Type: text/plain; charset=ISO-2022-JP\n".
"Content-Transfer-Encoding: 7bit";
$mail =& new Mail::factory("mail");
$mail->send($to, $header, $body);
PEAR::Mailはソースみたけど国際化はもちろん74文字折畳みとかされないので結局自前でエンコードしてからセットとなります。
PEAR::Mailはファイル添付やHTMLメール、デコメールでPEAR::Mail_mimeと合わせて使うのならって感じ。
mb_send_mail超簡単。
一般的ではないエンコード、EUC-JP、UTF-8、絵文字メール(Shift_JIS)、機種依存文字の入ったメール(ISO-2022-JP-MS)で送りたい場合は、独自でヘッダを書いてmail関数で送るといいと思うよ。
{html_select_date}
使えないという前にまずマニュアル嫁。
わからんかったらソース嫁。
○結果をbirthdayという配列で取得したい。
field_arrayを利用する。
prefixが邪魔なので削除。
prefix="" field_array=birthday
これで以下な感じにで受け取れる。Year、Month、Dayはソース直書きなのであきらめ。
var_dump($_GET);
/*
array(1) {
["birthday"]=>
array(3) {
["Year"]=>
string(4) "2008"
["Month"]=>
string(2) "01"
["Day"]=>
string(2) "29"
}
}
*/
○未選択時「年月日」と表示させたい
year_empty="年" month_empty="月" day_empty="日"
しかし、これだけだと今日の日付が選択される。
timeを指定してあげればいけそう。
timeはtimestampかパースできる文字列を設定してあげればよさげ。
year_empty="年" month_empty="月" day_empty="日" time="0000-00-00"
●最終的にこうなりました。
{html_select_date prefix="" field_array=birthday field_order=YMD year_empty="年" month_empty="月" day_empty="日" start_year=1900 time=0000-00-00}
PHP5.2で2039年以降扱えるとかいわれましたが、それはDatetimeクラスのことであって、関数では無理です。
C:>php -v
PHP 5.2.5 (cli) (built: Nov 8 2007 23:18:51)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
with Xdebug v2.0.0, Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, by Derick Rethans
C:>php -r "var_dump(strtotime('2038-01-01'));"
int(2145884400)
C:>php -r "var_dump(strtotime('2039-01-01'));"
bool(false)
C:>php -r "$date = new Datetime(); $date->setDate(2039, 1, 1); var_dump($date->format('Y-m-d'));"
string(19) "2039-01-01"
C:>php -r "$date = new Datetime(); var_dump(get_class_methods($date));"
array(9) {
[0]=>
string(11) "__construct"
[1]=>
string(6) "format"
[2]=>
string(6) "modify"
[3]=>
string(11) "getTimezone"
[4]=>
string(11) "setTimezone"
[5]=>
string(9) "getOffset"
[6]=>
string(7) "setTime"
[7]=>
string(7) "setDate"
[8]=>
string(10) "setISODate"
}
5.2.0で追加されたクラスにDatetimeクラスについて記述がありますが、マニュアルありません。
ソース読むか、methodから推測しろってことですか?