今天在用 preg_match_all 抓取網頁售價時,要比對 $ 時值無法成功,
例如一串文字:<div>價格 $ 600</div>,要抓取600,
抓取時寫成:preg_match_all("/價格 \$ (.*?)/",$str,$price_arr);
這樣會抓不到價格,後來發現要加兩個\才能抓到正確價格,
preg_match_all("/價格 \\$ (.*?)/",$str,$price_arr);
2017年2月15日 星期三
2016年11月17日 星期四
【PHP】rand 配合資料庫隨機不重複
如果有一批折價券,折價券編號為 2130001 ~ 2130500,
要隨機挑出一張發給使用者,發過的下次就不能再發,
作法:
1.先抓總數量還有多少張可以發 (要扣掉已發過的)
2.用 rand(1,500) 抓出一個數字
3.如找到321,去資料庫找第321筆是哪個折價券編號
4.因為發出一張,下次就會變成 rand(1,499)
要隨機挑出一張發給使用者,發過的下次就不能再發,
作法:
1.先抓總數量還有多少張可以發 (要扣掉已發過的)
2.用 rand(1,500) 抓出一個數字
3.如找到321,去資料庫找第321筆是哪個折價券編號
4.因為發出一張,下次就會變成 rand(1,499)
2016年11月16日 星期三
【PHP】字串只取數字
今天一串字串要只取中的數字,
原理:用正規表示法做取代,取代除了數字以外的都取代成空白
Example:
$str = "單價:750"; // 只要取750
preg_replace('/[^\d]/','',$str);
原理:用正規表示法做取代,取代除了數字以外的都取代成空白
Example:
$str = "單價:750"; // 只要取750
preg_replace('/[^\d]/','',$str);
2016年11月15日 星期二
【PHP】單數&複數 位元運算子
今天在查資料時突然看到單複數的範例,
一般網站都是直接%2看有沒有餘數,
但他是用位元運算子 (Bitwise Operators),
挖這是讀書時才聽過的東西,這邊記錄一下,
網站真的比較少用:
一般網站都是直接%2看有沒有餘數,
但他是用位元運算子 (Bitwise Operators),
挖這是讀書時才聽過的東西,這邊記錄一下,
網站真的比較少用:
function odd($var)
{
return($var & 1);
}
function even($var)
{
return(!($var & 1));
}
{
return($var & 1);
}
function even($var)
{
return(!($var & 1));
}
2016年11月14日 星期一
【PHP】把 table 的寬變成空白,preg_replace取代某部分
本來覺得很簡單的問題,結果試了好久,這邊紀錄一下,
今天有一段字串,
例如:<table class="mytable" width="200" height="300">
目的把是把 width="" 變成:
<table class="mytable" width="" height="300">
作法:
今天有一段字串,
例如:<table class="mytable" width="200" height="300">
目的把是把 width="" 變成:
<table class="mytable" width="" height="300">
作法:
【PHP、MySQL】SQL搜尋分段LOG
今天要抓出半年內每個商品被點擊次數,在存入 PROD_CLICK
因為 LOG 量太大,所以每個月都會產生新的表單來儲存
類似:PROD_LOG_1606 ~ PROD_LOG_1612
所以要搜尋半年就會有6個資料表
步驟:
1.依目前日期及指定幾個月算出有幾個資料表
因為 LOG 量太大,所以每個月都會產生新的表單來儲存
類似:PROD_LOG_1606 ~ PROD_LOG_1612
所以要搜尋半年就會有6個資料表
步驟:
1.依目前日期及指定幾個月算出有幾個資料表
方法很多,可以直接用月份去減,但為了比較活我這邊是用天數去減,
$prod_click_day = $SS->getData('prod_click_day'); // 抓出設定天數
$day = strtotime("-$prod_click_day day"); // 用時間戳記來算差別的日期
$difMonth = date("m",time() - $day); // 算出與面前相差的月份
$prod_click_day = $SS->getData('prod_click_day'); // 抓出設定天數
$day = strtotime("-$prod_click_day day"); // 用時間戳記來算差別的日期
$difMonth = date("m",time() - $day); // 算出與面前相差的月份
2016年11月9日 星期三
【PHP】PChome 廣告刊登-免費刊登廣告,製作匯入ZIP檔
這次要將公司商品放在PChome免費廣告中,
在廣告刊登中有一項多筆匯入的功能,
我要寫程式匯出商品後直接匯入PChome,
有點麻煩所以做成筆記,
匯入的限制:要上傳ZIP並裡面附圖片且圖要超過400*400,每張圖不能超過200K。
製作步驟
1.首先第一步當然是將公司上架商品從資料庫撈出來
在廣告刊登中有一項多筆匯入的功能,
我要寫程式匯出商品後直接匯入PChome,
有點麻煩所以做成筆記,
匯入的限制:要上傳ZIP並裡面附圖片且圖要超過400*400,每張圖不能超過200K。
製作步驟
1.首先第一步當然是將公司上架商品從資料庫撈出來
因為有檔案大小限制10MB,所以要做分頁上傳,一張圖片抓100kb,
一次只能上傳100筆,結果5000多品就要上傳50幾次..
一次只能上傳100筆,結果5000多品就要上傳50幾次..
2016年7月25日 星期一
【PHP】會員層級 遞迴運用
今天有個case要做會員層級的階層圖
畫面如下:
HTML:
<ul id="org" style="display:none">
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
<ul>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
<ul>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
</ul>
</li>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
<ul>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
</ul>
</li>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
<ul>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
</ul>
</li>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
<ul>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
<li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
</ul>
</li>
</ul>
</li>
</ul>
<link rel="stylesheet" href="/css/jquery.jOrgChart.css">
<script type="text/javascript" src="/js/jquery.jOrgChart.js"></script>
<script>
$(document).ready(function() {
$("#org").jOrgChart({
chartElement: '#chart'
});
});
</script>
2016年7月13日 星期三
【PHP】json 相關 中文亂碼、解碼後為陣列
解決PHP json_encode 中文是亂碼問題
雖然編碼後中文是亂碼,decode之後又會變回正常
但如果存入資料庫要是中文就要用:
雖然編碼後中文是亂碼,decode之後又會變回正常
但如果存入資料庫要是中文就要用:
PHP 5.4 以下:
function jsonRemoveUnicodeSequences($struct) { return preg_replace("/\\\\u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($struct)); }
PHP 5.4 以上:
json_encode($str,JSON_UNESCAPED_UNICODE);
解碼要變成陣列:
json_decode($str,true);2016年7月6日 星期三
【PHP】header 中加入Authorization token驗證
今天再串某家商成的API,要使用Authorization token驗證,
這邊記錄一下步驟:
1.依照API手冊先取得連線的token
2.用curl方式將token加入header中
加入方式:
Code 部分:
// 取得token $token = get_token(); $url = THIS_API_URL.$url; // 將token加入header中 $API->http_header = array(); $API->http_header[] = 'Content-type: application/json'; $API->http_header[] = 'Authorization: basic '.$token; $API->send_method = $send_method; // 執行 $return = $API->curl_file_get_contents($url,$array); $return = json_decode($return,true);
Class 部分:
class API { // POST 資料 public $send_method = 'post', // 傳送方式 $http_header = array('Content-Type: text/plain') ; public function curl_file_get_contents($url,$request=array()) { $useragent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36"; $curl = curl_init(); // 啟動一個CURL會話 curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址 curl_setopt($curl, CURLOPT_REFERER, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從證書中檢查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, $useragent); // 模擬用戶使用的瀏覽器 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉 curl_setopt($curl, CURLOPT_ENCODING, "UTF-8"); // 編碼 curl_setopt($curl, CURLOPT_COOKIE, "cookieLangId=zh_tw;"); // 傳送cookie curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設置Referer if ($this->send_method == 'post') { curl_setopt($curl, CURLOPT_POST, count($request)); // 發送一個常規的Post請求 curl_setopt($curl, CURLOPT_POSTFIELDS, $request); // Post提交的數據包 } curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 連線時間 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設置超時限制防止死循環 curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回 curl_setopt($curl, CURLOPT_HTTPHEADER, $this->http_header); $r = curl_exec($curl); // 執行操作 if (curl_errno($curl)) { echo 'Errno'.curl_error($curl);//捕抓異常 } curl_close($curl); // 關閉CURL會話 return $r; } }php 要讀取 Authorization 要在 .htaccess 加上:
RewriteEngine on
RewriteRule .? - [E=Authorization:%{HTTP:Authorization}]
print_r($GLOBALS);
2016年5月12日 星期四
【PHP】AES 128 編碼
API需要用到AES 128 編碼 + base64編碼,特別記下來。
// 編碼 function encrypt($str, $key){ $str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$str,MCRYPT_MODE_ECB); $str = base64_encode($str); return $str; } // 解碼 function decrypt($str, $key){ $str = base64_decode($str); $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$str,MCRYPT_MODE_ECB); return $str; }
2016年5月6日 星期五
【PHP】無法 load mcrype
OS : Windows 2003
Apache 2.2.27
PHP 5.2.16
於php.ini 裡,將 ;extension=php_mcrypt.dll uncomment,並重新啟動 apache 後,發現 load mcrypt 出現問題,且該模組也沒有成功的 load。
後來發現原因為 PHP Server 找不到 php_mcrypt.dll 相依的 libmcrypt.dll檔案,即使 path 內有設定相關路徑,也是有錯誤。
解決方法:
將 php 裡的 libmcrypt.dll copy 到 C:\WINDOWS\ 下,然後重新啟動 apache,即可成功載入模組。
都不成功可將 php_mcrypt.dll 及 libmcrypt.dll 放到WINDOWS和SYSTEM32目錄下試試看
Apache 2.2.27
PHP 5.2.16
於php.ini 裡,將 ;extension=php_mcrypt.dll uncomment,並重新啟動 apache 後,發現 load mcrypt 出現問題,且該模組也沒有成功的 load。
後來發現原因為 PHP Server 找不到 php_mcrypt.dll 相依的 libmcrypt.dll檔案,即使 path 內有設定相關路徑,也是有錯誤。
解決方法:
將 php 裡的 libmcrypt.dll copy 到 C:\WINDOWS\ 下,然後重新啟動 apache,即可成功載入模組。
都不成功可將 php_mcrypt.dll 及 libmcrypt.dll 放到WINDOWS和SYSTEM32目錄下試試看
2015年8月18日 星期二
【PHP】CURL HTTPS POST
function curl_file_get_contents($url,$request=array()){ /*if ($request){ $req = ''; foreach($request as $key=>$val){ $req .= $key.'='.$val.'&';} $req = rtrim($req,'&'); }*/ $useragent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36"; $curl = curl_init(); // 啟動一個CURL會話 curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址 curl_setopt($curl, CURLOPT_REFERER, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從證書中檢查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, $useragent); // 模擬用戶使用的瀏覽器 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉 curl_setopt($curl, CURLOPT_ENCODING, "UTF-8"); // 編碼 curl_setopt($curl, CURLOPT_COOKIE, "cookieLangId=zh_tw;"); // 傳送cookie curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設置Referer curl_setopt($curl, CURLOPT_POST, count($request)); // 發送一個常規的Post請求 curl_setopt($curl, CURLOPT_POSTFIELDS, $req); // Post提交的數據包 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 連線時間 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設置超時限制防止死循環 curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回 $r = curl_exec($curl); // 執行操作 if (curl_errno($curl)) { echo 'Errno'.curl_error($curl);//捕抓異常 } curl_close($curl); // 關閉CURL會話 return $r; }
2015年1月15日 星期四
【PHP】較不常用的 array function
$array1 = array('a','b','c','a'); $array2 = array('c','A','d','c'); // 相交(比對) Array ( [0] => c [3] => c ) $r1 = array_intersect($array2,$array1); // 結合 (第一個變數為key 第二個為value) Array ( [a] => c [b] => A [c] => d ) $r2 = array_combine($array1,$array2); // 出現次數 Array ( [a] => 2 [b] => 1 [c] => 1 ) $r3 = array_count_values($array1); // 不同 Array ( [0] => a [1] => b [3] => a ) $r4 = array_diff($array1,$array2); // 不同連key都要相同 Array ( [0] => a [1] => b [2] => c [3] => a ) $r5 = array_diff_assoc($array1,$array2); // 是否有 1 的 key 值 $r6 = array_key_exists('1',$array1); // 列出所有的key Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 ) $r7 = array_keys($array2); // 結合陣列有相同的key會結合 $r8 = array_merge_recursive($array1,$array2); // 亂數抓key $r9 = array_rand($array1); // 將值加入陣列 $r10 = array_push($array1,'d'); // 將value傳入function func($a,$b) 可傳多的值 $r11 = array_map("func",$array1,$array2); // 將key及value傳入function func($value,$key) 一個變數為key $r12 = array_walk($array1,"func"); // 目前第一個值 $r13 = current($array1); // 指到下一個值 $r14 = next($array1); // 洗牌 $r15 = shuffle($array1);
2014年12月18日 星期四
【PHP】PHP寄信 PHPMailer
1.一般寄信
※ $header 詳細說明: 連結
ini_set('SMTP','mail.threewell.com.tw'); $to ="wsxrtgvbuikm@gmail.com"; // 收件者 $subject = "發送測試"; //信件標題 $msg = '<!doctype html><html><head><meta charset="utf-8"></head><body><div style="background-color:#F00;color:#000" align="center">wsxrtgvbuikm@gmail.com</div></body></html>'; // 信件內容 $name = '賴俊銘'; // 寄件人 $sendMail = 'steven@threewell.com.tw'; // 寄件人信箱 要 smtp 允許的信箱 $headers = "From: ".$name ."<".$sendMail.">". "\r\n"; // 寄件人資料 $headers .= "Content-Type: text/html; charset=utf-8; format=flowed". "\r\n"; // 編碼方式 有用到html要用text/html $headers .= "MIME-Version: 1.0". "\r\n"; // MIME版本 $headers .= "Content-Transfer-Encoding: 8bit". "\r\n"; // 8位元ASCII碼。 $headers .= "X-Mailer: PHP". "\r\n"; // 哪邊發送的 if(mail($to, $subject, $msg, $headers)): echo '發送成功'; else: echo '發送失敗'; endif;
2.PHPMailer-master 使用套件
ini_set('SMTP','mail.threewell.com.tw'); require 'PHPMailer-master/PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->setLanguage('zh'); // 設定語系 沒用的語言可刪掉 $mail->CharSet = 'UTF-8'; // 編碼 $mail->setFrom('steven@threewell.com.tw', '賴俊銘'); // 寄件人信箱及寄件人 $mail->addAddress('wsxrtgvbuikm@gmail.com', 'wsxrtgvbuikm'); // 收件人信箱及收件人 $mail->Subject = '信件標題'; // 標題 $mail->msgHTML('<a href="#">wsxrtgvbuikm</a>中文中文'); // 內容 $mail->addAttachment('HDT8GN.jpg'); // 附件 可多個 $mail->addAttachment('HDT8GN2.jpg'); if (!$mail->send()) { echo "寄信錯誤: " . $mail->ErrorInfo; } else { echo "寄信成功"; }
2014年12月10日 星期三
【PHP】串接 Yahoo 商城 API
1.API 文件
2.準備
首先要向 yahoo 提出申請 API,申請成功後會拿到 API Key 和 Secret,
API Key 就像帳號一樣,Shared Secret 是將資料編碼。
API Key 就像帳號一樣,Shared Secret 是將資料編碼。
3.製作簽章及使用API
製作簽章的方法在 Yahoo API 文件就有說明,
直接來實作抓取 Yahoo 商城分類,
在文件中找到 API > Product API > /v1/MallCategory/Get
固定的網址是 http://tw.ews.mall.yahooapis.com/stauth (後面加上功能名稱)
直接來實作抓取 Yahoo 商城分類,
在文件中找到 API > Product API > /v1/MallCategory/Get
固定的網址是 http://tw.ews.mall.yahooapis.com/stauth (後面加上功能名稱)
YahooAPI class
/* * @author wsxrtgvbuikm@gmail.com * 首先要先 define 以下幾個變數: * 1.YAHOO_API_KEY : YAHOO申請的KEY * 2.YAHOO_API_SECRET : YAHOO申請的SECRET * 3.YAHOO_API_ID : YAHOO的帳號 (測試過其實亂打都過) * 4.YAHOO_API_NAME : YAHOO的名稱 (通常是中文) * 5.YAHOO_API_URL : http://tw.ews.mall.yahooapis.com/stauth */ header("Content-Type: text/html; charset=utf-8"); define('YAHOO_API_KEY','輸入API KEY'); define('YAHOO_API_SECRET','輸入API_SECRET'); define('YAHOO_API_ID','輸入ID'); define('YAHOO_API_NAME','輸入名稱'); define('YAHOO_API_URL','http://tw.ews.mall.yahooapis.com/stauth'); class YahooAPI { public function yahoo_api($url,$arr=array(),$other_val=array()){ $url = YAHOO_API_URL.$url; $auth_arr = array('ApiKey'=>YAHOO_API_KEY, 'TimeStamp'=>time(), 'Id'=>YAHOO_API_ID, 'Name'=>YAHOO_API_NAME, 'Format'=>'json' ); $request_arr = array_merge($auth_arr,$arr); // 會有編碼的問題所以用foreach //$request = urldecode(http_build_query($request_arr)); $request = ''; foreach($request_arr as $key=>$val){ $request .= $key.'='.$val.'&'; } $request = substr($request,0,-1); // $request用SECRET sha1加密 $signature = hash_hmac('sha1',$request,YAHOO_API_SECRET); $request_arr['Signature'] = $signature; // 加入其他參數像是上傳圖片就不包含在加密範圍 $request_arr = array_merge($request_arr,$other_val); $this->request = $request_arr; $r = $this->curl_file_get_contents($url,$request_arr); $arr = json_decode($r,true); return $arr; } public function curl_file_get_contents($url,$request){ $ch = curl_init(); $timeout = 5; $cookie = "cookieLangId=zh_tw;"; curl_setopt ($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_ENCODING, "UTF-8"); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt ($ch, CURLOPT_POST, true); // 啟用POST curl_setopt ($ch, CURLOPT_POSTFIELDS, $request); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); $r = curl_exec($ch); curl_close($ch); return $r; } }
取得分類
include("YahooAPI.php"); $Yahoo = new YahooAPI(); // 取得 YAHOO 商城分類 $url = '/v1/MallCategory/Get'; $arr = array('CategoryId'=>$CategoryId); $r = $Yahoo->yahoo_api($url,$arr); print_r($r);
上傳商品範例
在文件上有標記(Require)一定要填,
有些是要用API先去查代碼,其他(Optional)沒有傳值就不要出現不然會失敗..
有些是要用API先去查代碼,其他(Optional)沒有傳值就不要出現不然會失敗..
$url = '/v2/Product/SubmitMain'; $arr = array('SaleType'=>'Normal', // 商品銷售方式 'SaleTypeInfo'=>'Normal', // 商品銷售資訊 'ProductName'=>$rs['NAME'], // 商品名稱 'MallCategoryId'=>$rs['YAHOO_CAT'], // 商城商品分類代號 'StoreCategoryId'=>$rs['YAHOO_STORE_CAT'], // 商品歸類 'MarketPrice'=>$rs['MARKET_PRICE'], // 商品市價 'SalePrice'=>$rs['PRICE'], // 網路價 'CostPrice'=>$rs['COST'], // 成本價 'MaxBuyNum'=>$rs['LIMIT_NUM'], // 最高購買數量 'ShortDescription'=>$rs['DESC'], // 商品簡述 'LongDescription'=>$rs['CONTENT'], // 商品介紹 'PayTypeId'=>'1', // 付款方式代號 'PayTypeId'=>'2', // 付款方式代號 'PayTypeId'=>'4', // 付款方式代號 'PayTypeId'=>'8', // 付款方式代號 'PayTypeId'=>'9', // 付款方式代號 'PayTypeId'=>'10', // 付款方式代號 'ShippingId'=>'1', // 物流方式代號 'ShippingId'=>'2', // 物流方式代號 'IsTaxFree'=>'0', // 此商品是否為免稅商品 'SpecTypeDimension'=>'0', // 商品規格 'CustomizedMainProductId'=>$rs['PRODUCT_ID'], // 商品主貨號 'Stock'=>$rs['STOCK'], // 商品庫存量 'SaftyStock'=>$rs['SAFYSTOCK'], // 商品庫存最低警告量 ); $return = $Yahoo->yahoo_api($url,$arr);
上傳圖片
$url = '/v1/Product/UploadImage'; $arr = array('ProductId'=>$productId, // 商品ID 'MainImage'=>'ImageFile1', // 第一張圖 可一次傳多張 'Purge'=>'true' // 是否保留原圖 ); // 商品圖系統路徑 - 因為這個不加入簽章所以要另外放 // 前面加上@ CURL 就會當成檔案上傳 $request_arr['ImageFile1'] = '@'.HTTP_REAL_PATH.$rs['IMAGE']; $return = $this->yahoo_api($url,$arr,$request_arr);
2014年11月11日 星期二
【PHP】phpExcel範例
require_once("PHPExcel.php"); $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties()->setTitle(" List"); $objPHPExcel->getProperties()->setCategory(" List"); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setCellValue('A1', '商品編號');
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(13); $objPHPExcel->getActiveSheet()->setCellValue('B1', '商品名稱'); $objPHPExcel->getActiveSheet()->setCellValue('C1', '醒目標題'); $objPHPExcel->getActiveSheet()->setCellValue('D1', '頁面標題'); $objPHPExcel->getActiveSheet()->setCellValue('E1', '頁面關鍵字'); $objPHPExcel->getActiveSheet()->setCellValue('F1', '頁面描述'); $objPHPExcel->getActiveSheet()->setCellValue('G1', '中類屬性'); $objPHPExcel->getActiveSheet()->setCellValue('H1', '小類屬性'); $objPHPExcel->getActiveSheet()->setCellValue('I1', '市價'); $objPHPExcel->getActiveSheet()->setCellValue('J1', '售價'); $objPHPExcel->getActiveSheet()->setCellValue('K1', '成本'); $objPHPExcel->getActiveSheet()->setCellValue('L1', '庫存數'); $objPHPExcel->getActiveSheet()->setCellValue('M1', '安全庫存數'); $objPHPExcel->getActiveSheet()->setCellValue('N1', '上架日'); $objPHPExcel->getActiveSheet()->setCellValue('O1', '下架日'); $objPHPExcel->getActiveSheet()->setCellValue('P1', '商品介紹'); $objPHPExcel->getActiveSheet()->setCellValue('Q1', '功能一標題'); $objPHPExcel->getActiveSheet()->setCellValue('R1', '功能一內容'); $objPHPExcel->getActiveSheet()->setCellValue('S1', '功能二標題'); $objPHPExcel->getActiveSheet()->setCellValue('T1', '功能二內容'); $objPHPExcel->getActiveSheet()->setCellValue('U1', '功能三標題'); $objPHPExcel->getActiveSheet()->setCellValue('V1', '功能三內容'); $objPHPExcel->getActiveSheet()->setCellValue('W1', '功能四標題'); $objPHPExcel->getActiveSheet()->setCellValue('X1', '功能四內容'); $objPHPExcel->getActiveSheet()->setCellValue('Y1', '功能五標題'); $objPHPExcel->getActiveSheet()->setCellValue('Z1', '功能五內容'); $objPHPExcel->getActiveSheet()->setCellValue('AA1', '功能六標題'); $objPHPExcel->getActiveSheet()->setCellValue('AB1', '功能六內容'); $objPHPExcel->getActiveSheet()->setCellValue('AC1', '功能七標題'); $objPHPExcel->getActiveSheet()->setCellValue('AD1', '功能七內容'); $objPHPExcel->getActiveSheet()->setCellValue('AE1', '功能八標題'); $objPHPExcel->getActiveSheet()->setCellValue('AF1', '功能八內容'); $objPHPExcel->getActiveSheet()->setCellValue('AG1', '商品圖片'); $i = 1; foreach($datas['data'] as $rs) { $i++; $objPHPExcel->getActiveSheet()->setCellValue('A'.$i, $a); $objPHPExcel->getActiveSheet()->setCellValue('B'.$i, $b); $objPHPExcel->getActiveSheet()->setCellValue('C'.$i, $c); $objPHPExcel->getActiveSheet()->setCellValue('D'.$i, $d); $objPHPExcel->getActiveSheet()->setCellValue('E'.$i, $e); $objPHPExcel->getActiveSheet()->setCellValue('F'.$i, $f); $objPHPExcel->getActiveSheet()->setCellValue('G'.$i, $g); $objPHPExcel->getActiveSheet()->setCellValue('H'.$i, $h); $objPHPExcel->getActiveSheet()->setCellValue('I'.$i, $i); $objPHPExcel->getActiveSheet()->setCellValue('J'.$i, $j); $objPHPExcel->getActiveSheet()->setCellValue('K'.$i, $k); $objPHPExcel->getActiveSheet()->setCellValue('L'.$i, $l); $objPHPExcel->getActiveSheet()->setCellValue('M'.$i, $m); $objPHPExcel->getActiveSheet()->setCellValue('N'.$i, $n); $objPHPExcel->getActiveSheet()->setCellValue('O'.$i, $o; $objPHPExcel->getActiveSheet()->setCellValue('P'.$i, $p); $objPHPExcel->getActiveSheet()->setCellValue('Q'.$i, $q); $objPHPExcel->getActiveSheet()->setCellValue('R'.$i, $r); $objPHPExcel->getActiveSheet()->setCellValue('S'.$i, $s); $objPHPExcel->getActiveSheet()->setCellValue('T'.$i, $t); $objPHPExcel->getActiveSheet()->setCellValue('U'.$i, $u); $objPHPExcel->getActiveSheet()->setCellValue('V'.$i, $v); $objPHPExcel->getActiveSheet()->setCellValue('W'.$i, $w); $objPHPExcel->getActiveSheet()->setCellValue('X'.$i, $x); $objPHPExcel->getActiveSheet()->setCellValue('Y'.$i, $y); $objPHPExcel->getActiveSheet()->setCellValue('Z'.$i, $z); $objPHPExcel->getActiveSheet()->setCellValue('AA'.$i, $aa); $objPHPExcel->getActiveSheet()->setCellValue('AB'.$i, $ab); $objPHPExcel->getActiveSheet()->setCellValue('AC'.$i, $ac); $objPHPExcel->getActiveSheet()->setCellValue('AD'.$i, $ad); $objPHPExcel->getActiveSheet()->setCellValue('AE'.$i, $ae); $objPHPExcel->getActiveSheet()->setCellValue('AF'.$i, $af); $objPHPExcel->getActiveSheet()->setCellValue('AG'.$i, $ag); } // OUTPUT header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="output'.date("YmdHis").'.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output');
實用筆記整理
error_reporting(E_ALL);
date_default_timezone_set(‘Asia/Taipei’);
/** PHPExcel */
require_once ‘Classes/PHPExcel.php';
date_default_timezone_set(‘Asia/Taipei’);
/** PHPExcel */
require_once ‘Classes/PHPExcel.php';
// 新增Excel物件
$objPHPExcel = new PHPExcel();
$objPHPExcel = new PHPExcel();
// 設定屬性
$objPHPExcel->getProperties()->setCreator(“PHP")
->setLastModifiedBy(“PHP")
->setTitle(“Title")
->setSubject(“Subject")
->setDescription(“Description")
->setKeywords(“Keywords")
->setCategory(“Category");
$objPHPExcel->getProperties()->setCreator(“PHP")
->setLastModifiedBy(“PHP")
->setTitle(“Title")
->setSubject(“Subject")
->setDescription(“Description")
->setKeywords(“Keywords")
->setCategory(“Category");
//設定操作中的工作表
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->setActiveSheetIndex(0);
//將工作表命名
$objPHPExcel->getActiveSheet(0)->setTitle(‘第一張表’);
$objPHPExcel->getActiveSheet(0)->setTitle(‘第一張表’);
//合併儲存格
$objPHPExcel->getActiveSheet(0)->mergeCells(‘A1:D2′);
$objPHPExcel->getActiveSheet(0)->mergeCells(‘A1:D2′);
//儲存格內容
$objPHPExcel->getActiveSheet(0)->setCellValue(‘A1′,’PHPEXCEL TEST’); //合併後的儲存格,設定時指定左上角那個。
$objPHPExcel->getActiveSheet(0)->setCellValue(‘A3′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘B3′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘C3′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘D3′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘A4′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘B4′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘C4′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘D4′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘A1′,’PHPEXCEL TEST’); //合併後的儲存格,設定時指定左上角那個。
$objPHPExcel->getActiveSheet(0)->setCellValue(‘A3′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘B3′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘C3′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘D3′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘A4′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘B4′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘C4′,’test’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘D4′,’test’);
//設定背景顏色單色
$objPHPExcel->getActiveSheet(0)->getStyle(‘A3:D3′)->applyFromArray(
array(‘fill’ => array(
‘type’ => PHPExcel_Style_Fill::FILL_SOLID,
‘color’ => array(‘argb’ => ‘D1EEEE’)
),
)
);
//設定漸層背景顏色雙色(灰/白) 經測試,Excel2007才有漸層
$objPHPExcel->getActiveSheet(0)->getStyle(‘A1:D2′)->applyFromArray(
array(
‘font’ => array(‘bold’ => true,
‘size’ => ’24’),
‘alignment’ => array(‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER),
‘borders’ => array(‘top’ => array(‘style’ => PHPExcel_Style_Border::BORDER_THIN)),
‘fill’ => array(‘type’ => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
‘rotation’ => 90,
‘startcolor’ => array(‘rgb’ => ‘DCDCDC’),
‘endcolor’ => array(‘rgb’ => ‘FFFFFF’))
));
$objPHPExcel->getActiveSheet(0)->getStyle(‘A3:D3′)->applyFromArray(
array(‘fill’ => array(
‘type’ => PHPExcel_Style_Fill::FILL_SOLID,
‘color’ => array(‘argb’ => ‘D1EEEE’)
),
)
);
//設定漸層背景顏色雙色(灰/白) 經測試,Excel2007才有漸層
$objPHPExcel->getActiveSheet(0)->getStyle(‘A1:D2′)->applyFromArray(
array(
‘font’ => array(‘bold’ => true,
‘size’ => ’24’),
‘alignment’ => array(‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER),
‘borders’ => array(‘top’ => array(‘style’ => PHPExcel_Style_Border::BORDER_THIN)),
‘fill’ => array(‘type’ => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
‘rotation’ => 90,
‘startcolor’ => array(‘rgb’ => ‘DCDCDC’),
‘endcolor’ => array(‘rgb’ => ‘FFFFFF’))
));
//框線 方法一:使用 setBorderStyle() 函數
$objPHPExcel->getActiveSheet(0)->getStyle(‘A5′)->getBorders()->getTop() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet(0)->getStyle(‘B5′)->getBorders()->getBottom() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet(0)->getStyle(‘C5′)->getBorders()->getleft() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet(0)->getStyle(‘D5′)->getBorders()->getright() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet(0)->getStyle(‘A7:C10′)->getBorders()->getAllborders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet(0)->getStyle(‘A5′)->getBorders()->getTop() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet(0)->getStyle(‘B5′)->getBorders()->getBottom() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet(0)->getStyle(‘C5′)->getBorders()->getleft() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet(0)->getStyle(‘D5′)->getBorders()->getright() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet(0)->getStyle(‘A7:C10′)->getBorders()->getAllborders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
//框線 方法二:使用applyFromArray()函數
$styleArray = array(
‘borders’ => array(
‘allborders’ => array(
‘style’ => PHPExcel_Style_Border::BORDER_THIN,
‘color’ => array(‘argb’ => ‘000000’),
),
),
);
$objPHPExcel->getActiveSheet(0)->getStyle(‘A12:C15′)->applyFromArray($styleArray);
$styleArray = array(
‘borders’ => array(
‘allborders’ => array(
‘style’ => PHPExcel_Style_Border::BORDER_THIN,
‘color’ => array(‘argb’ => ‘000000’),
),
),
);
$objPHPExcel->getActiveSheet(0)->getStyle(‘A12:C15′)->applyFromArray($styleArray);
//框線 方法三:使用物件 + applyFromArray()函數
$style_obj = new PHPExcel_Style();
$style_array = array( ‘borders’ => array(‘allborders’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THIN)),
‘alignment’ => array(‘wrap’=> true,
‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
‘vertical’ => PHPExcel_Style_Alignment::VERTICAL_CENTER
),
‘font’ => array(‘size’ => ‘8’)
);
$style_obj->applyFromArray($style_array);
$objPHPExcel->getActiveSheet(0)->setSharedStyle($style_obj, ‘E7:G10′);
$style_obj = new PHPExcel_Style();
$style_array = array( ‘borders’ => array(‘allborders’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THIN)),
‘alignment’ => array(‘wrap’=> true,
‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
‘vertical’ => PHPExcel_Style_Alignment::VERTICAL_CENTER
),
‘font’ => array(‘size’ => ‘8’)
);
$style_obj->applyFromArray($style_array);
$objPHPExcel->getActiveSheet(0)->setSharedStyle($style_obj, ‘E7:G10′);
//斜線 方法一
$styleArray = array(‘borders’ => array(‘diagonal’ => array(‘style’ => PHPExcel_Style_Border::BORDER_THICK,
‘color’ => array(‘argb’ => ‘FFFF0000′),
),
‘diagonaldirection’ => PHPExcel_Style_Borders::DIAGONAL_UP
//’diagonaldirection’ => PHPExcel_Style_Borders::DIAGONAL_DOWN
//’diagonaldirection’ => PHPExcel_Style_Borders::DIAGONAL_BOTH
),
);
$objPHPExcel->getActiveSheet()->getStyle(“E1″)->applyFromArray($styleArray);
$styleArray = array(‘borders’ => array(‘diagonal’ => array(‘style’ => PHPExcel_Style_Border::BORDER_THICK,
‘color’ => array(‘argb’ => ‘FFFF0000′),
),
‘diagonaldirection’ => PHPExcel_Style_Borders::DIAGONAL_UP
//’diagonaldirection’ => PHPExcel_Style_Borders::DIAGONAL_DOWN
//’diagonaldirection’ => PHPExcel_Style_Borders::DIAGONAL_BOTH
),
);
$objPHPExcel->getActiveSheet()->getStyle(“E1″)->applyFromArray($styleArray);
//斜線 方法二
$objPHPExcel->getActiveSheet()->getStyle(‘F1′)->getBorders()->getDiagonal()->applyFromArray(array(
‘style’ => PHPExcel_Style_Border::BORDER_THIN,
‘color’ => array(‘argb’ => ‘FFFF0000′)
)
);
$objPHPExcel->getActiveSheet()->getStyle(‘F1′)->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_DOWN);
/*
註:
PHPExcel_Style_Borders::DIAGONAL_UP
PHPExcel_Style_Borders::DIAGONAL_DOWN
PHPExcel_Style_Borders::DIAGONAL_BOTH
*/
$objPHPExcel->getActiveSheet()->getStyle(‘F1′)->getBorders()->getDiagonal()->applyFromArray(array(
‘style’ => PHPExcel_Style_Border::BORDER_THIN,
‘color’ => array(‘argb’ => ‘FFFF0000′)
)
);
$objPHPExcel->getActiveSheet()->getStyle(‘F1′)->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_DOWN);
/*
註:
PHPExcel_Style_Borders::DIAGONAL_UP
PHPExcel_Style_Borders::DIAGONAL_DOWN
PHPExcel_Style_Borders::DIAGONAL_BOTH
*/
//設定一個範圍後套用相同格式
$objPHPExcel->getActiveSheet(0)->mergeCells(‘E12:F13′);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘E12′,"Hello \n World");
$style_obj = new PHPExcel_Style();
$style_array = array( ‘borders’ => array(‘allborders’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THIN)),
‘alignment’ => array(‘wrap’=> true,
‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
‘vertical’ => PHPExcel_Style_Alignment::VERTICAL_CENTER
),
‘font’ => array(‘size’ => ‘8’)
);
$style_obj->applyFromArray($style_array);
$objPHPExcel->getActiveSheet(0)->setSharedStyle($style_obj, “E12:G14″);
$objPHPExcel->getActiveSheet(0)->mergeCells(‘E12:F13′);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘E12′,"Hello \n World");
$style_obj = new PHPExcel_Style();
$style_array = array( ‘borders’ => array(‘allborders’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THIN)),
‘alignment’ => array(‘wrap’=> true,
‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
‘vertical’ => PHPExcel_Style_Alignment::VERTICAL_CENTER
),
‘font’ => array(‘size’ => ‘8’)
);
$style_obj->applyFromArray($style_array);
$objPHPExcel->getActiveSheet(0)->setSharedStyle($style_obj, “E12:G14″);
//設定字型(粗細、顏色) 也可參照上面的方法,用陣列的方式設定。
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getFont()->setName(‘Candara’);
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getFont()->setSize(16);
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getFont()->setBold(true);
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); //藍色
$objPHPExcel->getActiveSheet(0)->getStyle(‘C4′)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); //紅色
$objPHPExcel->getActiveSheet(0)->getStyle(‘C4′)->getFont()->getColor()->setARGB(‘FF0000′); //紅色
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getFont()->setName(‘Candara’);
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getFont()->setSize(16);
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getFont()->setBold(true);
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); //藍色
$objPHPExcel->getActiveSheet(0)->getStyle(‘C4′)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); //紅色
$objPHPExcel->getActiveSheet(0)->getStyle(‘C4′)->getFont()->getColor()->setARGB(‘FF0000′); //紅色
$objPHPExcel->getActiveSheet(0)->setCellValue(‘G2′, ‘2008-12-31′);
$objPHPExcel->getActiveSheet(0)->getStyle(‘G2′)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
$objPHPExcel->getActiveSheet(0)->getStyle(‘G2′)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
/*
註:這裡有列出可用英文單字表示的顏色,並不多。
註:這裡有列出可用英文單字表示的顏色,並不多。
COLOR_BLACK
COLOR_BLUE
COLOR_DARKBLUE
COLOR_DARKGREEN
COLOR_DARKRED
COLOR_DARKYELLOW
COLOR_GREEN
COLOR_RED
COLOR_WHITE
COLOR_YELLOW
COLOR_BLUE
COLOR_DARKBLUE
COLOR_DARKGREEN
COLOR_DARKRED
COLOR_DARKYELLOW
COLOR_GREEN
COLOR_RED
COLOR_WHITE
COLOR_YELLOW
*/
//使用函數
$objPHPExcel->getActiveSheet(0)->setCellValue(‘A5′,’3′);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘B5′,’4′);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘C5′, ‘=SUM(A5:B5)’);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘A5′,’3′);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘B5′,’4′);
$objPHPExcel->getActiveSheet(0)->setCellValue(‘C5′, ‘=SUM(A5:B5)’);
//設定A3內容為00123,並指定為文字型態。這樣在顯示的時候不會自動把0去掉。$objPHPExcel->getActiveSheet(0)->getCell(“A4″)->setValueExplicit(‘00123′, PHPExcel_Cell_DataType::TYPE_STRING);
//分離儲存格
//$objActSheet->unmergeCells(‘B1:C22′);
//$objActSheet->unmergeCells(‘B1:C22′);
//設定欄寬
$objPHPExcel->getActiveSheet(0)->getColumnDimension(‘A’)->setWidth(20);
$objPHPExcel->getActiveSheet(0)->getColumnDimension(‘A’)->setWidth(20);
//設定欄寬(自動欄寬)
//$objPHPExcel->getActiveSheet(0)->getColumnDimension(“A")->setAutoSize(true);
//$objPHPExcel->getActiveSheet(0)->getColumnDimension(“A")->setAutoSize(true);
//設定高度
$objPHPExcel->getActiveSheet(0)->getRowDimension(‘1′)->setRowHeight(150);
$objPHPExcel->getActiveSheet(0)->getRowDimension(‘1′)->setRowHeight(150);
//下底線
$objPHPExcel->getActiveSheet(0)->getStyle(“D3″)->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
$objPHPExcel->getActiveSheet(0)->getStyle(“D3″)->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
//旋轉文字
$objPHPExcel->getActiveSheet(0)->getStyle(‘A4′)->getAlignment()->setTextRotation(-90);
//對齊 //注意是 setVertiacl 還是 setHorizontal
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet(0)->getStyle(‘C4′)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
/*
VERTICAL_CENTER 垂直置中
VERTICAL_TOP
HORIZONTAL_CENTER
HORIZONTAL_RIGHT
HORIZONTAL_LEFT
HORIZONTAL_JUSTIFY
*/
//add comment ———————————————–
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->setAuthor(‘PHPExcel’);
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->getText()->createTextRun(‘comment1 comment1 comment1 ‘);
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->setWidth(‘200pt’);
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->setHeight(‘100pt’);
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->setMarginLeft(‘150pt’);
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->getFillColor()->setRGB(‘dea66e’); //背景顏色
$objCommentRichText = $objPHPExcel->getActiveSheet()->getComment(‘A6′)->getText()->createTextRun(‘comment2 comment2 comment2 ‘);
$objCommentRichText->getFont()->setBold(true); //文字加粗
$objCommentRichText->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); //文字顏色
$objPHPExcel->getActiveSheet(0)->getStyle(‘A4′)->getAlignment()->setTextRotation(-90);
//對齊 //注意是 setVertiacl 還是 setHorizontal
$objPHPExcel->getActiveSheet(0)->getStyle(‘B4′)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet(0)->getStyle(‘C4′)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
/*
VERTICAL_CENTER 垂直置中
VERTICAL_TOP
HORIZONTAL_CENTER
HORIZONTAL_RIGHT
HORIZONTAL_LEFT
HORIZONTAL_JUSTIFY
*/
//add comment ———————————————–
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->setAuthor(‘PHPExcel’);
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->getText()->createTextRun(‘comment1 comment1 comment1 ‘);
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->setWidth(‘200pt’);
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->setHeight(‘100pt’);
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->setMarginLeft(‘150pt’);
$objPHPExcel->getActiveSheet()->getComment(‘A6′)->getFillColor()->setRGB(‘dea66e’); //背景顏色
$objCommentRichText = $objPHPExcel->getActiveSheet()->getComment(‘A6′)->getText()->createTextRun(‘comment2 comment2 comment2 ‘);
$objCommentRichText->getFont()->setBold(true); //文字加粗
$objCommentRichText->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); //文字顏色
———————————————————————————–
———————————————————————————–
// 設定格式:使用物件的方式
$style_obj = new PHPExcel_Style();
$styleArray = array(‘borders’ => array(‘left’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THICK),
‘top’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THIN),
‘right’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THIN),
‘bottom’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THIN)
));
$style_obj->applyFromArray($styleArray);
———————————————————————————–
// 設定格式:使用物件的方式
$style_obj = new PHPExcel_Style();
$styleArray = array(‘borders’ => array(‘left’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THICK),
‘top’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THIN),
‘right’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THIN),
‘bottom’=> array(‘style’ => PHPExcel_Style_Border::BORDER_THIN)
));
$style_obj->applyFromArray($styleArray);
$letter = PHPExcel_Cell::stringFromColumnIndex(0); //A
$cellname1 = $letter.’1′; // A1
$cellname2 = $letter.7; // A7
$cell_range = “$cellname1:$cellname2″;
$sheet->setSharedStyle($style_obj, “$cell_range");
$cellname1 = $letter.’1′; // A1
$cellname2 = $letter.7; // A7
$cell_range = “$cellname1:$cellname2″;
$sheet->setSharedStyle($style_obj, “$cell_range");
// 設定格式:使用陣列
$styleArray = array(
‘borders’ => array(
‘allborders’ => array(
‘style’ => PHPExcel_Style_Border::BORDER_THIN,
‘color’ => array(‘argb’ => ‘000000’)
),
),
‘font’ => array(‘bold’ => true,
‘size’ => ’12’,
‘color’ => array(‘argb’ => ‘FF0000′)
)
);
$objPHPExcel->getActiveSheet(0)->getStyle(‘A12:C15′)->applyFromArray($styleArray);
‘borders’ => array(
‘allborders’ => array(
‘style’ => PHPExcel_Style_Border::BORDER_THIN,
‘color’ => array(‘argb’ => ‘000000’)
),
),
‘font’ => array(‘bold’ => true,
‘size’ => ’12’,
‘color’ => array(‘argb’ => ‘FF0000′)
)
);
$objPHPExcel->getActiveSheet(0)->getStyle(‘A12:C15′)->applyFromArray($styleArray);
// 註解
$comment = “This is comment";
$sheet->getComment(“F1″)->getFillColor()->setRGB(‘FFFAD9′); //背景顏色
$sheet->getComment(“F1″)->setWidth(‘320pt’);
$objCommentRichText = $sheet->getComment(“F1″)->getText()->createTextRun(“$comment");
$objCommentRichText->getFont()->getColor()->setRGB(‘008080′); //文字顏色
$objCommentRichText->getFont()->setBold(true); //文字加粗
$sheet->getComment(“F1″)->getFillColor()->setRGB(‘FFFAD9′); //背景顏色
$sheet->getComment(“F1″)->setWidth(‘320pt’);
$objCommentRichText = $sheet->getComment(“F1″)->getText()->createTextRun(“$comment");
$objCommentRichText->getFont()->getColor()->setRGB(‘008080′); //文字顏色
$objCommentRichText->getFont()->setBold(true); //文字加粗
———————————————————————————–
// 設定其它工作表
// 設定其它工作表
$objPHPExcel->createSheet();
$objPHPExcel->setActiveSheetIndex(1);
$objPHPExcel->getActiveSheet()->setTitle(‘第二張表’);
$objPHPExcel->getActiveSheet()->setCellValue(‘A3′,"test1″);
$objPHPExcel->getActiveSheet()->setCellValue(‘B3′,’test2′);
$objPHPExcel->setActiveSheetIndex(1);
$objPHPExcel->getActiveSheet()->setTitle(‘第二張表’);
$objPHPExcel->getActiveSheet()->setCellValue(‘A3′,"test1″);
$objPHPExcel->getActiveSheet()->setCellValue(‘B3′,’test2′);
$objPHPExcel->setActiveSheetIndex(0);
//若要在 2003 跟 2007 之間切換,選然下面兩段其中一段即可。
//Excel 2007
header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);
header(‘Content-Disposition: attachment;filename="01simple.xlsx"‘);
header(‘Cache-Control: max-age=0′);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007′);
/*
//Excel 2003
header(‘Content-Type: application/vnd.ms-excel’);
header(‘Content-Disposition: attachment;filename="01simple.xls"‘);
header(‘Cache-Control: max-age=0′);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5′); //Excel 2003 = Excel 5
*/
//若要在 2003 跟 2007 之間切換,選然下面兩段其中一段即可。
//Excel 2007
header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);
header(‘Content-Disposition: attachment;filename="01simple.xlsx"‘);
header(‘Cache-Control: max-age=0′);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007′);
/*
//Excel 2003
header(‘Content-Type: application/vnd.ms-excel’);
header(‘Content-Disposition: attachment;filename="01simple.xls"‘);
header(‘Cache-Control: max-age=0′);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5′); //Excel 2003 = Excel 5
*/
//========================================================
$objWriter->save(‘php://output’);
exit;
$objWriter->save(‘php://output’);
exit;
2014年8月27日 星期三
【MySQL】LIKE 搜尋
一、一般
1.name LIKE '豬%' -> 找豬開頭的文字後面不論字數,例如:豬八戒、豬頭2.name LIKE '%豬%' -> 只有出現豬就算找到,如豬、神豬、豬頭
3.name LIKE '豬_' -> 限定字數只找豬開頭兩個字,底線在那邊就一定要有字
4.name LIKE '%豬%戒%' -> 只要字串包含順序有豬跟界就符合
二、應用搜尋
// 將字切開並加上% $arr = $this->utf8_str_split($keywords); $keywordSplit = implode('%',$arr); // 這樣比 '%$keywords%' 搜尋到更多結果 $sql = "SELECT * FROM user WHERE name LIKE '%$keywordSplit%'"; $rs = $pdo->query($sql); // 用UTF8切文字 function utf8_str_split($str, $split_len = 1){ if (!preg_match('/^[0-9]+$/', $split_len) || $split_len < 1) return FALSE; $len = mb_strlen($str, 'UTF-8'); if ($len <= $split_len) return array($str); preg_match_all('/.{'.$split_len.'}|[^\x00]{1,'.$split_len.'}$/us', $str, $ar); return $ar[0]; }
2014年8月26日 星期二
【PHP】縮圖不失真
最近要做縮圖的工作,試了幾個function,
發現縮圖後的圖都失真的,變得比較模糊,
最後終於找不到不失真的function。
並存到另一個目錄,且可設定多個size。
發現縮圖後的圖都失真的,變得比較模糊,
最後終於找不到不失真的function。
/* Convert image size. true color*/ //$src 來源檔案 //$dest 目的檔案 //$maxWidth 縮圖寬度 //$maxHeight 縮圖高度 //$quality JPEG品質 function ImageCopyResizedTrue($src,$dest,$maxWidth,$maxHeight,$quality=100) { //檢查檔案是否存在 if (file_exists($src) && isset($dest)) { // 目錄是否存在 $dir = dirname($dest); if (!is_dir($dir)){ mkdir($dir,0777); } $destInfo = pathinfo($dest); $srcSize = getimagesize($src); //圖檔大小 $srcRatio = $srcSize[0]/$srcSize[1]; // 計算寬/高 $destRatio = $maxWidth/$maxHeight; if ($destRatio > $srcRatio) { $destSize[1] = $maxHeight; $destSize[0] = $maxHeight*$srcRatio; } else { $destSize[0] = $maxWidth; $destSize[1] = $maxWidth/$srcRatio; } //GIF 檔不支援輸出,因此將GIF轉成JPEG if ($destInfo['extension'] == "gif") $dest = substr_replace($dest, 'jpg', -3); //建立一個 True Color 的影像 $destImage = imagecreatetruecolor($destSize[0],$destSize[1]); //根據副檔名讀取圖檔 switch ($srcSize[2]) { case 1: $srcImage = imageCreateFromGif($src); break; case 2: $srcImage = imageCreateFromJpeg($src); break; case 3: $srcImage = imageCreateFromPng($src); break; default: return false; break; } //取樣縮圖 imagecopyresampled($destImage, $srcImage, 0, 0, 0, 0,$destSize[0],$destSize[1], $srcSize[0],$srcSize[1]); //輸出圖檔 switch ($srcSize[2]) { case 1: case 2: imagejpeg($destImage,$dest,$quality); break; case 3: imagepng($destImage,$dest); break; } return true; } else { return false; } }
將它寫成Class方便之後使用
此class是可將一個目錄裡所有的圖片縮圖,並存到另一個目錄,且可設定多個size。
// 使用方法 set_time_limit(0); $imgPath = $_SERVER['DOCUMENT_ROOT'].'/data/images'; // 原始目錄 $thumb_150 = $_SERVER['DOCUMENT_ROOT'].'/data/images_150'; // 縮圖目錄 $thumb_110 = $_SERVER['DOCUMENT_ROOT'].'/data/images_110'; $igtb = new ImgThumb(); $igtb->oriPath = $imgPath; $igtb->target = array( array($thumb_150,150,150), array($thumb_110,110,110), // 縮圖種類及大小 ); $igtb->startThumb(); // @author - wsxrtgvbuikm@gmail.com class ImgThumb { public $oriPath, // 要複製的路徑 $target = array( array('路徑1',150,150) // 可多個 @parameter 路徑,width,height ), $imgArr; public function __construct(){ $this->imgArr = array('jpg','jpeg','png','gif','bmp'); } public function startThumb(){ $this->img_thumb($this->oriPath); } public function img_thumb($dir){ $dirArr = scandir($dir); foreach($dirArr as $val){ if ($val == '.' || $val == '..') continue; $file = $dir.'/'.$val; $ext = strtolower(pathinfo($val, PATHINFO_EXTENSION)); if (in_array($ext,$this->imgArr)){ $extend = str_replace($this->oriPath,'',dirname($file)); foreach($this->target as $arr){ $target = $arr[0].$extend; if (!is_file($target.'/'.basename($file))) // 沒圖縮圖再跑 $this->ImageCopyResizedTrue($file,$target.'/'.basename($file),$arr[1],$arr[2]); } } if (is_dir($file)){ // 是目錄就繼續找 $this->img_thumb($file); } } // end foreach } /* Convert image size. true color*/ //$src 來源檔案 //$dest 目的檔案 //$maxWidth 縮圖寬度 //$maxHeight 縮圖高度 //$quality JPEG品質 public function ImageCopyResizedTrue($src,$dest,$maxWidth,$maxHeight,$quality=100) { //檢查檔案是否存在 if (file_exists($src) && isset($dest)) { // 目錄是否存在 $dir = dirname($dest); if (!is_dir($dir)){ mkdir($dir,0777); } $destInfo = pathinfo($dest); $srcSize = getimagesize($src); //圖檔大小 $srcRatio = $srcSize[0]/$srcSize[1]; // 計算寬/高 $destRatio = $maxWidth/$maxHeight; if ($destRatio > $srcRatio) { $destSize[1] = $maxHeight; $destSize[0] = $maxHeight*$srcRatio; } else { $destSize[0] = $maxWidth; $destSize[1] = $maxWidth/$srcRatio; } //GIF 檔不支援輸出,因此將GIF轉成JPEG if ($destInfo['extension'] == "gif") $dest = substr_replace($dest, 'jpg', -3); //建立一個 True Color 的影像 $destImage = imagecreatetruecolor($destSize[0],$destSize[1]); //根據副檔名讀取圖檔 switch ($srcSize[2]) { case 1: $srcImage = imageCreateFromGif($src); break; case 2: $srcImage = imageCreateFromJpeg($src); break; case 3: $srcImage = imageCreateFromPng($src); break; default: return false; break; } //取樣縮圖 imagecopyresampled($destImage, $srcImage, 0, 0, 0, 0,$destSize[0],$destSize[1], $srcSize[0],$srcSize[1]); //輸出圖檔 switch ($srcSize[2]) { case 1: case 2: imagejpeg($destImage,$dest,$quality); break; case 3: imagepng($destImage,$dest); break; } return true; } else { return false; } } }
2014年8月25日 星期一
【PHP】JSON 使用
json(JavaScript Object Notation):JSON 是個以純文字來儲存資料,
更好用的是將陣列或物件轉換成文字。
array('php','javacript','jquery') 會變成:
["php","javacript","jquery"]
物件用{},如
arry('name'=>'steven',tel=>'1234') 變成:
{"name":"steven,"tel":1234}
範例
但為了操作方便可將物件解譯成array,
此時就要用json_decode($str,true);
更好用的是將陣列或物件轉換成文字。
規則
陣列用[],如:array('php','javacript','jquery') 會變成:
["php","javacript","jquery"]
物件用{},如
arry('name'=>'steven',tel=>'1234') 變成:
{"name":"steven,"tel":1234}
jquery 使用json
使用: $.parseJSON() 將json解譯範例
var str = '{"prodcut_id":"1234", "name":"鉛筆", "spec":["紅","綠","藍"] }'; var result = $.pasrseJSON(str); alert(result.prodcut_id); // 印出1234 alert(result.spec[0]); // 印出 紅用$.post時可以指定回傳格視為json
$.post("test.php",{name:$("#name").val()},function (result){ alert(result.prodcut_id); },json);
PHP 使用json
編譯解譯分別為:json_encode、json_decode,但為了操作方便可將物件解譯成array,
此時就要用json_decode($str,true);
$arr = array("product"=>"1234","name"=>"鉛筆","spec"=>array("紅","綠","藍")); $str = json_encode($arr); $obj = json_decode($str); // 此時會變成 stdClass Object ( [product] => 1234 [name] => 鉛筆 [spec] => Array ( [0] => 紅 [1] => 綠 [2] => 藍 ) ) $arr = json_decode($str,true); // 結果:Array ( [product] => 1234 [name] => 鉛筆 [spec] => Array ( [0] => 紅 [1] => 綠 [2] => 藍 ) )
訂閱:
文章 (Atom)