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 việc với JSON trong PHP

Làm việc với JSON trong PHP.

Chuyển array thành json string

$user = [
    'id' => 1,
    'username' => 'admin',
];

echo json_encode($user);

Kết quả:

{"id":1,"username":"admin"}

Nếu muốn format đẹp hơn ta cho thêm tham số:

echo json_encode($user, JSON_PRETTY_PRINT);

Kết quả:

{
    "id": 1,
    "username": "admin"
}

Lưu ý: chỉ sử làm đẹp json khi test, không nên sử dụng trong môi trường chạy thực tế vì làm tăng kích thước json string với các kí tự end-line, space,...

Chuyển Object thành json string

Ta giả sử có class user như sau:

class User {
    public $id;
    public $username;
}

$user = new User()
$user->id = 1;
$user->username = 'admin';

Thì tương tự như trên ta cũng có thể gọi hàm json_encode để encode object thành json tring.

echo json_encode($user);

Kết quả:

{"id":1,"username":"admin"}

Chuyển json string thành array hoặc object

Để chuyển json string thành array hoặc object ta sử dụng hàm json_decode.
Ví dụ như sau:

$user_json = '{"id":1,"username":"admin"}';
$user_object = json_decode($user_json);
var_export($user_object);

$user_array = json_decode($user_json, TRUE);
var_export($user_array);

Kết quả:

// Object
stdClass::__set_state(array(
   'id' => 1,
   'username' => 'admin',
))

// Array
array (
  'id' => 1,
  'username' => 'admin',
)

Hàm json_decode mặc định sẽ chuyển json string thành object, nhưng nếu thêm tham số thứ 2 là TRUE. Thì hàm sẽ chuyển json string thành array.


Ref:
https://www.php.net/manual/en/function.json-encode.php
https://www.php.net/manual/en/function.json-decode.php

Bài đăng phổ biến từ blog này

Gọi hàm nhiều cấp trong MIPS

Đệ quy trong MIPS