Đây không phải là một trong những câu hỏi thường gặp nếu giấc ngủ được tính cho thời gian chờ hoặc các nội dung tương tự. Ok, đây là vấn đề: Tôi đã đặt max_execution_time cho PHP là 15 giây và lý tưởng là điều này sẽ hết thời gian khi vượt qua giới hạn đã đặt, nhưng không. Apache đã được khởi động lại sau khi thay đổi tệp php.ini và một ini_get ('max_execution_time') là tất cả đều ổn. Đôi khi, tập lệnh chạy tối đa 200 giây, điều này thật điên rồ. Tôi không có giao tiếp cơ sở dữ liệu nào cả. Tất cả các kịch bản hiện đang tìm kiếm các tập tin trên hệ thống tập tin Unix và trong một số trường hợp chuyển hướng lại đến một trang JSP khác. Không có sleep() trên script.PHP max_execution_time không định thời gian ra
tôi tính toán tổng thời gian thực hiện của kịch bản PHP như thế này:
Vào lúc bắt đầu của kịch bản tôi đặt:
$_mtime = microtime();
$_mtime = explode(" ",$_mtime);
$_mtime = $_mtime[1] + $_mtime[0];
$_gStartTime = $_mtime;
và thời gian kết thúc ($ _ gEndTime) được tính tương tự.
Tổng thời gian được tính trong một chức năng tắt máy mà tôi đã đăng ký:
register_shutdown_function('shutdown');
.............
function shutdown()
{
..............
..............
$_total_time = $_gEndTime - $_gStartTime;
..............
switch (connection_status())
{
case CONNECTION_NORMAL:
....
break;
....
case CONNECTION_TIMEOUT:
....
break;
......
}
}
Lưu ý: Tôi không thể sử dụng $ _SERVER [ 'REQUEST_TIME'] vì phiên bản PHP của tôi là không tương thích. Điều đó thật tệ - tôi biết.
1) Vâng, câu hỏi đầu tiên của tôi rõ ràng là tại sao kịch bản PHP của tôi thực thi ngay cả sau khi giới hạn thời gian chờ đã đặt?
2) Apache có chỉ thị Thời gian chờ là 300 giây nhưng nhị phân PHP không đọc cấu hình Apache và điều này không phải là vấn đề.
3) Có khả năng có gì đó đang gửi PHP vào chế độ ngủ không?
4) Tôi có tính thời gian thực hiện sai không? Có cách nào tốt hơn để làm điều này?
Tôi bị bối rối vào thời điểm này. PHP Wizards - xin vui lòng giúp đỡ.
Chỉnh sửa: Tôi vừa phát hiện ra rằng các hoạt động của luồng không phải là nguyên nhân với một vài nhật ký. Độ trễ chỉ là ngẫu nhiên trong tập lệnh ngay cả khi không có hoạt động truyền trực tuyến nào được thực hiện. Chuyển ngữ cảnh có thể chỉ là lý do. Nhưng tôi vẫn không có câu trả lời rõ ràng. Tôi nhìn lên Real max_execution_time for PHP on linux nhưng Im không chắc chắn tôi muốn thử điều đó. Bất cứ một đề nghị nào khác?
Tôi tin rằng các hoạt động của hệ thống tệp cũng không được tính trong các phép tính giới hạn thời gian. – lonesomeday
Bạn biết đấy, bạn có thể sử dụng 'microtime (true)' để lấy lại 'float' ngay lập tức ... – deceze
@lonesomeday: Bạn có chắc chắn về điều đó không? –