[1042] XOOPS模組開發進階
一、 HTML匯出(下載)
- 匯出功能主要是靠header來定義文件的檔頭,進而生出檔案(匯出記得關除錯)。
header("Content-type: text/html");
header("Content-Disposition: attachment; filename=檔名");
echo 主要內容;
exit;
- 利用mime-type即可將文件偽裝成各種檔案(特別是文字檔): http://www.freeformatter.com/mime-types-list.html
- 下載時,IE可能會變成亂碼檔名,可用iconv("UTF-8","Big5",$檔名),將檔名轉成Big5編碼即可。(但若遇到檔名有特殊字的,就會變成缺字了)
- 若是要把檔案存在主機上,請改用file_put_contents ( $檔名 , $檔案內容 );
if (file_put_contents(XOOPS_ROOT_PATH . '/uploads/contact.html', $html)) {
redirect_header('index.php', 3, '已完成!');
}
- 同HTML,將mime-type改為text/csv即可。
- Excel的CSV格式僅支援Big5編碼,故內容需用iconv轉為Big5。UTF-8編碼的CSV檔Openoffice的Calc可以讀取。
- Excel的CSV格式通常用小寫「,」隔開;而Calc預設用「;」隔開,且遇到文字需用雙引號"包起來。
- 匯入文字檔上傳介面:
<form action="main.php" method="post" enctype="multipart/form-data">
<input type="file" name="userfile">
<input type="hidden" name="op" value="import_csv">
<input type="submit" value="匯入">
</form>
- 匯入CSV檔:
$handle = fopen($_FILES['userfile']['tmp_name'], "r") or die("無法開啟");
while (($data = fgetcsv($handle, 1000)) !== false) {
$sql = "insert into `" . $xoopsDB->prefix("phone_book") . "` (`sn`, `cate_sn`, `name`, `birthday`, `phone`, `email`, `zip`, `county`, `city`, `addr`, `note` ) values('{$data[0]}', '{$data[1]}', '{$data[2]}', '{$data[3]}', '{$data[4]}', '{$data[5]}', '{$data[6]}', '{$data[7]}', '{$data[8]}', '{$data[9]}', '{$data[10]}' )";
$xoopsDB->queryF($sql) or web_error($sql);
}
fclose($handle);
- 控制符=fopen(檔名,模式):打開檔案,布林值=fclose(檔案控制符):關閉檔案
- 陣列=fgetcsv(檔案控制符,[最長讀取長度],[分格符號],[文字引號]):讀取CSV檔
- 同HTML,將mime-type改為application/json 即可
- 如果是要給其他程式線上介接,一般不需要用header()來指定格式,直接echo即可。
- 以PHP而言,利用json_encode("中文", JSON_UNESCAPED_UNICODE); 就可把陣列轉換為json格式
- 利用json_decode($json)就可以把json轉換為PHP陣列。
- 擷取遠端的json檔案可以利用file_get_contents ($檔名) 來抓取!
- http://data.gov.tw/data_list
- http://data.tainan.gov.tw/dataset