2012-05-08 22 views
5

Một tập lệnh php lớn sử dụng tuôn ra để gửi một phần của html được tạo ra cho trình duyệt trong khi nó đang thực hiện phần lớn hơn của tập lệnh có appr. 20 giây.Tại sao tuôn ra PHP không phải lúc nào cũng hoạt động, trang 1/5 lần không được tải đúng cách?

Phần của tập lệnh đang được thực hiện sau khi xả là khá lớn và mất rất nhiều từ dự trữ máy chủ (90% cpu).

Một lần trong 5 lần trang vẫn bị mờ (màu trắng) có nghĩa là tuôn ra không đến để gửi hình ảnh hiển thị trang đang tải. Trang vẫn giữ nguyên (trình duyệt cho biết nó vẫn đang tải) cũng khi chương trình kết thúc và sẽ gửi toàn bộ trang đến trình duyệt.

Đáng chú ý: Khi tôi nhấn nút quay lại toàn bộ trang sẽ hiển thị (cần được tải trong trình duyệt sau khi toàn bộ tập lệnh được thực hiện) trong một giây và sau đó trình duyệt quay trở lại trang trước.

Tất cả 4 lần trang khác tải tốt. Đầu vào cho tập lệnh php giống nhau cho tất cả 5 lần.

tôi có các thiết lập trong file .htacces tôi:

addhandler x-httpd-php5-cgi .php5 
addhandler x-httpd-php5-cgi .php5 
addhandler x-httpd-php5-cgi .php5 
Header Set Cache-Control "max-age=0, no-store" 

Đây là tuyên bố để tuôn ra những mã được tạo cho trình duyệt:

print str_pad('',4096)."\n"; 
ob_flush(); 
flush(); 

Điều gì có thể gây ra vấn đề này?

+0

Câu chuyện hay, mã ở đâu? –

+0

@LawrenceCherone Tôi đã thêm mã vào trình duyệt. – BastiaanWW

Trả lời

2

Bạn chỉ có thể gợi ý: flush() gửi nó đến apache/webserver, có thể đệm/chờ, gửi đến mạng với bất kỳ số proxy nào có thể đệm/chờ, mà cuối cùng sẽ kết thúc trong trình duyệt của bạn cũng có thể quyết định đệm/chờ. Đi cho một phương pháp không đồng bộ nếu bạn không muốn đối phó với tất cả những đau đầu đó. Gearman làm cho nó rất dễ dàng, nhưng không hoàn toàn cần thiết tất nhiên.

2
print str_pad('',4096)."\n"; 

bạn có nhận thấy bạn đang lặp lại một chuỗi rỗng? Có thể bạn có nghĩa là

print str_pad(' ',4096)."\n"; 

mục đích của tuyên bố đó là vì một số trình duyệt web sẽ không hiển thị trang cho đến khi nhận được một số byte nhất định hoặc phản hồi hoàn thành, tùy điều kiện nào đến trước.

Các vấn đề liên quan