TipsTips(ファイル関連)
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.csv1,男性,たろう 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>
*/
?>