Posts

DOMPDF 內嵌圖片無法顯示的問題 pdf image background no show

Image
將測試站搬到正式站後(不同主機) 遇到由 dompdf 產生的 pdf 檔案內嵌圖片出不來的問題 圖片是用 img 跟 background 載入的 如果連結換成測試站的卻可以 比對兩邊 nginx 設定後才發現應該是 SSL 憑證的問題 測試站在 SSL Labs 拿到的是 A+ 等級 但正式站缺只有 B 後來修改 nginx 設定檔並將 ssl_certificate 設定正確的 .cer 檔案後 重啟 nginx 再次測試跑 SSL Labs 測試就拿到 A+ 喔 PS. 如果前後端分離的情狀下,主要修改的 API 站台,建議將所有站台一併更新至 A+

Lumen 10 CORS not working / Lumen 10 無法使用第三方 CORS 套件

由於 Laravel 9.2 後就內建 CORS 的關係 Lumen 10 之後的版本也沒有第三方套件支援 CORS 了 這邊主要是在說明該如何設定內建的 CORS 1. 新增 config/cors.php 檔案可以去複製 Laravel 10 的 cors.php 2. 修改 bootstrap/app.php,加入以下這段  $app->configure('cors'); $app->middleware([     \Illuminate\Http\Middleware\HandleCors::class, ]);

Google Cloud SQL 升級到 MySQL 8 遇到的權限問題

Image
 Google Cloud SQL 提供資料庫升級的方式很方便 幾乎是一鍵完成升級 這邊是從 5.7 升級到 8.0 在備份前先手動備份以外 另外還建立了一個副本 以確保在升級後有問題可迅速切回舊的資料庫 升級後發現有幾個資料庫使用者的權限有問題 在 phpMyAdmin 上面重新設定後也是一樣 phpMyAdmin 5.2.0 & 5.2.1 上設定 MySQL 8 的權限有點問題 由於 MySQL 8 上做了個修改 如果需要給予該使用者該資料庫 GRANT 的權限 需要在 GRANT 後面加上 WITH GRANT OPTION 指令 否則該使用者會無法存取該資料庫 基本上我是無法直接在 phpMyAdmin 上用點選的方式完成設定 正常權限的畫面 如果用 phpMyAdmin 勾選上方 Check all Administration 下的 GRANT 不會被勾選 即使手動勾選 GRANT 儲存後也是空的 可以使用以下指令修改完貼到 phpMyAdmin 上執行 CREATE USER ' db_user '@ '%' IDENTIFIED WITH mysql_native_password BY 'password' ; GRANT ALL PRIVILEGES ON your_database.* TO 'db_user' @ '%' WITH GRANT OPTION ; FLUSH PRIVILEGES; 測試環境 - Google Cloud SQL MySQL 8.0.26(測試過 MySQL 8.0.31 也是如此) - phpMyAdmin 5.2.0 & 5.2.1

Ubuntu 22 無法用 apt 安裝 php8.1-mcrypt & libmcrypt

先查詢是否已安裝 mcrypt # php -m | grep mcrypt 安裝 php-mcrypt 套件 # apt install php8.1-mcrypt 會出現以下的錯誤訊息 php8.1-mcrypt : Depends: libmcrypt4 (>= 2.5.8) but it is not installable 有看到資料說 mcrypt 於 php 7.2 後以移到 pecl 中 所以也嘗試用 pecl 安裝 mcrypt # pecl install mcrypt configure: error: mcrypt.h not found. Please reinstall libmcrypt. ERROR: `/tmp/pear/temp/mcrypt/configure --with-php-config=/usr/bin/php-config --with-mcrypt' failed 也是失敗 後來到這邊 直接下載 .deb 安裝 下載完後安裝 # dpkg -i libmcrypt4_2.5.8-7_amd64.deb 安裝完再用第一個指令確認一下 我的環境: Ubuntu 22.04 PHP 8.1.11

如何在 CentOS8 中安裝 pdo_oci

Image
由於有連接 Oracle 資料庫的需求 pdo_oci 安裝不像是 mysql 那樣的簡單 這邊主要分為三個部分 我的環境是: CentOS 8.6 x86_64 Oracle 是 21c Express Edition PHP 是 7.4 版 安裝 Oracle Instance Client 到 Oracle 官網下載 rpm 下來安裝,這邊需要兩個檔案 Base & Development and Runtime(SDK) 版 目前最新的 21.6 版 oracle-instantclient-basic-21.6.0.0.0-1.el8.x86_64.rpm oracle-instantclient-devel-21.6.0.0.0-1.el8.x86_64.rpm 要先安裝這個套件,否則下面的 rpm 安裝會有問題 # yum install libaio # mkdir /opt/oracle && cd /opt/oracle 然後用 wget 的方式下載上述兩個檔案 再執行安裝 # rpm -Uvh oracle-instantclient-basic-21.6.0.0.0-1.el8.x86_64.rpm # rpm -Uvh oracle-instantclient-devel-21.6.0.0.0-1.el8.x86_64.rpm 安裝 OCI 先安裝這個套件 # yum install php-pear systemtap-sdt-devel  然後使用 pecl 安裝 oci8-2.2.0(這個版本是 PHP 7 專用的,其他版本 請參照 ) # sudo PHP_DTRACE=yes pecl install oci8-2.2.0 安裝 PDO_OCI # yum install php-oci8 查看是否安裝成功 打開 phpinfo 頁面,搜尋 pdo_oci 及 oci8 會看到以下面話代表安裝成功!   參考文章來源: [1]  PHP 5.x PDO 連結 Oracle for CentOS 7 [2]  PHP oci8 won't install through pecl: "fatal error: oci8_dtrace_gen.h"

擴增 GCP 硬碟

到 Google Cloud Platform 擴增完硬碟後 在主機內下指令即可套用 # resize2fs /dev/sda1 免重開機  參考文章 [GCP] 不停機擴增 Linux 主機硬碟空間

如何處理/關閉 PHP 自動轉向圖片的功能

Image
Photo By Mae Mu 在 Lumen 中 某些圖片會自動轉向 會發生這種情況通常是單眼等較專業相機拍出來的照片 EXIF 中出現 Orientation 或是 Orientation 不是 0 影像處理的 lib 就會自動依照 Orientation 的值做對應的轉向 如果 Orientation 是 6 則是右轉 90 度,就會變成直立的照片 如果 Orientation 是 8 則是反方向轉 90 度 後來發現這似乎不是 Lumen 或套件的問題 問題出在 GD or iMagick 翻了文件 GD 似乎無法針對這部分去做設定 iMagick 可以,但我不想為了這個特別去裝肥肥的 iMagick 啊 如果想避免這個情況 由於無法單一清除 Orientation meta 資訊 最簡單的應該是一開始就把 EXIF 資訊給抹除掉 不然可以參考以下的方式,雖然有點繞 但可以 work 就好 XD 與其說關閉轉向功能 這邊實作的是,他轉幾度,我就轉幾度回來 orz...      // 如果照片中 exif 有 Orientation 資訊,則反轉 public function fixOrientation ( $imgObj , $image ) { $exif = @ exif_read_data ( $image ); if (! $exif ) { return ; } $orientation = ( $exif && isset ( $exif [ 'Orientation' ])) ? $exif [ 'Orientation' ] : NULL ; switch ( $orientation ) { case 6 : // rotate 90 degrees CW $imgObj -> rotate (- 90 ); break ; case 8 : // rotate 90 degrees CCW $img