Proc_open php

Nếu lệnh được thực thi không thể tìm thấy, một hợp lệ tài nguyên sẽ được trả lại. Điều này có vẻ kỳ lạ, nhưng có ý nghĩa;

Bài viết hướng dẫn cách thực thi dòng lệnh trên máy chủ bằng PHP nhưng hiển thị đầu ra thời gian thực trên trình duyệt

Có nhiều hàm thực thi dòng lệnh, tôi thường sử dụng hàm

1 để có thể kiểm tra giám sát được cả 
2, 
3 và 
4

Hiển thị thời gian thực không cần xử lý gì ở máy khách

Để hiển thị thời gian thực trên trình duyệt mà không cần xử lý gì ở máy khách thì phía máy chủ phải đảm bảo 2 vấn đề

  • Tắt bộ đệm đầu ra cho mỗi khi lệnh có đầu ra thì hiện ra đúng lúc chứ không bị lưu lại trong bộ đệm đầu ra
  • Loại nội dung phải là
    5

Ví dụ sau hiển thị đầu ra của lệnh

0 trên màn hình duyệt

kiểm tra ping. php

Nếu chú ý bạn sẽ thấy các thẻ đóng [điển hình là của

1, 
2 và chứa thẻ đầu ra của lệnh ở đây là 
3] sẽ không được ghi ra cho đến khi thực hiện xong lệnh

Đặc biệt nếu HTML có chứa CSS và JavaScript sẽ khó có thể thực thi chính xác khi DOM chưa sẵn sàng

Vì vậy, giải pháp tốt hơn là hãy sử dụng Sự kiện do máy chủ gửi cho phía khách hàng đầu ra lệnh của một cách chủ động khi mọi thứ đã sẵn sàng

Hiển thị thời gian thực bằng Server-sent Events

Ta edit lại đoạn mã trên một chút

  • Change content type to
    4
  • Ghi chuỗi đầu ra theo định dạng của luồng sự kiện. Xem thêm ›

ping-test-sse. php

Trong đó phần được thay đổi là

header["Content-type: text/event-stream; charset=utf-8"]; 

while [$s = fgets[$pipes[1]]] {
  print "data: " . $s . PHP_EOL;
  print PHP_EOL;
  flush[]; // dump the line immediately
}
$retval = proc_close[$process];

print "id: close" . PHP_EOL; // notify end of script

print "data: Command returned $retval" . PHP_EOL;
print PHP_EOL;

Phía sau máy khách chuẩn bị HTML nội dung như sau

________số 8

Đoạn mã JavaScript sử dụng EventSource để đọc đầu ra của lệnh, thêm vào giữa

5 mỗi khi có dữ liệu mới

sse. js

0

Như vậy với cách làm này, thì phần xử lý CSS và JavaScript đã được tải đầy đủ khi thực hiện lệnh, giao diện hiển thị kết quả sẽ được đảm bảo

Chủ Đề