Web Tech Log by 1KB

Icon

Web開発、Webデザイン、SEO、携帯コンテンツなどWebにまつわるテクノロジーを追っかけるブログ。旧名「Web屋に復帰した人間のリハビリ日記」

SimplePie を使用してRSS/Atom FeedをWebページに組み込む

RSS関係のPHPライブラリはいろいろありますが、ファイルが一つのみで構成されていて、その名の通りシンプルなSimplePieを使ってみました。

まずは下ごしらえから

//SimplePie
require_once('../php/simplepie/simplepie.inc');
$feed = new SimplePie();
$feed->set_feed_url("http://1kb.jp/blog/feed"); // RSS Feed URL指定
$feed->set_cache_location("../php/simplepie/cache/"); // Cache ディレクトリ指定
$feed->init();
$feed->handle_content_type();

後はページの任意の位置にてforeach()で回すだけ

 <ul>
<?php
foreach ($feed->get_items() as $item){
$url   = $item->get_permalink(); //各記事のURL
$title = $item->get_title(); // 各記事のタイトル
$date  = $item->get_date('Y-m-d'); //日付 PHPのdateコマンドと同じ
echo '<li>' . $date . ' <a href="' . $url .'">' . $title . '</a></li>';
}
?>
</ul>

非常に簡単ですね。詳細なドキュメントやAPIはこちらをご参照ください。

PHPでアップロードしたJPEGファイルをGIFファイルに変換する

とあるPHPスクリプトで、GIFファイルのみアップロードを許可してJPEGファイルがアップロードしたらエラーを返していました。ユーザビリティを考えるとあまり親切ではないので、JPEGファイルがアップロードされたら、自動的に変換するようにしようと思い、ちょいと調べてみました。

//アップロード先パス
$filepath = "/path/to/filename.gif";
//アップロードしたファイルを保存
move_uploaded_file($_FILES['file']['tmp_name'], $filepath);
//書き込み許可属性を付ける
chmod($filepath, 0777);
if (preg_match("/jpeg/", $_FILES['file']['type'])) {//JPEGの場合GIF変換
//JPEGファイルを展開
$img = imagecreatefromjpeg($filepath);
//GIF形式で保存
imagegif($img, $filepath);
//メモリを解放
imagedestroy($img);
}

※実際には様々なエラー処理が必要です。PHPでのファイルアップロード処理に関しては割愛します。他を参照してください。

基本的にはPHPの関数 imagecreatefromjpeg() と imagegif() を使用して簡単にできました。もちろんGDのサポートは必須です。

PHP strtotime関数でハマった!(翌月の表現の処理)

PHPには strtotimeという関数があります。引数に例えば「+1 month」と指定すれば1ヶ月後のタイムスタンプを返してくれます。

<?php $nextmanth = date("Y-m", strtotime("+1 month"));?>

で翌月を返してくれると思ってました。しかし甘かった!!
例えば今月28日の時点では問題なかったのですが、

例:2009年1月28日の時点
<?php
$nextmonth = date("Y-m", strtotime("+1 month"));
echo $nextmonth;?>
結果:2009-02

これが31日では

例:2009年1月31日の時点
<?php
$nextmonth = date("Y-m", strtotime("+1 month"));
echo $nextmonth;
?>
結果:2009-03

となってしまう。
なぜならば、strtotime関数では1月31日の1ヶ月後は2月31日で2月は31日が存在しないので3月3日という認識らしい。

実際に以下のコードを実行すると

例:2009年1月31日の時点
<?php
$nextmonth = date("Y-m-d", strtotime("+1 month"));
echo $nextmonth;?>
結果:2009-03-03

となってしまう。
1月31日では「次の月」を3月と返してしまってくれていて、原因を突き止めるのに苦労しました。

正解は

例:2009年1月31日の時点
<?php
$nextmonth = date("Y-m", strtotime(date("Y-m-01") . "+1 month"));
echo $nextmonth;
?>
結果:2009-02

いったん「2009-01-01」と月初に戻してから、「+1 month」してやるとうまくいきました。

CakePHP 1.2 チートシート

CakePHP 1.2 のCheatSheetを発見。1.1用は見たことありましたが、1.2用は初見のような気がします。

http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf

20090117cakecheat

情報元:某有名巨大掲示板より

固定ページ

킹ēǂ݂uOp[c