Lỗi nghiêm trọng: Vượt quá thời gian thực hiện tối đa 30 giây


397

Tôi đang tải xuống một tệp JSON từ một nguồn trực tuyến và khi nó chạy qua vòng lặp, tôi gặp phải lỗi này:

Lỗi nghiêm trọng: Thời gian thực hiện tối đa 30 giây vượt quá trong C: \ wamp \ www \ temp \ fetch.php trên dòng 24


11
có thể trùng lặp với thời gian thực hiện tối đa 60 giây, vượt quá ba lần khác. Vui lòng sử dụng chức năng tìm kiếm trước khi hỏi.
Gordon

"Hàm set_time_limit () và chỉ thị cấu hình max_execut_time chỉ ảnh hưởng đến thời gian thực hiện của chính tập lệnh. . không được bao gồm khi xác định thời gian tối đa mà tập lệnh đã chạy. Điều này không đúng trên Windows "Từ Tài liệu PHP
Jacob Sánchez

Câu trả lời:


722

Vòng lặp của bạn có thể là vô tận. Nếu không, bạn có thể kéo dài thời gian thực hiện tối đa như thế này:

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

set_time_limit(300);

có thể được sử dụng để tạm thời kéo dài thời gian giới hạn.


95
set_time_limit (300) có thể được sử dụng để tạm thời kéo dài giới hạn thời gian.
Omn

Đây có phải chỉ được đặt cho một tập lệnh đó hay nó sẽ ảnh hưởng đến tất cả các tập lệnh khác được thực hiện sau tập lệnh này trên cùng một máy chủ?
Rao

1
@Rao có, điều này sẽ chỉ dành cho một kịch bản. Để tạo nó cho tất cả các tập lệnh, bạn cần thay đổi nó trong tệp php.ini. bạn cũng có thể làm set_time_limit (0); nếu bạn muốn tập lệnh chạy mãi mãi hoặc trong một thời gian dài
Haseeb

31
ini_set ('max_execut_time', 0); // không giới hạn
Atari

3
@sangam Tôi muốn nói rằng đó là cách tốt nhất để giữ giới hạn này ở mức thấp nhất có thể trong khi vẫn cho phép một lượng bộ đệm bổ sung nhất định. Vì lý do bảo mật, tôi không muốn tắt nó hoàn toàn. Nó nên được đặt hợp lý. Tôi thực sự đã đặt nó thành gấp đôi thời gian mà tập lệnh chạy dài nhất của tôi mất để hoàn thành dưới mức độ căng thẳng của máy chủ trung bình. Tuy nhiên, nó luôn luôn có thể thất bại. Vì vậy, thực tiễn tốt nhất cũng là để giải quyết các vấn đề hết thời gian cho các kịch bản tiêu tốn thời gian riêng biệt.
Hafenkranich

185

Tôi đã có cùng một vấn đề và giải quyết nó bằng cách thay đổi giá trị cho param max_execution_timetrong php.ini, như thế này:

max_execution_time = 360      ; Maximum execution time of each script, in seconds (I CHANGED THIS VALUE)
max_input_time = 120          ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M           ; Maximum amount of memory a script may consume (128MB by default)

Tôi hy vọng điều này có thể giúp bạn.


1
Vì một số lý do, ini_set không hoạt động nhưng điều đó giúp chắc chắn!
gabrjan

php.inicó thể được tìm thấy trong /etc/php5/apache2/php.ini.... Tôi đang sử dụng Ubuntu 13.04 ...
Enissay

Tôi gặp vấn đề tương tự khi cài đặt moodle trên wamp nhưng đã giải quyết cấu hình tệp php.ini
Muhammad Irfan

1
Cần khởi động lại apache sau khi thay đổi trong php.ini
spideringweb

[php7] - sudo nano /etc/php/7.0/apache2/php.ini
Chris Lambrou

46

Tất cả các câu trả lời ở trên là chính xác, nhưng tôi sử dụng một cách đơn giản để tránh nó trong một số trường hợp.

Chỉ cần đặt lệnh này vào đầu tập lệnh của bạn:

set_time_limit(0);

9
Điều này hoàn toàn không được khuyến nghị
Tôi là người ngu ngốc nhất

1
Tắt giới hạn thời gian không bảo vệ chống lại các vòng lặp vô hạn, vì vậy luôn luôn thiết lập giới hạn (lớn hơn).
bimlas

@IamtheMostStoolPerson Tại sao không? Nếu bạn sử dụng nó như localhost
Fernando Torres

23

Tôi gặp vấn đề này trong khi nâng cấp lên WordPress 4.0 . Theo mặc định, WordPress giới hạn thời gian thực hiện tối đa là 30 giây.

Thêm mã sau vào tệp .htaccess của bạn trên thư mục gốc của Cài đặt WordPress để vượt quá mặc định.

php_value max_execution_time 300  //where 300 = 300 seconds = 5 minutes

18

Chỉnh sửa php.ini

Tìm dòng này:

max_execution_time

Thay đổi giá trị của nó thành 300:

max_execution_time = 300

300 có nghĩa là 5 phút thời gian thực hiện cho yêu cầu http.


16

Kịch bản của bạn đã hết thời gian. Hãy xem hàm set_time_limit () để tăng thời gian thực hiện. Hoặc hồ sơ kịch bản để làm cho nó chạy nhanh hơn :)


1
@HarshaMV Ông có nghĩa là sử dụng hồ sơ hiệu suất để xác định lý do tại sao tập lệnh bắt đầu chậm và tối ưu hóa mã của bạn để cải thiện thời gian thực hiện. Điều này có thể có hoặc không hữu ích, tùy thuộc vào nút thắt cổ chai là gì (CPU so với Đĩa I / O so với Mạng).
Dan Bechard 7/10/2015

12

nếu tất cả các cách trên không phù hợp với bạn thì hãy thêm một .htaccesstệp vào thư mục chứa tập lệnh của bạn và đặt tệp này vào trong

<IfModule mod_php5.c>
php_value post_max_size 200M
php_value upload_max_filesize 200M
php_value memory_limit 300M
php_value max_execution_time 259200
php_value max_input_time 259200
php_value session.gc_maxlifetime 1200
</IfModule>

đây là cách tôi giải quyết vấn đề của mình, ini_set('max_execution_time', 86400);cũng không set_time_limit(86400)giải quyết được vấn đề của mình, nhưng phương pháp .htaccess đã làm được.


1
Nó hoạt động trong trường hợp của tôi. Cảm ơn bạn. Thay M bằng G cho GB
Web_Developer

11

Chúng ta có thể giải quyết vấn đề này theo 3 cách khác nhau.

1) Sử dụng tệp php.ini

2) Sử dụng tệp .htaccess

3) Sử dụng tệp Wp-config.php (cho Wordpress)


8

Bạn có thể xóa giới hạn bằng cách đặt nó về 0 bằng cách thêm dòng này ở đầu tập lệnh của bạn:

<?php ini_set('max_execution_time', 0); ?>

7

Theo con đường /etc/php5(your php version)/apache2/php.ini.

Mở nó và đặt giá trị của max_execution_timemột mong muốn.


Trên một số nhà cung cấp dịch vụ lưu trữ nhất định, bạn có thể cần phải thiết lập /home/[username[/.php/7.0/phprc
ExpertCode

7

Có thể kiểm tra mọi thứ bạn đã thay đổi trong tệp php.ini. Ví dụ: tôi đã thay đổi "; intl.default_locale =" thành "; intl.default_locale = en_utf8" để bật "Tiện ích mở rộng quốc tế hóa (Intl)" mà không thêm "extension = php_intl.dll" thì cũng xảy ra lỗi tương tự. Vì vậy, tôi đề nghị kiểm tra các lỗi tương tự.



5

Để mở rộng, max_execution_timebạn có thể sử dụng ini_sethoặc set_time_limit.

// Set maximum execution time to 10 seconds this way
ini_set('max_execution_time', 10);
// or this way
set_time_limit(10);

!! Nhưng hãy lưu ý rằng, cả hai chức năng khởi động lại cũng đếm thời gian tập lệnh đã được thực hiện để thực thi

sleep(2);
ini_set('max_execution_time', 5);

register_shutdown_function(function(){
    var_dump(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']);
});

for(;;);

//
// var_dump outputs float(7.1981489658356)
//

Vì vậy, nếu bạn muốn đặt chính xác lượng thời gian tối đa của tập lệnh có thể chạy, lệnh của bạn phải là đầu tiên.

Sự khác biệt giữa hai chức năng này là

  • set_time_limit không trả về thông tin cho dù nó đã thành công nhưng nó sẽ đưa ra cảnh báo về lỗi.
  • ini_settrả về giá trị cũ khi thành công hoặc sai khi thất bại mà không có bất kỳ cảnh báo / lỗi nào

5

Bạn có thể làm điều đó một cách dễ dàng với WHM. Chỉ cần đến:

WHM -> Cấu hình dịch vụ -> Cấu hình PHP

biên tập viên-> max_execution_time=30

(30 là mặc định thay đổi nó thành bất kỳ giá trị nào bạn muốn)


2

Tôi có một vấn đề tương tự trong trang web WordPress, tôi đã thêm vào tệp .htaccess sau đó hoạt động tốt cho tôi.

php_value max_execution_time 6000000

0

Tôi đã thực hiện một số thay đổi trong trường hợp của mình trong: xampp \ phpMyAdmin \ library \ config.default.php

tôi đã tìm kiếm: $cfg['ExecTimeLimit'] và thay đổi giá trị ở bên phải ...

Bạn có thể thay đổi Giá trị tay phải thành bất kỳ giá trị nào cao hơn, như '5000'. Và nó hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.