simplexml_load_file()でRSS1.0(dc:dateなど)を扱う

いつも忘れて、同じところで3回躓いたのでメモ。
HPにブログのヘッドラインを出したいときなどに便利なsimplexml_load_file()ですが、
RSS1.0を読み込んでくる場合、「dc:date」など「dc:」が入ったデータがそのままでは読み込めない。

なので、下記のように処理をする。

$blog = simplexml_load_file(’blog_url’)
$blog->item->children(”http://purl.org/dc/elements/1.1/”)->date;

例えば、「yyyy/mm/dd」形式で取得したいときはこんな感じ。

$blog = simplexml_load_file(’blog_url’)
foreach ($blog->item as $item) {
$date = $item->children(”http://purl.org/dc/elements/1.1/”)->date;
$date = date(’Y/m/d’, strtotime($date));
}


Tags:

Popularity: 17%

[CodeIgniter]mod_writeに伴う.htaccess設定

久々にプログラム系の事をやる機会があり、CodeIgniterというものを触ってみた。
数年前にcakePHPをやってみたものの、個人的にはあまりしっくりこなかったので、
PHPで手頃なフレームワークを探していたところ、
「低い学習コストと圧倒的な速さ」がウリとのことで少し触ってみることに。

で、初期設定を進めていく中で、
mod_writeを利用するために.htaccess設定をするのだが、
下記のようにする基本設定がマニュアルに通りにやっても何故かうまくいかない。

http://hogehoge.com/index.php/test/
→http://hogehoge.com/test/

マニュアルによると

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

とあるものの、何度やってもダメだったので、
「また、サーバ仕様の問題かなぁ」と思いながら、
RewiteEngineのことを調べてみたところ、
結構みんな適当な事を書いていてアテにならないため、
本家サイトで調べてみたところ、
[flags]の部分が結構大事であって、通常[R]とか[L]しか見かけなかったのだけど、
実はものすごく沢山あることが判明。

ということで、教訓をメモすると。

  1. 人のブログとかメモを鵜呑みにしない
  2. 当然のことのように、まずは本サイト(正式なマニュアル)を参照する

特に後者については英語がメンドクサイ(そもそも苦手)ということもあり、
ついついサボりがちになってしまうので、気をつけねば。

で、今回の解決策は、[flags]を[P]’proxy|P’ (force proxy)に変更すること。

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [P]

CodeIgniterの情報があんまりなかったことと、
あまりにもここを更新していなかったこともあり、
1年以上ぶり更新してみる。

どこかの誰かの役に立てば幸い。


Tags:

Popularity: 14%

[PEAR]HTML_QuickForm2 で Mail_RFC822 を利用する

引き続き自分用のメモ。今回はPEAR。
PEAR::HTML_QuickForm2を利用していたところ、mailのvalidateがない事が判明(単純に見つけられていない可能性もあり。)

$mail -> addRule( “regex”, “メールアドレスが不正”, “/正規表現/” );

という書き方をしようかとも思ったものの、メールアドレスの正規表現については、正解がないとも言われているくらいなので、どこまで厳しく書くのか迷ってしまうため中断。そして少し調べてみたところ、Mail_RFC822というものがあるらしいので、ここでの処理はそれに任せる事に決定。

実装方法は下記の二つを検討。

  1. PEAR/HTML/QuickForm2/Rule/ あたりに追加してライブラリを拡張
  2. とりあえず、今回だけ使えるように該当PHP内で完結

今回はお試しという事もあったので、とりあえずは「2.」を選択。

$mail -> addRule( “callback”, “メールアドレスが不正です”, “check_mail” );
function check_mail( $mail ) {
require_once( “Mail/RFC822.php” );
return Mail_RFC822::isValidInetAddress( $mail ) ? true: false;
}

シンプルに実装できたため、そこそこ満足。
PEARは何となくめんどくさいイメージがあって敬遠しがちになるけど、使っておいた方が良いのだろうなあとは常々思う。


Tags:

Popularity: 16%

[Smarty]デフォルトテンプレートパスを指定

ずいぶん久々のメモ。
Smarty使用時にphpファイルとtplファイルを同じディレクトリ構成にしておいて、下記を実装するための方法。
※もっと一般的な別の方法があるのかもしれません。

  1. デフォルト→同じディレクトリのtplファイルを参照
  2. 個別指定→指定tplファイル参照

ディレクトリ構成(/news/というディレクトリを想定)

  1. /smarty/template/news/*.tpl
  2. /html/news/*.php

MySmarty.class.php

require_once(”Smarty.class.php”);

class MySmarty extends Smarty {
public function __construct() {
$this -> Smarty();
$this -> template_dir = “/path/smarty/templates/”;
$this -> compile_dir = “/path/smarty/templates_c/”;
$this -> config_dir = “/path/smarty/configs/”;
$this -> cache_dir = “/path/smarty/cache/”;
}
}

// default template path
$tpl = preg_replace( “/^\/(.*).php$/”, “$1.tpl”, $_SERVER[’PHP_SELF’] );

/news/index.php から /news/index.tpl

require_once( “/path/smarty/libs/MySmarty.class.php” );
$smarty = new MySmarty();
$smarty -> assign( array(
……..
tpl => $tpl
) );
$smarty -> display( “***.tpl” );

/news/index.php から /news/custom.tpl

require_once( “/path/smarty/libs/MySmarty.class.php” );
$smarty = new MySmarty();
$tpl = “news/custom.tpl”;
$smarty -> assign( array(
……..
tpl => $tpl
) );
$smarty -> display( “***.tpl” );

特に大した話でもありませんが、自分用のメモ。


Tags:

Popularity: 12%