Bài đăng

Đang hiển thị bài đăng từ Tháng 10, 2021

Cùng một mã nguồn PHP và môi trường Nginx, cùng mở một trang quản trị (admin tool) có lượng dữ liệu render lớn F5 lúc được, lúc bị ngắt cụt mã HTML giữa chừng (trang web mất chân trang, giao diện vỡ, thiếu dữ liệu).

  1. Hiện tượng (Symptom) # Triệu chứng: Cùng một mã nguồn PHP và môi trường Nginx, cùng mở một trang quản trị (admin tool) có lượng dữ liệu render lớn: Một server chạy bình thường. Một server gặp tình trạng tải trang chập chờn: F5 lúc được, lúc bị ngắt cụt mã HTML giữa chừng (trang web mất chân trang, giao diện vỡ, thiếu dữ liệu). Đặc điểm gây nhiễu: Các thông số tài nguyên cốt lõi giữa 2 bên hoàn toàn giống nhau ( memory_limit = 4096M , max_execution_time = 0 , output_buffering = 0 , cấu hình pool PHP-FPM đồng nhất). 2. Nguyên nhân gốc rễ (Root Cause) # Cơ chế đệm response của Nginx kết hợp FastCGI: Khi PHP trả dữ liệu về Nginx, nếu payload nhỏ hơn bộ đệm trong RAM ( fastcgi_buffer_size / fastcgi_buffers , thường là 4KB–64KB tùy OS/arch), Nginx stream trực tiếp về client mượt mà. Khi dữ liệu HTML vượt quá kích thước buffer RAM, Nginx bắt buộc phải băm (hash) và ghi phần dữ liệu vượt ngưỡng vào thư mục tạm trên ổ cứng ( fastcgi_temp/ ). Lỗi phát sinh: Thư mục cài đặt Nginx hoặ...

Làm quen với Python hello world

Câu lệnh đơn giản để in ra màn hình chứ print( "Hello, World!" ) Lưu lại thành file  hello.py , rồi thực thi bằng cách mở CMD (hoặc terminal) gõ: python hello.py Comment Là những nội dung (trình thông dịch) python sẽ bỏ qua, không xem đó là các câu lệnh để thực thi. Comment sẽ bắt đầu bằng dấu # #This is a comment. print( "Hello, World!" ) Biến, phép gán: Python không cần khai báo biến, dữ liệu được gán trực tiếp vào tên biến. name = "Nam" age = 10 print(name, age) Output: Nam, 10 Xem kiểu dữ liệu của biến bằng hàm  type name = "Nam" age = 10 print(type(age), type(name)) Output: <class ‘int’> <class ‘str’>

Sử dụng diskpart để tạo usb boot disk trên HĐH Windows

  Ghi chú: Cần có máy tính chạy hệ điều hành Windows. 1. Cắm usb vào máy 2. Mở CMD tiến hành phân vùng Mở CMD lên, võ vào các lệnh sau 2.1 Mở ứng dụng diskpart diskpart 2.2 Chọn ổ đĩa usb Hiện ra danh sách các ỗ đĩa, chọn ổ usb bạn vừa cắm vào list disk select disk <disk-id> Với <disk-id> là số 1,2,3,… đại diện cho ổ đĩa usb của bạn, để biết usb bạn là cái nào thì nên dựa vào thương hiệu usb + dung lượng. Bước này cực kì quan trọng, vì việc chúng ta đã làm là xoá hết ổ đĩa và thực hiện phân vùng lại. Nếu chúng ta chọn sai ổ đĩa thì sẽ xoá hết nội dung trên đĩa đó. 2.3 Xoá hết phân vùng trên đĩa clean 2.3 Tạo phân vùng mới create partition primary active 2.4 Format format quick 2.5 Mount usb vào để hiện trên explorer assign Bây giờ tắt CMD được rồi. 3. Mount iso, copy file vào usb Mở file iso windows, explorer hiện thêm 1 ổ đĩa ứng với file iso đó. Mở ổ đĩa ảo đó ra, copy toàn bộ file. Paste vào ổ usb vừa làm. Chờ đợi cho copy xong. Cẩn thận eject usb. Khởi động lại máy ...

PHP + sqlite cách sử dụng cơ bản

Kết nối đến file CSDL $db = new SQLite3($options['path']); Thực thi một câu sql: CREATE, UPDATE, DELETE,… $sql = "CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, username TEXT NOT NULL, password TEXT NOT NULL, status NUMERIC );" $db->exec($sql); Select data $sql = "SELECT * FROM users limit 1"; $results = $db->query($sql); $rows = array(); while ($row = $results->fetchArray(SQLITE3_ASSOC)) { $rows[] = $row; } print_r($rows);