2011-12-04 37 views
5

Tôi có một kịch bản mà tôi đã thiết lập:Hàm set_time_limit (0) và "thời gian thực hiện tối đa" PHP

set_time_limit(0) 

nhưng vẫn nhận được

Fatal error: Maximum execution time of 90 seconds exceeded in /home/Feed.php on line 234 

Tôi cũng đã cố gắng thiết lập:

php_value max_execution_time 120 

trong tệp .htaccess nhưng vẫn không thể dừng lỗi này - bất kỳ ý tưởng nào tại sao điều này không ghi đè?

+3

Máy chủ lưu trữ ghi đè ghi đè của bạn ?, nếu bạn đặt 'set_time_limit (0)' trong vòng lặp, nó sẽ đặt lại thời gian về 0 trên mỗi lần lặp. –

+1

@LawrenceCherone bạn có chắc chắn không? –

+1

Chỉ cần biết rằng 'set_time_limit (XX)' đã giải quyết được vấn đề của tôi. Có lẽ các máy chủ khác nhau có các quy tắc/cấu hình khác nhau. 'Php_value max_execution_time XX' không thực hiện thủ thuật. – nobug

Trả lời

5

Rất có thể, máy chủ của bạn đang chạy bản sao PHP với bản vá Suhoshin được cài đặt. Bản vá này cung cấp một số lượng lớn các tính năng bảo mật và nâng cao hoạt động cho PHP, bao gồm việc cho phép máy chủ vô hiệu hóa các chức năng như set_time_limit().

Có nhiều cách khác mà máy chủ có thể tắt chức năng set_time_limit(), nhưng đó là khả năng nhất. (đặc biệt là bạn đã loại trừ Chế độ An toàn)

Tại sao chúng sẽ vô hiệu hóa chức năng này? Bởi vì một hàm PHP mất nhiều thời gian để chạy cũng thường mất rất nhiều tài nguyên máy chủ; trong một môi trường lưu trữ được chia sẻ, nó là khôn ngoan cho các máy chủ để giảm thiểu loại điều để tránh có một kịch bản rogue tác động đến người dùng khác.

Bạn có thể làm gì với ứng dụng này?

Trước hết, bạn có chắc chắn bạn cần đặt giới hạn thời gian không? Bạn có biết tại sao kịch bản của bạn mất nhiều thời gian để chạy? Bạn có thể làm việc xung quanh nó? Có lẽ làm một chút lược tả trên mã của bạn có thể giúp bạn tìm thấy các nút cổ chai và tăng tốc độ chương trình.

Ngoài ra, nếu bạn thực sự cần đặt giới hạn thời gian, bạn có thể cần yêu cầu máy chủ lưu trữ cho phép bạn làm như vậy hoặc nâng cấp gói của bạn hoặc chuyển nhà cung cấp dịch vụ lưu trữ.

3

Chức năng này không có tác dụng khi PHP đang chạy ở chế độ an toàn. Không có cách giải quyết khác hơn là tắt chế độ an toàn hoặc thay đổi thời hạn trong php.ini

+0

Thiết bị không hoạt động ở chế độ an toàn –

0

Nếu bạn chắc chắn nó không phải đang chạy trong chế độ an toàn ...

http://php.net/manual/en/function.set-time-limit.php

"Khi được gọi là, set_time_limit() khởi động lại bộ đếm thời gian chờ từ số không. "

Vì vậy, về mặt lý thuyết, bạn có thể liên tục call set_time_limit(0).

Tuy nhiên, nó có thể cho nhà cung cấp hosting của bạn để ngăn chặn điều đó thông qua chế độ an toàn, vv

Thành thực mà nói, tôi chỉ muốn cố gắng để có được một VPS giá rẻ, nơi bạn kiểm soát mọi thứ nếu bạn cần để tùy chỉnh mà loại Điều.

+1

Hướng dẫn cho biết "Nếu được đặt thành 0, không giới hạn thời gian". – xdazz

+0

Có.Nhưng vấn đề là, đặt nó là 0 là không đủ cho anh ta rõ ràng. Vì vậy, sử dụng nó để thiết lập lại truy cập có thể là khả thi. Tôi chưa bao giờ cố lạm dụng nó theo cách đó nhưng nó được cho là có tác dụng. – ReadWriteCode

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