跳到主要內容

發表文章

目前顯示的是 12月, 2018的文章

Xoops做一個php下載檔案自動壓縮成ZIP格式方法-教學撰寫:徐嘉裕Neil hsu

2021-11-15補充說明,由於PHP8.0對於new ZipArchive的寫法有改變,以下方法無法於PHP8.0中使用,如需使用PHP8.0開發Xoops模組zip下載功能的請參考這篇工作心得 Xoops做一個php8.0下載檔案自動壓縮成ZIP格式方法 通常下載檔案做個按鈕直接路徑指向檔案就能下載了,但現在瀏覽器越來越聰明,像是PDF,WOED或是圖片類型都會直接在瀏覽器開啟,而不會下載,再加上下載檔案會消耗網站上行頻寬,所以最好的方法就是吧要下載的檔案壓縮成ZIP格式再讓USER下載,減少頻寬消耗,這樣就都沒問題了,php5.2後都支援new ZipArchive函數,所以不用再去改什麼php.ini檔了。 方法如下: PHP-CODE-把以下程式碼放到模組的function.php裡面,於要觸發下載的PHP檔中引入function.php //下載檔案壓縮ZIP格式function function  zipArchivefunction($url="",$zipname="",$temp=""){ //$url 檔案原始路徑+檔名 //$zipname 檔案名稱 //$temp 檔案暫存路徑+檔名 /********利用ZipArchive產生壓縮檔************/ $zip = new ZipArchive; $zip->open($temp, ZipArchive::CREATE); //$zip->addFile($dir); //添加檔案 (若有大量檔案可使用迴圈) $new_filename = substr($url, strrpos($url, '/') + 1);  //重新定義壓縮檔路徑 $zip->addFile($url, $new_filename); $zip->close(); /********使用header命令php下載zip檔************/ header('Content-Type: application/zip'); //指定類型 header("Content-type: ".filetype(&qu

分享一個好用的PHP單位換算function-教學撰寫:徐嘉裕Neil hsu

上傳檔案的$_FILES["file"]變數共會產生以下五個陣列內容 $_FILES["file"]["name"]:上傳檔案的原始名稱。 $_FILES["file"]["type"]:上傳的檔案類型。 $_FILES["file"]["size"]:上傳的檔案原始大小。 $_FILES["file"]["tmp_name"]:上傳檔案後的暫存資料夾位置。 $_FILES["file"]["error"]:如果檔案上傳有錯誤,可以顯示錯誤代碼。 如果要取檔案大小值,只要吧$_FILES["file"]["size"]存進資料庫即可,但是$_FILES["file"]["size"]預設解析檔案大小的單位是 byte ,所以如果是1MB大小的檔案則會取得1048576-byte值,如果能有一個function能吧數值轉換成B/KB/MB/GB/TB該多好,不然一長串數字USER也看不懂,上網Google一下找一個還不錯的單位換算function,測試都沒問題分享給大家。 吧以下的code丟到模組的function.php中,記得在要使用的php檔引入function.php //單位換算 function formatBytes($size) { $units = array(' B', ' KB', ' MB', ' GB', ' TB'); for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024; return round($size, 2).$units[$i]; } 這樣在需要使用轉換的地方需呼叫涵式即可 echo $filesize= formatBytes($size= $var ); $var 數值就是存進資料表的$_FILES[&q

Google網頁翻譯套件(官網已關閉申請頁面)需自行修改js設定-教學撰寫:徐嘉裕Neil hsu

Google網頁翻譯套件是網站建置上常用的功能,點選可以翻譯網站的文字為指定的語言,原本是在Google翻譯頁面中就能申請套件, 但自從11月Google翻譯改版後沒多久,Google網頁翻譯套件的申請頁面也被關閉了,好朋友可以點一下原本申請的網站: https://translate.google.com/intl/zh-TW/about/website/ 因該會看到這個畫面,翻譯套件申請頁面GG了! 不過還好G大神還是有保留原本的JS翻譯程式及功能,但如果要使用就要自己稍作修改了喔!!原始碼如下: <div id="google_translate_element"></div><script type="text/javascript"> function googleTranslateElementInit() { new google.translate.TranslateElement({pageLanguage: ' zh-TW ', includedLanguages: ' en,ja,zh-TW ', layout: google.translate.TranslateElement.InlineLayout.SIMPLE}, 'google_translate_element'); } </script><script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script> 其中需要修改的地方為: 藍字的pageLanguage: 數值,這個是翻譯套件預設的語言。 紅字includedLanguages: 數值,這個是可以讓使用者選擇要翻譯的語言,用英文,區隔 問題是如何知道這些語言的編碼參數呢,像是什麼ja,en去哪找?這問題很好處理,進到Google翻譯網頁 https://translate.google.

ajax使用FormData物件多檔上傳的方法-教學撰寫:徐嘉裕Neil hsu

之前寫了一篇心得是【 ajax使用FormData物件上傳檔案 】,那方法只針對單一檔案上傳,如果是多檔要使用FormData物件上傳需要修改一下檔案的取值方式,方法如下。 <input class="form-control" id="blockimg" type="file"  multiple/> <button id="upload">Upload</button> //$.ajax  $('#upload').on('click', function() {     var form_data = new FormData();  //建構new FormData()       for(var i=0; i<$('#blockimg')[0].files.length;i++){                    form_data.append('file[]', $('#blockimg')[0].files[i]);                }                                    $.ajax({                 url: 'upload.php',                 cache: false,                 contentType: false,                 processData: false,                 data: form_data,     //data只能指定單一物件                                  type: 'post',                success: function(data){                     $('#ajsxboxdhow').html(data);            

好用的jQuery多圖上傳即時預覽功能-教學撰寫:徐嘉裕Neil hsu

之前用過很多jQuery多圖上傳即時預覽程式,包括vmodel等,最大的問題就是會跟ck編輯器的js引入檔衝突,導致預覽圖無法顯示,很頭痛的,最近剛好有一個案子又遇到需要同時上傳多圖跟ck編輯器並存,所以只好放棄vmodel多圖預覽另外找其他的jQuery程式套件來用,上網估狗了一下找到這支jQuery多圖上傳程式還滿好用的,簡單又方便,樣式我也做了美化修改,分享給大家!! //html結構部分 <input type="file" id="showimg" multiple/> <div class='row'><div id='previewMultiple'></div>  </div> //js部分,請吧程式放到模組引入的.js檔中或自行建立一支js檔,然後引入 //需要引入bootstrap框架 $(document).ready(function() { $("#showimg").change(function(){ $("#previewMultiple").html(""); // 清除預覽 readURL(this); }); function readURL(input){ if (input.files && input.files.length >= 0) { for(var i = 0; i < input.files.length; i ++){ var reader = new FileReader(); reader.onload = function (e) { var img = '<div class=col-md-6><div class=thumbnail><img src="' + e.target.result + '"></div></div>'; $("#previewMultiple").append(i