Hành vi này giống như khóa phiên. Cách hoạt động mặc định của phiên PHP là khóa phiên (để ngăn hai tiến trình ghi vào đối tượng phiên). Điều này bình thường tốt cho các tập lệnh PHP ngắn hạn điển hình, nhưng có thể khiến bạn khó chịu khi bạn có thứ gì đó đang hoạt động lâu dài.
Nếu ứng dụng của bạn hoàn toàn không sử dụng phiên, thì bạn nên tắt session.auto_start
trong php.ini hoặc .htaccess: http ://www.php.net/manual/en/session.configuration.php#ini.session.auto-start
(Nếu bạn không thấy nó ở đó hoặc nó đã tắt, nhưng bạn đang sử dụng một số loại khuôn khổ, thì khuôn khổ đó có thể đang bắt đầu phiên cho bạn; nếu vậy, việc chuyển sang giải pháp tiếp theo sẽ đơn giản hơn là cố gắng chiến đấu khuôn khổ.)
Nếu bạn đang sử dụng phiên trên một số trang, nhưng không phải trên quy trình chạy lâu dài này, giải pháp là đóng phiên ở đầu tập lệnh của bạn, với session_write_close () :
<?
set_time_limit(0);
require '../connect.php';
require '../includes/ses.php';
session_write_close();
$i = 1;
....
Một lần nữa, cảnh báo khung:nếu khung đang bắt đầu một phiên cho bạn, hãy đặt session_write_close();
sau khi bao gồm các tệp khung, không phải trước! (Bạn đã đề cập đến trường hợp đó trong nhận xét của mình, đó là lý do tại sao tôi đặt nó sau dòng yêu cầu.)
Nếu quá trình chạy lâu dài của bạn cần sử dụng phiên, nhưng ở chế độ chỉ đọc, thì cách trên vẫn hoạt động. Xem https://stackoverflow.com/a/14409902/841830 (Như câu trả lời đó cho thấy, nếu bạn cần ghi vào phiên khi kết thúc quá trình chạy dài, điều đó cũng có thể thực hiện được.)
(Tái bút:Điều này đã được trả lời trong các bình luận, nhưng tôi đã đề nghị Wrikken đăng nó như một câu trả lời. Vâng, tin đồn là sự thật:Tôi sẽ làm bất cứ điều gì cho một vài đại diện ...)