2011-10-12 41 views
52

Tôi đã thêm set_time_limit(0); chức năng để tăng thời gian thực thi nhưng thực thi chỉ tối đa 2-3 phút.Tăng thời gian thực hiện tối đa cho php

error_reporting(E_ALL); 
error_reporting(1); 
set_time_limit(0); 

Tôi muốn tìm kiếm liên kết từ trang web có vôi dài.

Mọi trợ giúp sẽ được đánh giá cao.

Thanks a lot.

+0

Bạn có trên một máy chủ chia sẻ? – Mob

+0

Có, i m trên máy chủ chia sẻ – Bajrang

Trả lời

191

PHP tập tin (ví dụ, my_lengthy_script.php)

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

tập tin .htaccess

<IfModule mod_php5.c> 
php_value max_execution_time 300 
</IfModule> 

Nhiều tùy chọn cấu hình

Nếu wordpress, thiết lập này trong file config.php,

define('WP_MEMORY_LIMIT', '128M'); 

Nếu drupal, các trang web/default/settings.php

ini_set('memory_limit', '128M'); 

Nếu bạn đang sử dụng các khuôn khổ khác,

ini_set('memory_limit', '128M'); 

Bạn có thể tăng bộ nhớ là gigabyte.

ini_set('memory_limit', '3G'); // 3 Gigabytes 

259200 có nghĩa là: -

(259200/(60x60 minutes))/24 hours ===> 3 Days 

More details on my blog

+1

Thật thú vị, điều này cũng phù hợp với môi trường PHP "cứng" của Suhosin. –

+0

Cảm ơn mọi người đã chấp nhận câu trả lời và nhận xét! –

+0

sẽ hoạt động trên máy chủ trực tiếp nơi tôi đang lưu trữ trang web của mình mà tôi đã thử nhưng không thành công. vì vậy tôi nhầm lẫn rằng có thể các nhà cung cấp máy chủ đã đặt có max_execution_time đến 30 giây có thể là thats lý do tại sao ví dụ đã không làm việc –

0

Có thể có giới hạn được đặt trong máy chủ web của bạn. Một số trình duyệt/proxy cũng sẽ thực hiện hết thời gian chờ. Gọi quá trình chạy dài thông qua một yêu cầu HTTP chỉ đơn giản là ngớ ngẩn. Cách đúng để giải quyết vấn đề (giả sử bạn không thể thực hiện xử lý nhanh hơn) là sử dụng yêu cầu HTTP để kích hoạt xử lý bên ngoài nhóm phiên máy chủ web, sau đó thăm dò trạng thái qua HTTP cho đến khi bạn có kết quả.

+0

Tôi tự hỏi, nếu một ví dụ có thể được cung cấp cho câu trả lời này? Bạn có nghĩa là một quá trình không phải là một yêu cầu http? Một cái gì đó giống như một thực thi? – TARKUS

+0

"một cái gì đó giống như một tập tin thực thi?" - không có ý nghĩa gì nhiều. Một ví dụ sẽ là quá phức tạp cho diễn đàn này - một cách tiếp cận là sử dụng một daemon, một cách khác là tạo ra một quá trình tách rời (http://symcbean.blogspot.co.uk/2010/02/php-and-long-running- processes.html). Tôi đã có một cái nhìn xung quanh cho ví dụ daemon tốt - nhưng chỉ tìm thấy rất nhiều những cái xấu (gợi ý: nên đóng stdio của nó, ngã ba và setsid) – symcbean

9

Thêm các dòng mã này vào tệp htaccess của bạn. Tôi hy vọng nó sẽ giải quyết vấn đề của bạn.

<IfModule mod_php5.c> 
php_value max_execution_time 259200 
</IfModule> 
+0

những gì 259200 có nghĩa là gì? Giây? – Wishnu

+0

259200/60 = 4320 phút 4320/60 = 72 giờ 72/24 = 3days – PJunior

1

tốt, có hai cách để thay đổi max_execution_time.
1. Bạn có thể trực tiếp đặt nó trong tệp php.ini.
2. Thứ hai, bạn có thể thêm dòng sau vào mã của mình.

ini_set('max_execution_time', '100') 
3

Vâng, vì trên máy chủ được chia sẻ, bạn không thể làm gì được. Họ thường đặt thời gian thực hiện tối đa để bạn không thể ghi đè lên. Tôi đề nghị bạn liên lạc với họ.

0

Đây là câu hỏi cũ, nhưng nếu ai đó tìm thấy nó thì cơ hội ngày nay là php sẽ được chạy qua php-fpm và mod_fastcgi. Trong trường hợp đó, không có gì ở đây sẽ giúp kéo dài thời gian thực thi vì Apache sẽ chấm dứt kết nối với một quá trình không xuất ra bất cứ thứ gì trong 30 giây. Cách duy nhất để mở rộng nó là thay đổi -idle-timeout trong cấu hình apache (module/site/vhost).

FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /run/php/php7.0-fpm.sock -idle-timeout 900 -pass-header Authorization 

Thông tin chi tiết - Increase PHP-FPM idle timeout setting

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