Web

Apache反向代理PM2部署Node.js

1. 先確認建立的Node.js專案可以運行   2. 安裝PM2 npm install pm2 -g   3. 進入專案資料夾底下,以Express為例,進入/bin pm2 start www 執行pm2 list會看到以下畫面 備註: pm2常用指令 停止應用程式: pm2 stop 重新啟動應用程式: pm2 restart  登錄移除: pm2 delete   4. 設定Apache httpd.conf 將以下兩個設定註解打開 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so   5. 在Apache vhost設定,因為Express設定8080,因此這邊proxy也設定8080 <VirtualHost *:80> ServerName test.3b8.site #域名設定 ServerAlias 3b8.site  ProxyPass / http://192.168.100.30:8080/  ProxyPassReverse / http://192.168.100.30:8080/ </VirtualHost>  

2022-01-23

Web

Laravel 設定多國語系

1. 新增Middleware php artisan make:middleware Language   2. 設定啟用Middleware app\http\Kernel 新增 protected $routeMiddleware = [       'Language' => \App\Http\Middleware\Language::class, ];   3. 設定Middleware規則 app\http\Middleware\Language.php 在handle中新增 $lang = $request->session()->get('lang');         if(empty($lang)){             $lang = 'en';         }         app()->setlocale($lang);         return $next($request); (預設為英文語系)   4.設定語系 新增資料夾 resource\lang\en 新增 language.php <?php return [     'name' => 'Documentation', ];   新增資料夾resource\lang\tw 同樣新增 language.php <?php return [     'name' => '文件', ];   5. blade模板使用 {{__("language.name")}}          

2022-01-14

Web

JS開啟相機掃描QRcode

使用套件:https://github.com/mebjas/html5-qrcode      <div style="width: 95vw;margin 0 auto;" id="test"></div>     <script src="https://unpkg.com/html5-qrcode" type="text/javascript"></script>     <script> const html5QrCode = new Html5Qrcode(/* element id */ "test"); //不使用預設UI介面    Html5Qrcode.getCameras().then(devices => {   /**    * devices would be an array of objects of type:    * { id: "id", label: "label" }    */   if (devices && devices.length) { var cameraId = devices[0].id; // .. use this to start scanning. html5QrCode.start(                //使用後相機   { facingMode: "environment" },    { fps: 10,    // Optional, frame per seconds for qr code scanning qrbox: { width: 250, height: 250 }  // Optional, if you want bounded box UI   },   (decodedText, decodedResult) => { // do something when code is read 掃描成功 alert(decodedText)   },   (errorMessage) => { // parse error, ignore it.   }) .catch((err) => {   // Start failed, handle it. });   } }).catch(err => {   // handle err });     </script>

2022-01-13

Linux

Linux 安裝Apache與PHP

1. 安裝PHP 7.4 sudo apt install php7.4-cli   2. 確認安裝 php -v   3. 安裝Apache sudo apt-get install apache2  sudo apt-get install libapache2-mod-php   Apache重啟 sudo service apache2 restart  systemctl restart apache2   另需安裝 sudo apt install php-mysql          

2022-01-09

Linux

Linux安裝Laravel與除錯

1. composer 安裝 php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');"   sudo mv composer.phar /usr/local/bin/composer 參考資料:Composer (getcomposer.org)   備註: sudo nano ~/.bashrc 新增 export PATH="$HOME/.config/composer/vendor/bin:$PATH" 接著使用指令 source ~/.bashrc   2. 安裝Laravel composer global require laravel/installer   3. 建立Laravel專案 sudo apt-get install php-curl  sudo apt install php-zip sudo apt-get install php-mbstring -y sudo apt-get install php-xml -y Laravel new test   錯誤1 composer remove phpunit/phpunit --dev composer require phpunit/phpunit --dev   錯誤2 No Application Encryption Key Has Been Specified php artisan key:generate php artisan config:cache   錯誤3,接著開啟網頁應該會看到 laravel.log could not be opened 參考解法:How to fix Error: laravel.log could not be opened? - Tuts Make 參考資料:GCE /Ubuntu/Nginx環境下建立 Laravel專案 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw) 進入專案資料夾外層 chmod -R 777 專案名稱      錯誤4,分頁404,設定rewrite sudo a2enmod rewrite            

2022-01-08

資料庫

Mysql查詢當天、昨天、本周、本月資料

參考資料:https://www.itread01.com/content/1541843830.html   查詢當天(今天)的資料 SELECT * FROM `order` WHERE TO_DAYS(order_time) = TO_DAYS(NOW()) 查詢當月(本月)的資料 SELECT * FROM `order` WHERE DATE_FORMAT(order_time, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m')

2022-01-07

Linux

Linux 安裝Mysql與設定

參考資料:[教學][Ubuntu 架站] 在 Ubuntu 20.04 上安裝 MySQL Server | 優程式 (ui-code.com) 1. 安裝mysql sudo apt install mysql-server   2. 檢查安裝 sudo service mysql status   3. 設定安全性 sudo mysql_secure_installation 系統會詢問您是否要設定驗證密碼插件(VALIDATE PASSWORD PLUGIN) 先不設定(直接Enter),但其實後面會在設定 4. 創建 root 密碼   5. 按 y 和 ENTER 刪除匿名用戶。   6.防止機器人和駭客嘗試猜測 root 密碼,依狀況設定   7. 按 y 和 ENTER 刪除測試資料庫   8.按 y 和 ENTER 重新載入權限表   9. 登錄 MySQL Server 並運行 version 命令 sudo mysqladmin -p -u root version 輸入前面建立的 MySQL root 密碼,應該會看到以下內容: 安裝成功。   ------------------------------------------ 不過遠端應該還無法成功,參考影片 How to Host a MySQL Server on Linux - YouTube 1. cd /etc/mysql/mysql.conf.d 2. nano mysqld.cnf 3. 將bind-address設定為 0.0.0.0 備註: 關於nano的使用方法, 參考資料:Linux下輕巧文字編輯器Nano常用快捷鍵 | Eric的攝影世界 (pentaxfans.net) ctrl + o 保存寫入 ctrl + x 離開 如果輸入了Y,下一步會讓你輸入想要保存的文件名, 如果不需要修改文件名直接Enter就行。 4.重啟Mysql service mysql start --------------------------- 報錯: 接著使用遠端連線可能會跳出 1698 Error 備註: 輸入mysql進入sql指令 1. 進入mysql,將root改成% mysql> use mysql mysql> update user set host = '%' where user = 'root'; 檢查更新結果 mysql> select host,user from user;   2. 參考解決方法:mysql - ERROR 1698 (28000): Access denied for user 'root'@'localhost' - Stack Overflow mysql> USE mysql; mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root'; mysql> FLUSH PRIVILEGES; mysql> exit; sudo service mysql restart   3.設定新密碼 ALTER USER 'root'@'%' IDENTIFIED BY '新密碼';   備註: 登入mysql語法: mysql -u root -p   檢測工具: apt install net-tools netstat -nl grep 3306 看看有無 0.0.0.0:3306 如果沒有代表MySQL server未被啟用 service mysql restart  

2022-01-06

Cordova

Cordova使用HTTP請求設定(Android)

android本身不支援http的請求 因此需要做以下設定   1. 路徑:platforms\android\app\src\main\AndroidManifest.xml 裡面的application標籤加上 android:usesCleartextTraffic="true"   2. (非必要)  路徑:platforms\android\app\src\main\res\xml 新增一個檔案 network_security_config.xml 裡面的內容 <?xml version="1.0" encoding="utf-8"?> <network-security-config>     <domain-config cleartextTrafficPermitted="true">         <domain includeSubdomains="true">localhost</domain>         <domain includeSubdomains="true">192.168.100.30</domain>     </domain-config> </network-security-config> 參考資料:Ajax request not working in android 10 - Framework7 Forum  

2022-01-04

資料庫

Mysql設定使用者讀寫權限

使用phpmyadmin ( 本機IP/phpMyAdmin )為例   1.點選新增使用者   2.根據下圖依序設定使用者名稱與密碼,主機名稱與其餘設定不需變動   3.全域權限不需設定,點擊上方資料庫   4.選擇要給予這個使用者權限的資料庫   5.給予指定資料夾所有權限    

2022-01-01

API串接

Laravel實作Line Notify串接

1. 登入Line Notify官方網頁 LINE Notify   2. 右上方選擇「管理登錄服務」,並點「發行存取權杖(開發人員用)」   3. 選擇要置入的群組 備註:權杖名稱為傳送訊息的Title   4. 接著會取得一段Token,這個要記好,假如忘了就只能在重新跑一次流程。   -------串接實作------- 這邊使用Laravel來實作 1.  在env把剛剛的Token設定好 LINE_NOTIFY_TOKEN = 剛剛的Token   2.建立一個Controller public function LineNotify($msg){         //API需要的驗證資訊         $headers = array(             'Content-Type: application/x-www-form-urlencoded',             //剛剛在env設定的參數名稱(LINE_NOTIFY_TOKEN)             'Authorization: Bearer ' . env('LINE_NOTIFY_TOKEN'),         );         $url = 'https://notify-api.line.me/api/notify';         //msg為要通知的訊息         $body = array(             'message' => $msg,         );         $ch = curl_init();         $params = array(             CURLOPT_URL => $url,             CURLOPT_RETURNTRANSFER => true,             CURLOPT_HTTPHEADER => $headers,             CURLOPT_SSL_VERIFYPEER => false,             CURLOPT_CONNECTTIMEOUT => 3,             CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13',             CURLOPT_CUSTOMREQUEST => 'POST',             CURLOPT_POSTFIELDS => http_build_query($body),         );         curl_setopt_array($ch, $params);         if (!$result = curl_exec($ch)) {             if ($errno = curl_errno($ch)) {                 $error_message = curl_strerror($errno);                 echo "cURL error ({$errno}):\n {$error_message}";                 curl_close($ch);                 return false;             }         } else {             curl_close($ch);             return true;         } }   3. 接著在別的function呼叫就可以了 $this->LineNotify($msg);          

2021-12-29