カテゴリー : 2010年 6月

phpで任意の日付、時間を取得する方法。

よく使う処理なのに、なんど使っても混乱してしまうのが、日付の処理。

備忘。

$timestamp = strtotime("-3 day"); // 三日前を指定
$myDate = date( "Y-m-d H:m:s", $timestamp );

↑↑↑

これで大抵いける。

zendでメールを受信して処理実行

Zendでメール受信をして、もろもろの処理をキックしようとしたときの調査メモ

基本、zend のmailさんがほとんどやってくれるんだけども、データの取り出し方とかで若干はまったので、要注意。

特に、エンコード関係はやっぱり鬼門だなぁ。

ヘッダのcontent-typeの中に、エンコードタイプがあるので、そこを正規表現できりとって、mb_convert_encodingで加工する。

これで、テキストメールは大丈夫なはず。

require_once ‘Mail/Storage/Pop3.php’;
$param = array(‘host’ => ‘server_name’,
‘user’ => ‘user’,
‘password’ => ‘pw’,
‘ssl’      => ‘ssl’);
//接続します
$mail = new Zend_Mail_Storage_Pop3($param);
foreach($mail->getUniqueId() as $uniqueId){
echo “<br />.<br />”.$uniqueId.”<br />”;
$message = $mail->getMessage($mail->getNumberByUniqueId($uniqueId));
//件名出してます
echo mb_convert_encoding(mb_decode_mimeheader($message->subject),”UTF-8″).”<br />”;
// echo ‘<pre>’;
$header=$message->getHeaders();
preg_match(“/charset=(.*)$/”,$header[“content-type”],$match);
print($match[“1″].”!!!!<br />”);
if($match[“1”]){
$encode=$match[“1”];
}else{
$encode=”ISO-2022-JP”;
}
echo “content is here>>>”.mb_convert_encoding($message->getContent(),”UTF-8″,$match[“1”]);
// echo ‘</pre>’;
foreach ($message->getHeaders() as $name => $value) {
if (is_string($value)) {
// echo “$name: $value<br />”;
continue;
}
foreach ($value as $entry) {
// echo “$name: $entry<br />”;
}

よし、うまくいった!

とおもいきや、HTMLメールのときにはうまく受信できていない。。

せいかくには、受信はできているんだけど、余計なものがいっぱいついていて加工がめんどくさい。

あきらめて、フォームつくってそこからやるようにしようかなぁ。

wordPress MUにて、投稿時に何かアクションをする場合

※たぶん、WordPress本家もほとんど同じと思われます。

WordPressMUを使っているときに、管理しているブログで投稿した記事の新着を表示する必要があったのですが、
複数のブログの新着をまとめて見る機能はついていないようなので、調べてみました。

方針としては、どのブログであろうと、投稿を行うときに、新着テーブルにインサートしてしまおうという方向です。

1.投稿しているプログラムを探す。

単純に、投稿している画面のHTMLを読んで、探しました。

結果、 wp-admin/includes/post.php で行っていることが判明。

この中の、function edit_post()で投稿(更新のときも)を行っています。

ためしに、関数の最後に、

foreach($_POST as $key=>$val){
$text.=$key.”:”.$val.”<br />”;
}
wp_die( $text.”<br / >id:”.$post_ID);

として確認。

投稿はしっかり反映されているものの、POSTの内容がしっかり表示されました。

2.投稿成功時のロジック追加

WPは投稿がうまくいかなかったら、上手にエラーでろじっくを止めてくれるので、関数の最後に、テーブルインサートの文を入れるだけで良さそうです。

wp_postsのような名前のテーブルから、IDをもとに検索した結果を、そのまま新規投稿保存テーブルに挿入します。

3.表示

あとは、新規投稿保存テーブルから、適宜ぬきだせばOK

意外と簡単でした。

Jsonの読み込み PEARやらZENDやら

ZENDで組んでいるシステムで、Jqueryを使ったUIを追加する仕事で、はまった。

PHP側からもJquery側からも読み込める形式でデータをテキストに落とし込むのに、JSONを使うことにしたんだけども、

これがPHP側からどうやっても読み込めない。

PEAR/JSONをつかっても、ZEND:JSONを使ってもだめ。

PHP5.2以降だと、json_decode()なる関数が使えるそうなんだけども、あいにく今使っているSixCoreじゃ、5.16しか使えない。

うーんとだいぶん唸っていました。

なかばやけで、文字コードをいじっていたら、あっさり解決。

結論から言うと、UTF-8N形式でJSONデータ保存しておかないといけないようです。

UTF8じゃないといけないとは書いてあったけども、、、UTF-8N(BOMなし)じゃないといけないだなんて。。

ちなみに、Jquery側からはUTF-8でも問題なし。

サンプルソースはこんな感じ。

require_once ‘Json.php’;  //ZENDにパスが通っているとして。
<$jsonText = file_get_contents("js/data.json"); $array=Zend_Json::decode($jsonText); print_r($array);

ついでに、JSONのサンプル

{

“item” : [

{

“name” : “エリア未選択”,

“amount” : “0”

},

{

“name” : “全国”,

“amount” : “35000”

}

]

}

以上