WordPress:cforms2で、メール送信できないエラー

仕事でWordPressを使ってサイトの作っているのだが、お問い合わせのページを作るのに、cform2を使おうかと思って、今調査中。ローカル環境(Windows)で設置したあと、グローバル環境(Linux)にコピーしたら、動かなかったので、調査したところ、原因が発覚したのでメモしとく。

http://wordpress4cms.net/202/

/cforms/js/cforms.jsの、/cforms/lib_ajax.phpを指しているパスが違った。

var sajax_uri = 'http://localhost/wp-content/plugins/cforms/lib_ajax.php';

になってたので、

var sajax_uri = '/wp-content/plugins/cforms/lib_ajax.php';

に変更した。

このようにしたところ、500 Internal Server Error発生。ムムム。
/cforms/abspath.phpで設定されているWordPressへのパスがWindows上のパスのままだったので、
Linux上のパスに変更したところ、ちゃんとメール送信できた。

とりあえず、メールは送信できたのだが、まだメールのエンコードがUTF-8のままなので、ISO-2022-JPに変更する方法を調査する必要がある。


Athlon64x2 5600届く!

先日頼んだAthlon64x2 5600がもう届いた。
付け替えてみたけれど、まあ劇的に速くなったわけではないので、違いが全然わからない…。
シングルコアからデュアルコアになったときは劇的に違いがわかったけれど、さすがに単なるパワーアップとなると、違いがわかりにくい。重たいアプリとか使ってると違いがわかってくるのかなと期待。

でもまぁ、もたつき感が減った気がするから、やっぱり効果あったんかな。
L2キャッシュが増えてるわけだから。

具体的に数値でわかるように、ベンチマークをとっておくべきだったなぁ~。
一応ベンチマークツールを使ってみたのだけれど、前の値がわからないので、
性能がどれくらい上がったか確認できん!


FPDFでcell内で自動改行をする方法

FPDF(MBFPDF)でPDF出力をやる案件をやってます。
入力項目の文字列長が長い場合に、自動で改行するのは、どうせcellメソッドでwidthを指定すればできるんだろうと勝手に思っていたら、全くできなかった!おいおい、なんのためのwidthなんだい?といいたいところ。

このままでは、改行コードがあったり文字列が長い場合に改行してくれないので、それは困る。検索したところ、MultiCellというメソッドがあるようだ。

http://www.phpbook.jp/fpdf/cell/index8.html

<?php
// $pdfは、MBFPDFのインスタンス
    $pdf->MultiCell(50, 5, $string);
// ブラウザに出力
    $pdf->Output();
?>

このようにしたら、$stringが長い場合や、改行文字がある場合、自動改行してくれる。
文字列の長さを取得するGetMBStringWidthメソッドと組み合わせて使うと、if文で綺麗に印刷できるポジションを変更可能っす。


Athlon64X2 5600+を楽天で注文

楽天の今月までの期間限定ポイントが700ポイントくらいあったので、なんか買わないとな~と思ってたんだけど、本は溜まっていくばっかりなので(それに、ブックオフに行ったほうが半額で買えるし…)、じゃあ今欲しいものってなんだろうな~って思って考えた結果、CPUを替えるかと。

俺が今使ってるCPUは、AMDのAthlon64X2 3800+です。まあ性能に不満があるかと言われたら、別にないんですが、EclipseとかXAMPPとかを同時に動かしてるときに、ボトルネックになってるのはCPUなんかな~と思うようになってきました。メモリは4Gあるので、問題ないはずだし。

本来であれば、時代はクアッドコアになりつつあるので、Phenom2が欲しいところだけど、マシンの買い替えを行えるほど裕福でもないし、勿体無いので、CPUをパワーアップさせようと思った次第です。候補は、低電圧版であるAthlon64X2 5050eか、Athlon64X2 5600+か、Athlon64X2 6000+です。Socket AM2なので、これ以上のものは望めないと。

5050eは、低電圧で45Wなのが魅力。5600+は、現在の3800+と同じ65Wなのに、2.9GでL2キャッシュが512X2なところ。6000+は、付けられるCPUの中で一番クロックが高いところが魅力なんだけど、89W。

俺は、コストパフォーマンスを重視するので、電力消費量の大きい6000+は一番に脱落。低電圧版の5050eは、もし自分がマシンを持っていなくて、新しく組むのであれば、確実に選んでいたと思うけれど、今回はパワーアップが目的なので、却下。ということで、電力消費量が変わらずにパワーアップできる5600+を買うことにしました。

本当は休みにアプライドとか、パソコン工房とか行ってみたんだけど、5600+は売ってなかったんですよね。売れてるのか、それとも、中途半端なポジションの製品なので、逆に需要がないと判断されたのか…。まあポイントも使わないと損なので、買っちゃえ!ということで。

Athlon64 X2[Dual-Core] 5600+(2.9GHz/512KB ×2) Brisbane SocketAM2[65W] リテールBOX【AMD】…


C#でRequest.Form.getValuesできない場合

ASP.Netだけで完結しているシステムなら関係ないのかもしれないが、WebAPIだと何から呼ばれるかわからない。それが、PHPからかもしれないわけですよ。そうしたら、

// POSTされてるのは、values[0], values[1]など
if (Request.Form.getValues("values") == null) {
    // 呼ばれちゃう
    Debug.WriteLine("valuesがnullだってさ!");
}

ということになってしまった。こんなのはphpやってる俺からしたら想定外の出来事。どうもvalues=aaa&amp;values=bbbという感じで、ようやくgetValuesで値が取得できるみたいだけど、普通か、これ?

このC#で動いてるWebAPIをコールするプログラムは、PHPで動いてるWebAPIもコールしに行くので(言語が違うだけで動作は全く同じWebAPI)コールするプログラム側は変えられないので、C#側を変更するしかなさそうだと。

ということで、genericクラスを使うことにした。

int i = 0;
System.Collections.Generic.List<string> values = new System.Collections.Generic.List<string>();
while(Request.Form.Get("values[" + i + "]") != null){
    values.Add(Request.Form.Get("values[" + i + "]"));
    i++;
}
if(values.Count == 0){
    // valuesはPOSTされてない
}

なんとか、これで、PHPと同じように処理できるようになった。
他にもっとスマートな方法があるようでしたら、教えてもらいたいなぁ~。