« 今年度末に加子母にFTTH確定?IE8続報 »

第12回高蔵寺SE勉強会

第12回高蔵寺SE勉強会

パーマリンク 2008/08/24 23:00:00 著者: kumaold メール
カテゴリ: 仕事, 勉強会など

昨日は第12回高蔵寺SE勉強会に行ってきました。

今回の宿題ネタは自分が担当だったのですが、出題が遅くなってしまい、皆さんにはご迷惑をおかけしてすみませんでした。


今回出題したネタは…ありそうでやってなかったものです。

[言語]PHPに限らず
[お題]
サーバに置いたファイルなどを読み書きしてみよう。
読み取り、書き込みどちらか一方で結構です。


以前からニコニコメソッドプレゼン(AIR/RSS版?)用の投稿フォームがあればプレゼン用などの使い道が増えると思っていたので、作ってみました。


表示・投稿スクリプト index.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>ニコニコメソッドプレゼン WEBフォーム</title>
</head>

<body>

<h3>ニコニコメソッドプレゼン WEBフォーム</h3>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <table>
        <tr>
            <td>コメント</td>
        </tr>
        <tr>
            <td>
                <input type="text" name="comment" size="50">
                <input type="submit" value="コメントする">
                <input type="reset" value="リセット">
            </td>
        </tr>
    </table>
</form>

<?php
//RSSファイルのパス
$rss_file = 'rss.xml';

if (isset($_POST['comment'])) {
    //RFC 2822 フォーマットの日付取得(Sun, 24 Aug 2008 12:00:00 +0900)
    $time = date("r", mktime());
    
    //既存RSSを配列に格納
    $rss_data = file($rss_file);
    
    if ($rss_data) {
        //既存RSSのヘッダ部読み取り
        for($i = 0; $i <= 6; $i++) {
            $new_rss .= $rss_data[$i];
        }
        //新規RSSに時刻ヘッダ追加
        $new_rss .= "        <pubDate>" . $time . "</pubDate>\n";
        $new_rss .= "        <lastBuildDate>" . $time . "</lastBuildDate>\n";
        //新規RSSに内容追加
        $new_rss .= "        <item>\n";
        $new_rss .= "            <title>" . $_POST['comment'] . "</title>\n";
        $new_rss .= "            <pubDate>" . $time . "</pubDate>\n";
        $new_rss .= "        </item>\n";
        
        //既存RSSの内容読み取り
        for($i = 9; $i <= count($rss_data); $i++) {
            $new_rss .= $rss_data[$i];
        }
        
        //RSSファイルを書込用にオープン
        $fp = fopen($rss_file, 'w');
        if ($fp) {
            //RSSファイルを新しい内容で置換
            fwrite($fp, $new_rss);
            //RSSファイルをクローズ
            fclose($fp);
        } else {
            die("ファイルオープンに失敗しました。\n");
        }
    } else {
        die("ファイルオープンに失敗しました。\n");
    }
}
?>
<div>
<strong>最新コメント</strong></div>
<textarea cols="70" rows="10">
<?php
//過去ログ表示用にRSSを読込む
$xml_data = file_get_contents($rss_file);

//XMLパースライブラリーを読込む
include('xml.php');

//XMLを連想配列に格納する
$rss_array = XML_unserialize($xml_data);

for ($i = 0; $i < count($rss_array['rss']['channel']['item']); $i++) {
    //投稿日時表示
    echo date('m/d H:i', strtotime($rss_array['rss']['channel']['item'][$i]['pubDate'])) . ' | ';
    //コメント表示
    echo $rss_array['rss']['channel']['item'][$i]['title'] . "\n";
}
?>
</textarea>

</body>
</html>

※RSS(XML)パースライブラリとしてこちらのxml.phpを使っています。

コメントRSS rss.xml

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>ニコニコメソッドプレゼン用RSS</title>
        <link>http://kumazaki.kashimo.co.jp/rss.xml</link>
        <description>AIR版ニコニコメソッドプレゼン(ニコニコ風RSSリーダー)でのプレゼンコメント用RSSです。</description>
        <language>ja</language>
        <pubDate>Sun, 24 Aug 2008 10:34:03 +0900</pubDate>
        <lastBuildDate>Sun, 24 Aug 2008 10:34:03 +0900</lastBuildDate>
        <item>
            <title>フォームをPOSTに変更</title>
            <pubDate>Sun, 24 Aug 2008 02:21:16 +0900</pubDate>
        </item>
        <item>
            <title>サーバ側の描画処理が重いので弾幕は自重ww</title>
            <pubDate>Sun, 24 Aug 2008 02:19:05 +0900</pubDate>
        </item>
        <item>
            <title>ニコニコメソッドプレゼン(゜Д゜)ウマー</title>
            <pubDate>Sun, 24 Aug 2008 01:17:02 +0900</pubDate>
        </item>
        <item>
            <title>色は自動で決定@表示ソフト側</title>
            <pubDate>Sun, 24 Aug 2008 01:16:56 +0900</pubDate>
        </item>
        <item>
            <title>最新コメントが上位表示</title>
            <pubDate>Sun, 24 Aug 2008 01:14:53 +0900</pubDate>
        </item>
        <item>
            <title>過去ログ実装しますた</title>
            <pubDate>Sun, 24 Aug 2008 00:09:53 +0900</pubDate>
        </item>
        <item>
            <title>(・∀・)イイ!!</title>
            <pubDate>Sat, 23 Aug 2008 22:51:39 +0900</pubDate>
        </item>
        <item>
            <title>てst</title>
            <pubDate>Sat, 23 Aug 2008 21:50:30 +0900</pubDate>
        </item>
    </channel>
</rss>


今回はとりあえずの作りなのでRSS解析・作成ライブラリで…なんてことはせずテンプレートになるRSSに行指定で追加するだけの単純処理です。

ついでに簡易過去ログ表示機能もつけてみました。


配布用セット(ZIP):

ニコニコ動画風RSSリーダー用PHPフォーム


発表

CakePHPでの安全なサイトの作り方2~クロスサイトスクリプティング~

[進行]あつさん
[概要]セキュリティの話の第2回になります。
    今回は「クロスサイトスクリプティング」についてです。


動的に出力される部分全てにおいてXSSの危険性があるので、スクリプトなどのタグ除去、無効化などを1つでも忘れないように心がけたいです。



Webアプリセキュリティ対策入門 ~あなたのサイトは大丈夫?Webアプリセキュリティ対策入門 ~あなたのサイトは大丈夫?
大垣 靖男

技術評論社 2006-03-16
売り上げランキング : 223865

Amazonで詳しく見る
type="text/javascript" src="http://www.ad16.jp/socailmedia.php?a=CCBot%2F2.0+%28http%3A%2F%2Fcommoncrawl.org%2Ffaq%2F%29&u=http%3A%2F%2Fkuroutoshikou.blog16.jp%2Findex.php%2F2008%2F08%2F24%2Fcnn12a_el_e_mamosea_afmaf" charset="EUC-JP">

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年4月
 << <   > >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

検索

XMLフィード

16ブログ     blogging software