Hướng dẫn debug bằng strace URL Wordpress

26/01/2021

Sau khi chia sẻ loạt bài debug WordPress bằng cách sử dụng strace để xem chi tiết quá trình xử lý của PHP, nhiều bạn đặt câu hỏi với mình rằng cách làm trên chỉ áp dụng được cho trang chủ (trang index), nếu trang con chậm thì phải làm thế nào? Ví dụ: làm sao để strace URL WordPress: “https://quantrilinux.vn/toi-uu-wordpress-bi-cham.html” bằng command line?

Xem lại:

Nhìn lại mô hình đơn giản của hệ thống web, ta dễ dàng nhận thấy URL “/toi-uu-wordpress-bi-cham.html” nằm ở bước số 1 và sẽ được tiếp nhận bởi Web Server. Còn WordPress của chúng ta là source code PHP nằm ở bước số 3. Vậy nghĩa là sẽ có 1 cơ chế để Web Server truyền URL vào WordPress. Cơ chế đó là gì, làm sao chúng ta can thiệp vào đấy đề chèn URL ta muốn bằng command line?

Server Application Progamming Interface – SAPI

Server Application Programming Interaface (SAPI) là một module để giao tiếp trực tiếp với Web Server như Apache, Nginx, IIS. Nói cách khác, SAPI là một API được cung cấp bởi Web Server cho phép các Developers mở rộng thêm tính năng của web server.

PHP có những module để giao tiếp trực tiếp với những web server khác nhau và được gọi là SAPI. Có nhiều loại SAPIs khác nhau cho những web server extension khác nhau như: Common Gateway Interface (CGI), apache2handler, php-fpm, Command Line Interface (CLI – cái chung ta đang quan tâm)

Strace URL WordPress

URL, Hostname, Request Method … là những thông tin được Web Server truyền vào cho PHP thông qua biến $_SERVER. Hãy thử in ra biến này bằng command line và quan sát. Tạo file info.php với nội dung như sau trên server và chạy thử

<?php print_r($_SERVER); ?>

Chạy file trên bằng PHP command line:

[[email protected] public_html]# php info.php

Kết quả

Thật thú vị, đây chẳng phải là những biến môi trường của session mình đang sử dụng hay sao? Vậy biến “$_SERVER” sẽ được set theo các biến môi trường khi chạy lệnh php. Tới đây chắc mọi người cũng biết đáp án rồi nhỉ :D? Nhiệm vụ của chúng ta là chèn thêm biến phù hợp để khai báo URL.

Và em nó, tên biến chúng ta cần set khi chạy lệnh đây: REQUEST_URI

Chạy lệnh sau để set Domain + URL cho WordPress khi xử lý, kết quả trả về cho thấy đúng nội dung của URL cần strace:

[[email protected] public_html]# HTTP_HOST="quantrilinux.vn" REQUEST_URI="/toi-uu-wordpress-bi-cham.html" php index.php

Tiến hành strace xử lý của PHP đối với URL “https://quantrilinux.vn/toi-uu-wordpress-bi-cham.htm”:

[[email protected] public_html]# HTTP_HOST="quantrilinux.vn" REQUEST_URI="/toi-uu-wordpress-bi-cham.html" strace php index.php

Bạn có thể set nhiều tham số khác cho $_SERVER như Query String, request method, post payload … tùy theo tình huống hãy lựa chọn tên biến cho phù hợp. Ngoài WordPress thì cách này cũng có thể áp dụng cho các loại mã nguồn PHP khác.

Nếu khi áp dụng bị vướng mắc chỗ nào thì có thể trao đổi với mình tại Group Telegram Quản Trị Linux để cùng làm rõ nhé.

Tham khảo: