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スクリプトで、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という関数があります。引数に例えば「+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 のCheatSheetを発見。1.1用は見たことありましたが、1.2用は初見のような気がします。
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
情報元:某有名巨大掲示板より