2016年11月14日 星期一

【PHP、MySQL】SQL搜尋分段LOG

今天要抓出半年內每個商品被點擊次數,在存入 PROD_CLICK
因為 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); // 算出與面前相差的月份

2016年11月9日 星期三

【PHP】PChome 廣告刊登-免費刊登廣告,製作匯入ZIP檔

這次要將公司商品放在PChome免費廣告中,
在廣告刊登中有一項多筆匯入的功能,
我要寫程式匯出商品後直接匯入PChome,
有點麻煩所以做成筆記,
匯入的限制:要上傳ZIP並裡面附圖片且圖要超過400*400,每張圖不能超過200K。


製作步驟
1.首先第一步當然是將公司上架商品從資料庫撈出來
因為有檔案大小限制10MB,所以要做分頁上傳,一張圖片抓100kb,
一次只能上傳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之後又會變回正常
但如果存入資料庫要是中文就要用:
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年6月22日 星期三

【Jquery】position:fixed 可左右拉動

今天遇到一件奇怪的需求,

在使用 CSS position:fixed 使區塊固定時,

當拉動左右的卷軸時這個區塊也要跟著動,

這時只能用javascript來解決:

$(window).scroll(function(){
  $(".nav").css({ // 要移動的class或div
    'left': 0 - $(this).scrollLeft()
  });
  $(".footer").css({
    'left': 0 - $(this).scrollLeft()
  });
});

2016年5月17日 星期二

【ASP】基本語法 & 查詢

工作需要不得不去碰 ASP

這邊記錄一下有用到的功能

之後遇到能快速記憶


2016年5月16日 星期一

【Excel】算欄位字數

有時匯入xls檔案欄位有字數限制

這時可以用Excel計算字數的函數:LEN 與 LENB

LEN:不分全形半形都算一個字

LENB:全形字元視為2個字,半形字元視為1個字

用法:

LENB(C2) :C2欄位的字元 (注意欄位屬性為通用格式)

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;
}