Friday, November 22, 2024

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages

  • โปรเจคเราใช้ codeignitor 4 ตอนพัฒนาใช้ domain name อันหนึ่ง พอตอนจะใช้จริง ลองเปลี่ยนไปใช้อีก domain name แต่เป็น https ทั้ง 2 ชื่อ

$data = file_get_contents($path_url);

  • แต่ได้เจอ error ของ file_get_contents หว่า คล้ายๆ ว่า key การติดต่อกัน ผิดพลาดเพราะเปลี่ยนชื่อ domain

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:

error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

Solved

$arrContextOptions=array(

               "ssl"=>array(

                "verify_peer"=>false,

                "verify_peer_name"=>false,

            ),

        );  

        

  $data = file_get_contents($path_url, false, stream_context_create($arrContextOptions));

Ref

  • https://stackoverflow.com/questions/26148701/file-get-contents-ssl-operation-failed-with-code-1-failed-to-enable-crypto


ประสบการเรื่อง Regular Expression ของ Javascript

  • ก่อนหน้านี้เคยพบในคลิปโปรแกรมมิ่งเรื่อง regular expression กรณี input เยอะทำให้ cpu peak แต่ไม่เคยเจอกับตัว
  • แต่ช่วงนี้เจอปัญหา ประเด็นคือ ค้นหาในเน็ต แล้วเอามาใช้เลย ไม่รู้เรื่องว่า โค้ดทำงานอย่างไร (เอาโค้ดมาจาก chat GPT แล้วพบปัญหาและให้ chat optimize โค้ดใหม่)
  • เขียน function ตรวจสอบ string ว่า เป็น URL หรือไม่ใน javascript

function isURL(str) {

var pattern = new RegExp('^((ft|htt)ps?:\\/\\/)?'+ // protocol

            '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name and extension

            '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address

            '(\\:\\d+)?'+ // port

            '(\\/[-a-z\\d%@_.~+&:]*)*'+ // path

            '(\\?[;&a-z\\d%@_.,~+&:=-]*)?'+ // query string

            '(\\#[-a-z\\d_]*)?$','i'); // fragment locator

            return pattern.test(str);

}

  • พอเรียกใช้ฟังก์ชั่นนี้บน android หรือ PC tab ของ browser Google Chrome  กรณี input ไม่เยอะประมาณ 5-10 อักษร ก็ยังใช้งานได้ปกติ 
  • แต่พอ input เยอะๆ ประมาณ 50 ตัวอักษรขึ้นไปล่ะทีนี้เห็นผลเลยคือ อุปกรณ์ android , pc (windows, ubuntu) ค้างเลย ลอง browser ค่ายอื่นๆ ก็ค้าง ไม่รอดหมด
  • แต่ iOS หรือ MacOS หรือ iPadOS มันทำงานได้ปกตินี่สิ ไม่ว่าจะ input เยอะหรือน้อยทำงานได้ปกติเลย ทำให้พบว่า สเปค CPU มันทำงานต่างกันอยู่นะ สมราคาเค้าล่ะ

Solved

  • บอกปัญหาใน chat และให้ chat แก้ไข  

function isURL(str) {

    // Limit string size to avoid processing excessively large inputs

    if (str.length > 2048) return false;


    // Simplified pattern to check URLs

    const pattern = /^(https?:\/\/)?([a-z\d-]+\.)+[a-z]{2,}(\/\S*)?$/i;

    return pattern.test(str);

}

Tuesday, November 12, 2024

เพิ่ม container docker เข้าไปใน group container ที่ทำไว้แล้ว

  • สร้าง image ที่เราได้ทำการ build ใหม่ ไว้ที่ local โดย

$ docker commit <container_id | container_name> myimage_name:v1.0

$ docker commit mycontainer_mysql myimage_mysql:v1.0

  • ตรวจสอบ network container ปัจจุบันที่ใช้งานอยู่

$ docker inspect <container_id | container_name>

$ docker inspect mycontainer_mysql

  • สร้างใช้งาน และเพิ่ม container ใหม่เข้าไปใน network docker ที่มีอยู่
$ docker run --name mycontainer-mysql --network mylamp-network -e MYSQL_ROOT_PASSWORD=password1234 -p 3333:3306 -v /home/user/mydocker/site/mysql_data:/var/lib/mysql -d mysql-myimage:v1.0

เพิ่มเติม

  • ในตัวอย่าง สร้าง image และ เพิ่ม container ใหม่ จาก image ที่เรา build คอนฟิกไว้แล้ว
  • พบว่า database ตัวใหม่ที่ได้เพิ่มเข้าไป มันไม่ไปด้วยเมื่อเราสั่ง commit นะคับ เท่านี้แหละ
  • ส่วน mysql_data ที่ map ไว้มันยังอยู่ปกติไม่หายไปใหน

Ref

  • https://juuier.blogspot.com/2024/09/wordpress-site-sub-https-domain-name.html
  • https://docs.docker.com/reference/cli/docker/container/commit/

Sunday, November 3, 2024

Firebase cloud messaging set web push notify to Google Chrome & Safari

ใช้ firebase เป็น service ในการส่งเข้า web notify สำหรับ เครื่อง android

  • https://www.youtube.com/watch?v=ulYnmSbgeq8
  • https://www.youtube.com/watch?v=iz5arafmatc
  • https://www.youtube.com/watch?v=5gls_e1JyeY
สำหรับ IOS IPadOS
  • https://www.youtube.com/watch?v=G6n4FxuhiJo
  • https://firebase.blog/posts/2023/08/fcm-for-safari/
  • https://stackoverflow.com/questions/76493356/notification-requestpermission-not-prompting-allow-deny-on-ios-safari-16-5
  • https://www.xda-developers.com/how-enable-safari-notifications-iphone/
เพิ่มเติม
  • IOS สำคัญต้องมี manifesh.json => { "display": "standalone"  } หรือ { "display": "fullscreen" }
<link rel="manifest" href="https://mysite/path/manifest.json">
  • สำหรับตั้งค่า icon เมื่อเพิ่มเข้าหน้า home screen
<link rel="apple-touch-icon" href="https://mysite/path/images/logo_bg_white.png">
  • IOS หรือ IpadOS  ต้อง 16.4+ และ Safari 16.1+
  • อ้างอิง บน IPadOS 18.1, IOS 18.1
  • ตั้งค่าให้ safari Enable notification โดย Setting => Apps => Safari => Advanced => Feature Flags => Notifications
  • จากนั้น เปิด Safari เข้าไป site แล้ว share แบบ Add to Home Screen (เครื่องหมายชี้ขึ้น ข้างๆ เครื่องหมายบวกเพิ่ม tab) ถ้าไม่เพิ่ม to home screen จะ request permission ไม่ผ่าน denie ตลอด
  • โค้ดฝั่ง server ต้องสร้าง ปุ่มสำหรับ request permission (ลอง settimeout หรือ trigger click permission denied ทั้งหมด ต้องกดปุ่มเองเท่านั้นจริงจะ granted)