2019年12月26日 星期四

【Mysql】json_extract

json_extract 可抓取在資料中json的值

範例:
// 抓取json第1個跟第0個值
SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]', '$[0]');
結果:20 | 10

// 抓取data欄位,json名稱為name的值
select json_extract(data,'$.name'),json_extract(data,'$.tel') from tab_json 
直接抓取json第幾個值
CREATE TABLE tj10 (a JSON, b INT);
// 建立資料
INSERT INTO tj10 VALUES ("[3,10,5,17,44]", 33), ("[3,10,5,17,[22,44,66]]", 0);
// 抓取
SELECT a->"$[4]" FROM tj10;
結果:44 | [22,44,66]
更多資訊要看mysql官網:連結

2019年12月18日 星期三

【laravel】storage 相關

1.在 laravel 目錄輸入,預設目錄為 /storage/app/
   php artisan storage:link

2.建立檔案,在程式碼中加入
   Storage::disk('public')->put('test.txt', 'contents...');

3.取得剛剛新建立檔案的網址
   echo asset('storage/test.txt');

4.取得檔案的內容
   echo Storage::get('test.txt');

5.下載檔案
   Storage::download('test.txt');

6.檔案上傳
   $path = request()->image->store('public'); // 將欄位名image的圖片存入/storage/app/public
   request()->image->storeAs($dir, $file_name); // 將檔案以 $file_name 存入 $dir,$dir='public/';

7.取得副檔名
   $ext = request()->image->extension();

8.是否有檔案
   request()->hasFile('image');

9.照片上傳+縮圖範例
    
/**
 *  圖片上傳 + 縮圖
 * @param  [request]$img     $request->file
 * @param  [string] $feild   欄位名稱
 * @param  array  $thumb_arr 縮圖 [[100,100],[250,250]] 會有兩個thumb資料目錄,沒輸入就不縮圖
 * @return [array]           result:是否成功 file_name、file_path
 */
public function upload_image($img, $feild, $thumb_arr=[])
{
    $check = 1;
    $ext = $img->extension();
    if (!$this->fileExtCheck($ext)){
        $check = 0;
    }

    $admin_path = $this->admin_path.'/'.$feild;

    Storage::makeDirectory('public/'.$admin_path);

    $file_name = $this->getFileName($img->getClientOriginalName());
    $directory = $this->la_storage_path.'/'.$admin_path;
    $save_file = $directory.'/'.$file_name;
    if (!Image::make($img)->save($save_file)){
        $check = 0;
    }

    if (isset($thumb_arr)){
        foreach($thumb_arr as $thumb){
            $thumb_name = 'thumb_'.$thumb[0].'_'.$thumb[1];
            Storage::makeDirectory('public/'.$admin_path.'/'.$thumb_name);
            $themb_img = $directory.'/'.$thumb_name.'/'.$file_name;
            $t = Image::make($img)->resize($thumb[0],$thumb[1],function($constraint){
                $constraint->aspectRatio();
            })->save($themb_img);
            if (!$t){
                $check = 0;
            }
        }
    }

    if ($check)
        return ['result'=>'ok', 'file_name'=>$file_name, 'file_path'=>'storage/'.$admin_path.'/'.$file_name];
    else 
        return ['result'=>'err'];
}
10.刪除照片及縮圖
    
public function unlink_img($img, $thumb_arr=[])
{
    if (is_file($this->root.'/'.$img)) unlink($this->root.'/'.$img);

    if (isset($thumb_arr)){
        foreach($thumb_arr as $thumb){
            $thumb_name = 'thumb_'.$thumb[0].'_'.$thumb[1];
            $thumb_img = $this->root.'/'.dirname($img).'/'.$thumb_name.'/'.basename($img);
            if (is_file($thumb_img)) unlink($thumb_img);
        }
    }
}

2019年3月11日 星期一

【PHP】CURL 傳檔案 方法2


$url = '上傳網址';
$file_path = "檔案絕對路徑";
$fields = array('key'=>'val'); // post值


function curl_file_get_contents($url,$file_path,$fields='')
{
 $files['files[0]'] = file_get_contents($file_path);

 // curl
 $curl = curl_init();

 $boundary = uniqid();
 $delimiter = '-------------' . $boundary;

 $post_data = build_data_files($boundary, $fields, $files);

 curl_setopt_array($curl, array(
  CURLOPT_URL => $url,
  CURLOPT_SSL_VERIFYPEER => 0,
  CURLOPT_SSL_VERIFYHOST => 1,
  CURLOPT_RETURNTRANSFER => 1,
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  //CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POST => 1,
  CURLOPT_POSTFIELDS => $post_data,
  CURLOPT_HTTPHEADER => array(
   //"Authorization: Bearer $TOKEN",
   "Content-Type: multipart/form-data; boundary=" . $delimiter,
   "Content-Length: " . strlen($post_data)
  ),
  
 ));

 $response = curl_exec($curl);
 $info = curl_getinfo($curl);
 $err = curl_error($curl);
 curl_close($curl);

 return $response;
}



function build_data_files($boundary, $fields, $files){
  $data = '';
  $eol = "\r\n";

  $delimiter = '-------------' . $boundary;

  if ($fields)
  {
   foreach ($fields as $name => $content) {
     $data .= "--" . $delimiter . $eol
       . 'Content-Disposition: form-data; name="' . $name . "\"".$eol.$eol
       . $content . $eol;
   }
  }


  foreach ($files as $name => $content) {
    $data .= "--" . $delimiter . $eol
      . 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $name . '"' . $eol
      //. 'Content-Type: image/png'.$eol
      . 'Content-Transfer-Encoding: binary'.$eol
      ;

    $data .= $eol;
    $data .= $content . $eol;
  }
  $data .= "--" . $delimiter . "--".$eol;


  return $data;
}

2019年1月8日 星期二

【apache】.htaccess Rewrite 設定

# 打開重寫引擎
RewriteEngine On
# 設定基準目錄,從根目錄開始比對
RewriteBase /
# 比對網址,倘若符合 thumbnail,則轉址到 cache 底下,至此結束。
RewriteRule ^(thumbnail)/([0-9]+/.+)$ cache/$1/$2 [L]
# 重新比對網址,倘若結尾是 mp3, mov, ogg, mp4, avi, wmv,不做任何替代,直接 404,至此結束。
RewriteRule (.[^\.]).(mp3|mov|ogg|mp4|avi|wmv)$ - [NC,F,L]
# 設定比對條件,若請求的網址是檔案。
RewriteCond %{REQUEST_FILENAME} -f
# 重新比對網址,倘若是 cache,但是非 sitemap 底下,結尾是 .cache, .xml, .txt, .log,不做任何替代,直接 404,至此結束。
RewriteRule ^(cache)+/+([^sitemap/])(.+[^/]).(cache|xml|txt|log)$ - [NC,F,L]
# 重新比對網址,倘若請求網址是資料夾。
RewriteCond %{REQUEST_FILENAME} -d
# 在結尾加上 /,至此結束。
RewriteRule ^(.+[^/])$ $1/ [L]
# 重新比對網址,倘若請求網址不是檔案。
RewriteCond %{REQUEST_FILENAME} !-f
# 將請求網址轉給 rewrite.php 這支檔案,至此結束,並連同 Query String 一併傳入。
RewriteRule ^(.*)$ rewrite.php [L,QSA]

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

詳細:https://blog.hinablue.me/apache-note-about-some-rewrite-note-2011-05/