UPDATE _test SET [value]='100' WHERE id = (SELECT TOP 1 id FROM _test WHERE [name]='aa' ORDER BY id DESC) AND [name]='aa'
2021年4月13日 星期二
2020年5月28日 星期四
【javascript】小數相加
javascript 小數相加偶爾會跑出奇怪的數字
例如:1.001 + 2.0001 = 3.00110000000000001
解決方式:先把小數乘很大的數,讓他變成整數計算好在除回去
剛剛的例子要改成:
(1.001 * 1e12) + (2.0001 * 1e12) / 1e12
(1e12 = 1後面帶了12個0,1000000000000)
2020年5月14日 星期四
2020年5月13日 星期三
【PHP】 AES 256 encrypt decrypt
AES(Advanced Encryption Standard) 256 進階加密標準
用來取代舊的DES(Data Encryption Standard)
php 的 mcrypt_encrypt 函數在php7.2就不支援要使用openssl_encrypt
使用openssl加解密方法:
function encrypt($key, $payload)
{
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($payload, 'aes-256-cbc', $key, 0, $iv);
return base64_encode($encrypted . '::' . $iv);
}
function decrypt($key, $garble)
{
list($encrypted_data, $iv) = explode('::', base64_decode($garble), 2);
return openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv);
}
$key = "ABCDE";
echo $encode = encrypt($key, "123");
echo "<br>";
echo $decode = decrypt($key, $encode);
2020年1月17日 星期五
【linux】免費SSL設定,Cerbot
1.先到Cerbot官網
2.選擇目前伺服器環境
3.照著步驟走,要先確定有裝mod_ssl
4.取得憑證 certbot certonly --webroot -w /var/www/html -d mydomain.com --email {your_email_address} --agree-tos
成功後SSL憑證會放到 /etc/letsencrypt/live/{YOUR URL}/
5.改SSL,/etc/httpd/conf.d/ssl.conf
6.設定VirturalHost
2.選擇目前伺服器環境
3.照著步驟走,要先確定有裝mod_ssl
yum -y install yum-utils yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional sudo yum install certbot python2-certbot-apache sudo certbot --apache
4.取得憑證 certbot certonly --webroot -w /var/www/html -d mydomain.com --email {your_email_address} --agree-tos
成功後SSL憑證會放到 /etc/letsencrypt/live/{YOUR URL}/
5.改SSL,/etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/www.chiender.bnet.tw/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.chiender.bnet.tw/privkey.pem SSLCACertificateFile /etc/letsencrypt/live/www.chiender.bnet.tw/fullchain.pem
6.設定VirturalHost
<VirtualHost *:80> ServerAlias * VirtualDocumentRoot "/var/www/html/%0" RewriteEngine on RewriteCond %{HTTPS} !=on RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R] </VirtualHost> <VirtualHost *:443> ServerAlias * VirtualDocumentRoot "/var/www/html/%0" SSLEngine on </VirtualHost>
2020年1月6日 星期一
【Jquery】ajax post from 檔案上傳
$.ajax({ type : "POST", url : "/sj/cooperation/ajax_dd", data : new FormData($('#myform')[0]), async: false, cache: false, contentType: false, processData: false, success : function($data) { $re = jQuery.parseJSON($data); $("#dd_id").val($re.dd_id); $msg = temp_dd($re.ddd); $($msg).hide().prependTo(".coop-msg").fadeIn('show'); $("#coop_msg").val(""); } });
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.照片上傳+縮圖範例
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/
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/
訂閱:
文章 (Atom)