PHP:PHPListをCORESERVERで動かす

メルマガをWordPressでできないか?ということについて、以前に調査していたのだが、やりたいことに該当する方法ではなかったので、オープンソースのメルマガ発行ソフトのPHPListを使うことにしようかと思って調査したのでメモ。ちなみにWordPressとPHPListを繋ぐPHPList Form Integrationというプラグインがあるのでこれを使う予定。

参考にさせていただいたサイト

ではいきまーす。

  1. まずはここからPHPListの日本語化されたものをダウンロード。
    http://www.d-ip.jp/download/pivot/entry.php?id=14
  2. ダウンロードしたファイルを解凍し、public_html直下にあるlistsディレクトリをWordPressと同じディレクトリに入れる。
  3. lists/config/config.phpを修正する。インストールするデータベース名、データベースユーザ名、パスワードなどを修正。ここはWordPressと同じものでOK!!あとPLUGIN_ROOT_DIRが原因でエラーが出てたので、コメントアウトしておいた(この辺りはよくわかってない)。TESTの値も0にしておく(そうしないとメール送れないので。後で0にしてもよい。)
  4. PHPがsafe modeで動いてると問題があるかもね!というメッセージが出続けるので、CGIモードで動かすために、lists/admin/.htaccessに以下を追加する。
    AddHandler application/x-httpd-phpcgi .php
  5. CGIモードで動くとphp.iniの情報が変わってしまうので、独自に設定するためにlists/admin/以下にphp.iniを作成する。
    magic_quotes_gpc              = On
    register_globals              = Off
    session.auto_start            = Off
    mbstring.http_input           = pass
    mbstring.http_output          = pass
    mbstring.encoding_translation = Off
    # /tmp以下にセッションファイルが作れないというエラーが出たので、
    # 自分のディレクトリ直下にtmpを生成しておくこと
    session.save_path = "/virtual/********/tmp"
    
  6. http://自分のWordPressのドメイン/lists/admin/にアクセスし、PHPListをインストールする。
  7. 管理者のパスワードを変えておく。
  8. インストールが問題なく終わったら、サンプルでインストールされているリスト(メルマガのこと)をアクティブにしておく(WordPressのプラグイン経由でPHPListを使うため)。
  9. CORESERVERのcronを使ってメルマガ配信するために、シェルスクリプトを作成する。名前はphplist.shとした。
    #!/bin/sh
    wget -q -O - 'http://自分のWordPressのドメイン/lists/admin/index.php?page=processqueue&login=管理者名&password=パスワード' >/dev/null
    

    このファイルは/virtual/********/phplist.shに置いた。実行権限を与えておくこと(705)。

  10. CORESERVERのcronに/virtual/********/phplist.shを登録する。
    普通のサーバのcronならば、

    */15 * * * * /virtual/********/phplist.sh
    

    でよいと思うのだが、CORESERVERでは分に入力できる文字列が2文字までみたいなので、*/15と入力できなかった!やっていいのかどうかはわからないが、4行分使って、

    0 * * * *  /virtual/********/phplist.sh
    15 * * * *  /virtual/********/phplist.sh
    30 * * * *  /virtual/********/phplist.sh
    45 * * * *  /virtual/********/phplist.sh
    

    と設定しておいた。
    これで15分毎にチェックされ、キューに入っているメルマガが15分毎に配信されるはず。

さっきまで試していたことなので、だいたい合っているはず。

WordPressのプラグインであるPHPList Form Integration
の設定については後でまた書きたいと思う。


PHP:MBFpdfでバグ!![“]が出力できない

MBFpdfでバグを発見した!!バージョンは1.0b。
[“](ダブルクォーテーション)が出力できないというものだ。

$l+=$ascii ? $cw[$c] : $hwkana ? 500 : 1000;

上のソースの$cw[$c]の$cにダブルクォーテーションが入ってるのだが、
undefined index ” と言われてしまう…。
そこで、$cwをprint_rで表示してみたら、
array(…,[\”] => 500, …);
という記述を発見。ダブルクォーテーションあるけれど、バックスラッシュでエスケープされてるじゃないか!?まあこれが正しいと仮定した場合、$cw[“]は定義されていないわけだから、$cが[“]の場合、$c = ‘\”‘;にしてしまえばいいんじゃないかと思ったので、mbfpdf.phpに手を入れることを決意!!

MBMultiCellメソッドを修正。

//Get next character
$c=$s[$i];
// 以下3行を追加
if($c === '"'){
	$c = '\"';
}

その後、MBWriteメソッドを修正。
行番号は、上記の作業後なので、この付近と思ってください。

//Get next character
$c=$s[$i];
// 以下3行を追加
if($c === '"'){
	$c = '\"';
}

こうしたところ、ダブルクォーテーションがPDFファイルに出力できた。


やりたいことのリストラを行おう

最近、なんだか意味なく気持ちが焦ってしまい、逆に何事にも手を付けられずにいるなぁと思う。焦っても仕方がない。まぁ、それは十分わかっているのだけれど、なんだろう、周りがどんどん結婚していったり、同世代の人の転職話を聞いたりするからだろうか。自分は今のままでいいのか?と自問自答する。やっぱり『やりがい』を求めているからこそ、こういうことを感じるんだと思う。

技術を追い求めなければならないという強迫観念にかられてしまっている気がする。IT業界は流れが速いので、余計にそう思うのかもしれない。反面、自分が使うような技術でないことまで追いかけてしまったり、流行に惑わされてしまうというのは、学習の分散が起こってしまい、これがストレスになっているのかなぁと最近は思う。どれも面白そうであり、やってみたいが、時間と体力とリソース(マシンと金)には限界があるので、工夫をしながらやってみないといかん。

特に、時間。考える時間は大事なのに、考え過ぎて行動できていないということでは、単なる時間の浪費だ。考えた結果、やらないということだったらそれでもいいが、何度も蒸し返してしまわないようにしたい。蒸し返していいのは時間があまってるときだけ。24時間という限られたリソースをリストラしていきたい。

最近は物事に優先順位をつけられてないなぁと思った。
優先順位をつけて行動していこうと思う。


JavaScript:parseInt(“08”)の罠

JavaScriptの関数parseIntには、罠が仕掛けられていた。
具体的には、”08″, “09”のような値に対して処理を行うと8進数として捉えてしまうというものだ。
その結果、文字列08, 09はparseIntすると0が返ってきた。

なので、10進数で処理させるためには第二引数で10を指定する必要がある。

// 例 1桁の場合
var a1 = parseInt("8"); // a1 = 8
var b1 = parseInt("8", 10); // b1 = 8

// 例 2桁の場合
var a2 = parseInt("08"); // a2 = 0
var b2 = parseInt("08", 10); // b2 = 8

先頭に0が付くときにしか顕在化しないので、なかなか気付かないものだ。


XenServer: Mondo Rescueでp2vにはintel-VT必須?

会社のサーバで仮想環境の構築をXenServerを使ってやっているのだけれど、物理サーバを仮想サーバに変換するためにMondo Rescueを使って移行しようとしたら、エラーが出た。

XenServer – HVM is required for this operation

Citrix XenServer/エラー「XenServer – HVM is required for this operation」によると、intel-VTがないから無理っぽいようなエラーらしい。

今回使おうとしていたサーバはDELL PowerEdge SC440で、CPUがPentium E2180という、デュアルコアだけどVTをサポートしていないタイプのCPUだったので、どうも無理っぽい。1年以上前の格安サーバだから仕方ないか。メモリだけは潤沢に8GBも積んだのだが。VTないのでできないと報告したら、ひょっとしたらCeleron E3200を買ってもらえるかもしれないことに。というか、やろうとしていることがVTいるんだから、買ってもらえないと前に進めないよ!