Search

CSVファイルからRSS生成

unknown

下記のようなタブ区切りのCSVファイルから、RSSフィード(RSS形式とRDF形式)を生成します。

# ID	カテゴリ	タイトル	公開日	URL	説明
38	お知らせ	全ページのサイドバーに、ページのレイアウト幅を変更できるスイッチを設置しました	2008/3/26 0:00	http://phpjavascriptroom.com/index.php	レイアウト幅は、840px、960pxのいずれかを選択できるようにしました。
<? 
$feed=$feed_rdf=$rdf_item=$rdf_sep="";

$feed_title=$logo_title=mb_convert_encoding("PHP & JavaScript Room : 新着情報","utf-8","SJIS");
$feed_desc        =mb_convert_encoding("PHP & JavaScript Roomのサイト更新履歴","utf-8","SJIS");
$site_url        ="http://phpjavascriptroom.com/";
$feed_url        ="http://phpjavascriptroom.com/index.xml";
$rdf_url        ="http://phpjavascriptroom.com/index.rdf";
$language        ="ja";
$copyright        =mb_convert_encoding("PHP & JavaScript Room","utf-8","SJIS");
$author            ="pj_room@yahoo.co.jp (PJ)";
$logo_url        ="http://phpjavascriptroom.com/content/img/banner/banner.gif";
$logo_link        ="http://phpjavascriptroom.com/";
$logo_desc        =mb_convert_encoding("Feed provided by PHP & JavaScript Room. Click to visit.","utf-8","SJIS");
$logo_width        ="81";
$logo_height    ="31";
$encoding        ="utf-8";

$fname="data.csv";
$data=file($fname);
$cnt=0;
$data_ary=array();
foreach($data as $k=>$v){
    if(!$v) continue;
    list($id$category$title$pubdate$url$desc)=explode("\t",$v);
    $title=htmlspecialchars($title);
    $category=htmlspecialchars($category);
    $pubdate=htmlspecialchars($pubdate);
    $pubdate_tm=strtotime($pubdate);
    $url=htmlspecialchars($url);
    $desc=htmlspecialchars(chop($desc));

    $title=mb_convert_encoding($title,"utf-8","SJIS");
    $category=mb_convert_encoding($category,"utf-8","SJIS");
    $desc=mb_convert_encoding($desc,"utf-8","SJIS");

    $data_ary[$id]=array($id$category$title$pubdate_tm$url$desc);
}
$data_ary_keys=array_keys($data_ary);
$data_ary_keys_max=count($data_ary_keys)-1;
$lastpubdate_tm=$data_ary[$data_ary_keys_max][3];
$lastpubdate_format=date("r",$lastpubdate_tm);
$lastpubdate_formatRDF=date("Y-m-d\TH:i:s+09:00",$lastpubdate_tm);
rsort($data_ary_keys);

$feed.= "<?xml version=\"1.0\" encoding=\"".$encoding."\"?>\n";
$feed.= "<rss version=\"2.0\">\n"$feed.= "    <channel>\n";
$feed.= "        <title>".$feed_title."</title>\n";
$feed.= "        <description>".$feed_desc."</description>\n";
$feed.= "        <link>".$site_url."</link>\n";
$feed.= "        <docs>".$feed_url."</docs>\n";
$feed.= "        <lastBuildDate>".$lastpubdate_format."</lastBuildDate>\n";
$feed.= "        <image>\n";
$feed.= "            <url>".$logo_url."</url>\n"$feed.= "            <title>".$logo_title."</title>\n"$feed.= "            <link>".$logo_link."</link>\n";
$feed.= "            <width>".$logo_width."</width>\n";
$feed.= "            <height>".$logo_height."</height>\n";
$feed.= "            <description>".$logo_desc."</description>\n";
$feed.= "        </image>\n";
$feed.= "        <language>".$language."</language>\n";
$feed.= "        <copyright>".$copyright."</copyright>\n";
$feed.= "        <webMaster>".$author."</webMaster>\n";
$feed.= "        <pubDate>".$lastpubdate_format."</pubDate>\n";

$feedcnt=0;
for($i=$data_ary_keys_max$i>=0$i--){
    list($id$category$title$pubdate_tm$url$comment)=$data_ary[$i];
    /************* RSS 2.0 */
    $feed.= "        <item>\n";
    $feed.= "            <title>[".$category."]".$title."</title>\n";
    $feed.= "            <link>".$url."</link>\n";
    $feed.= "            <description><![CDATA[".$desc."]]></description>\n";
    $feed.= "            <author>".$author."</author>\n";
    $feed.= "            <category>".$category."</category>\n";
    $feed.= "            <pubDate>".date("r",$pubdate_tm)."</pubDate>\n";
    $feed.= "            <guid isPermaLink=\"false\">pjroom@".$id."</guid>\n";
    $feed.= "        </item>\n";
    
    
    /************* RDF */
    $rdf_sep.="                    <rdf:li rdf:resource=\"".$url."\" />\n";
    $rdf_item.="        <item rdf:about=\"".$url."\">\n";
    $rdf_item.="            <title>[".$category."]".$title."</title>\n";
    $rdf_item.="            <link>".$url."</link>\n";
    $rdf_item.="            <dc:date>".date("Y-m-d\TH:i:s+09:00",$pubdate_tm)."</dc:date>\n";
    $rdf_item.="            <description><![CDATA[".$desc."]]></description>\n";
    $rdf_item.="        </item>\n";

    if($feedcnt==10) break;
    $feedcnt++;
}
$feed.= "    </channel>\n";
$feed.= "</rss>\n";

$feed_rdf.="<?xml version=\"1.0\" encoding=\"".$encoding."\"?>\n";
$feed_rdf.="    <rdf:RDF\n";
$feed_rdf.="        xmlns=\"http://purl.org/rss/1.0/\"\n";
$feed_rdf.="        xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
$feed_rdf.="        xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n";
$feed_rdf.="        xmlns:admin=\"http://webns.net/mvcb/\"\n";
$feed_rdf.="        xml:lang=\"".$language."\">\n";
$feed_rdf.="        <channel rdf:about=\"".$rdf_url."\">\n";
$feed_rdf.="            <title>".$feed_title."</title>\n";
$feed_rdf.="            <link>".$site_url."</link>\n";
$feed_rdf.="            <dc:date>".$lastpubdate_formatRDF."</dc:date>\n";
$feed_rdf.="            <description>".$feed_desc."</description>\n";
$feed_rdf.="            <admin:generatorAgent rdf:resource=\"http://www.infomaker.jp/editorlite/?v=0.93\" />\n";
$feed_rdf.="            <items>\n";
$feed_rdf.="                <rdf:Seq>\n";
$feed_rdf.=$rdf_sep;
$feed_rdf.="                </rdf:Seq>\n";
$feed_rdf.="            </items>\n";
$feed_rdf.="        </channel>\n";
$feed_rdf.=$rdf_item;
$feed_rdf.="    </rdf:RDF>\n";

# RSS 2.0 index.xml
$fp fopen("../index.xml"'w');
fwrite($fp,$feed);
fclose($fp);

# RDF index.rdf
$fp fopen("../index.rdf"'w');
fwrite($fp,$feed_rdf);
fclose($fp);
?> 

ディレクトリのバイト数を取得

unknown

<?
//指定したディレクトリのバイト数を取得
function getDirSize($dir) {
    $handle=opendir($dir);
    while($file=readdir($handle)){
        if(($file!='..') && ($file!='.') && !is_dir($dir.'/'.$file)){
            $bytes+=filesize($dir.'/'.$file);
        }elseif(is_dir($dir.'/'.$file) && ($file!='..') && ($file!='.')){
            $bytes+=getDirSize($dir.'/'.$file);
        }
    }
    return $bytes;
}
echo getDirSize('./include').' Bytes'//674991 Bytes
?>

ファイルのアップロード

unknown

PHP4.1.0より前のバージョンの場合は、スーパーグローバル変数($_POST、$_SERVER、$_FILES)がサポートされていないため、 それぞれ $HTTP_POST_VARS、$HTTP_SERVER_VARS、$HTTP_POST_FILES を使用します。 これらはグローバル変数ではないので、関数内で参照するにはglobalを付けてグローバル宣言する必要があります。

function UploadFile(){
  global $HTTP_POST_VARS;
  global $HTTP_POST_FILES;
  ・・・
}
<?
//「アップロード」ボタンが押下されたら実行
if($_POST['btnupload']){
    if(!UploadFile()){
        echo "アップロード失敗<br>\n";
    }else{
        echo "アップロード成功<br>\n";
    }
}

/* [関数名]UploadFile
 *
 * [機能] ファイルのアップロード
 *
 * [説明]
 * 指定したファイルを指定した場所にアップロードする。
 * アップロードしたファイル名は任意で変更可。
 * 新しいファイル名が未入力の場合には、元ファイルの名前でアップロードする。
 *
 * @return $upd_flag アップロードが成功した場合にTRUE、失敗した場合にFALSEを返す
 *
*/
function UploadFile(){
    //アップロード先のディレクトリヘのパスを設定
    $upDir="C:\\Program Files\\Apache Group\\Apache2\\htdocs\\test\\";
    //ファイルフラグ
    $upd_flg=false;
    //テンポラリファイル名がある場合
    if(is_uploaded_file($_FILES['UploadFile']['tmp_name'])) {
        echo "'".$_FILES['UploadFile']['tmp_name']."'は、HTTP POST で正常にアップロードされたファイルです<br>\n";
        if($_POST['NewName'] != ''){
            //ファイル名を変更する場合
            $fpass=$upDir.$_POST['NewName'];
        }else{
            //ファイル名を変更しない場合
            $fpass=$upDir.$_FILES['UploadFile']['name'];
        }
        if(move_uploaded_file($_FILES['UploadFile']['tmp_name'], $fpass)){
            echo "'".$fpass."' に、ファイルを移動しました<br>\n";
            $upd_flg=true;
        }else{
            echo "ファイルの移動に失敗しました<br>";
            $upd_flg=false;
        }
    }else{
        echo "'".$_FILES['UploadFile']['tmp_name']."'は、偽装されたアップロードファイルの可能性があります<br>\n";
        $fpass='';
        $upd_flg=false;
    }
    return $upd_flg;
}
?>
<!-- ↓ アップロードフォーム ↓ -->
<?
//ENCTYPE属性に、MULTIPART/FORM-DATA を指定
echo "<form enctype='multipart/form-data'
      action='".basename($_SERVER['SCRIPT_NAME'])."' 
      method='post'>";
// ファイルをアップロードするには、対象となるファイル名を指定
// INPUTのTYPE属性に"file"を指定すると、「参照」ボタンが表示される
echo "アップロードするファイル:<input type='file' name='UploadFile' size='40'><br>";
// アップロード後のファイル名を変更する場合は必ず指定
echo "新しいファイル名(任意): <input type='text' name='NewName' size='40'><br>";
// アップロードするファイルの最大バイト数を指定
echo "<input type='hidden' name='MAX_FILE_SIZE' value='10000'>";
// アップロードボタン(フォーム送信ボタン)
echo "<input type='submit' name='btnupload' value='アップロード'> ";
// フォームのクリアボタン
echo "<input type='reset' value='クリア'>";
echo "</form>";
?>
<!-- ↑ アップロードフォーム ↑ -->
<?
// 送信されたデータ確認
echo nl2br(print_r($_FILES,true));
/*
Array(
    [UploadFile] => Array(
        [name] => sample.txt
        [type] => text/plain
        [tmp_name] => C:\WINDOWS\TEMP\php167.tmp
        [error] => 0
        [size] => 34
    )
)
*/
echo nl2br(print_r($_POST,true));
/*
Array (
    [NewName] => sample.txt.bak
    [MAX_FILE_SIZE] => 10000
    [btnupload] => アップロード
    )
*/
?>

CSVファイルから二次元配列を生成

unknown

people.csv
1,男性,たろう 
2,男性,けんじ 
3,男性,たけし 
4,女性,はなこ 
5,女性,あやか
<?
$fname="include/dat/people.csv";
$peple=Array();

//$people[性別][番号]=[名前]

//例1
$fp=fopen($fname"r") or die();
while($line=fgetcsv($fp,filesize($fname))) {
  $people[$line[1]][$line[0]]=$line[2];
}
fclose($fp);

//例2
$lines=file($filename);
$i=0;
while($i<count($lines)){
  if($lines[$i]!=""){
    list($a,$b,$c)=explode(","chop($lines[$i]));
    $people[$b][$a]=$c;
  }
  $i++;
}

print_r($people);
/*
Array
(
    [男性] => Array
        (
            [1] => たろう
            [2] => けんじ
            [3] => たかし
        )
    [女性] => Array
        (
            [4] => はなこ
            [5] => あやか
        )
)
*/
?>

CSVファイルをテーブルに読み込む

unknown

ken.csv
番号,県名,フリガナ
1,北海道,ホッカイドウ
2,青森県,アオモリ
3,岩手県,イワテ
4,秋田県,アキタ
サンプルを見る
<div class='tbl'>
<?
$fname="include/dat/ken.csv";
if(file_exists($fname)){
    $fp=fopen($fname"r");
    echo "<table border='1'>\n";
    $cnt=0;
    while($line=fgetcsv($fp,filesize($fname))){
        echo "<tr>";
        for($i=0;$i<count($line);$i++){
            if($cnt==0){
                echo "<th>".$line[$i]."</th>";
            }else{
                echo "<td>".$line[$i]."</td>";
            }
        }
        echo "</tr>\n";
        $cnt++;
    }
    echo "</table>\n";
}
?>
</div>
<?
/* 出力されるHTML文
<table border='1'>
<tr><th>番号</th><th>県名</th><th>フリガナ</th></tr>
<tr><td>1</td><td>北海道</td><td>ホッカイドウ</td></tr>
<tr><td>2</td><td>青森県</td><td>アオモリ</td></tr>
<tr><td>3</td><td>岩手県</td><td>イワテ</td></tr>
<tr><td>4</td><td>秋田県</td><td>アキタ</td></tr>
</table>
*/
?>
1北海道ホッカイドウ
2青森県アオモリ
3岩手県イワテ
4秋田県アキタ

CSVファイルからプルダウン生成

unknown

ken.csv
番号,県名,フリガナ
1,北海道,ホッカイドウ
2,青森県,アオモリ
3,岩手県,イワテ
4,秋田県,アキタ
サンプルを見る
<?
/* CSVファイルの中身を変数$kenに読み込む */
$fname="include/dat/ken.csv";
if(file_exists($fname)){
    $ken=file($fname);
?>
<form name="frm">
<select name="ken">
    <option value="">選択してください</option>
<?
    for($i=0;$i<count($ken);$i++){
        list($ken_num$ken_name$ken_ruby)=explode(","trim($ken[$i]));
        if(!is_numeric($ken_num)) continue;
        echo "<option value=".$ken_num.">".$ken_name."(".$ken_ruby.")</option>\n";
    }
?>
</select>
</form>
<?
}
?>
<?
/* 出力されるHTML文
<form name="frm">
<select name="ken">
    <option value="">選択してください</option>
    <option value=1>北海道(ホッカイドウ)</option>
    <option value=2>青森県(アオモリ)</option>
    <option value=3>岩手県(イワテ)</option>
    <option value=4>秋田県(アキタ)</option>
</select>
</form>
*/
?>

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop

polarized women