Làm thế nào để tăng thời gian chờ thực thi trong php?


101

Làm thế nào để tăng thời gian chờ giao dịch? Tôi muốn tải lên video nhưng kích thước lớn của video không được tải lên?

Nó ném lỗi The process *** exceeded the timeout of 60 seconds.


1
Xác định "thời gian chờ giao dịch". Những gì không hoạt động ở đâu?
Pekka

1
bạn nghĩ tại sao "giao dịch" của nó hết thời gian chờ?
Your Common Sense,

các video ngắn được tải lên thành công. nhưng video dài không được tải lên, tôi nghĩ đã hết thời gian.
Aamir

ini_set ('post_max_size', '200M'); ini_set ('upload_max_filesize', '200M'); ini_set ('max_execution_time', '200 triệu'); ini_set ('max_input_time', '200 triệu'); ini_set ('memory_limit', '200M'); set_time_limit (65536);
Aamir

1
tốt hơn là chia nhỏ tệp trước khi tải lên. Có rất nhiều ứng dụng có thể được sử dụng. Tôi chuẩn bị trước plupload.
bksi

Câu trả lời:


127

Bạn cần thay đổi một số cài đặt trong php.ini của mình:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must - sets the maximum time in seconds

Việc đặt PHP.ini của bạn có phụ thuộc vào môi trường của bạn hay không, thêm thông tin: http://php.net/manual/en/ini.list.php


xin lỗi, tôi không biết ý bạn là gì :(
Hannes 30/09/10

@Aamir, Bạn cần có quyền từ máy chủ web của mình để thay đổi cấu hình máy chủ web của bạn. Thông thường, họ sẽ không để bạn thay đổi những thứ như vậy.
hellozimi

tôi có thể thay đổi upload_max_filesize và max_execution_time trong tệp htaccess không?
Aamir

2
@Col, tôi không đồng ý, anh ấy muốn thực hiện các thay đổi nhanh chóng chứ không phải trên toàn bộ ứng dụng, vì vậy anh ấy hỏi làm thế nào anh ấy có thể làm điều đó. Và ngay cả khi anh ta hỏi làm thế nào anh ta có thể thay đổi một số nội dung trong php.ini thì đó có thể là một câu hỏi dành cho người mới, nhưng là một câu hỏi hợp pháp tất cả đều giống nhau.
Hannes

1
@IulianOnofrei được rồi, chỉ cần cảm thấy cần phải chỉ ra điều đó: D, nhưng có thể nếu bạn không biết điều đó thì vẫn tốt khi tra cứu… "Những người không thể học từ lịch sử sẽ phải lặp lại nó" và tất cả những điều đó …
Hannes

56

Bạn cũng có thể làm trong thời gian chạy bằng cách sử dụng

set_time_limit(100);

http://php.net/manual/en/ Chức năng.set-time-limit.php

hoặc trong vhost-config của bạn

php_admin_value max_execution_time 10000

Có giới hạn thời gian thực thi toàn cầu là THẤP chủ yếu là một ý tưởng hay vì lý do hiệu suất trên các ứng dụng không đáng tin cậy. Vì vậy, bạn có thể muốn chỉ cho phép những tập lệnh đó chạy lâu hơn mà điều đó hoàn toàn phải làm.

ps: Đừng quên post_max_size và upload_max_filesize (giống như câu trả lời đầu tiên đã nói)


Nếu bạn cài đặt nó sau đó giấc ngủ sẽ bị bỏ qua
Snake Eyes

20

Để hoàn thành câu trả lời của Hannes.

Bạn cần thay đổi một số cài đặt trong php.ini của mình:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

Nếu ai đó muốn đặt không giới hạn (tôi không biết tại sao nhưng nếu bạn muốn), bạn có thể đặt thời gian thành 0:

Bạn cần thay đổi một số cài đặt trong php.ini của mình:

upload_max_filesize = 0 

max_execution_time = 0

Và nếu bạn không biết php.ini của mình ở đâu. Bạn có thể tạo một tệp "name.php" trong máy chủ của mình và đặt:

<?php phpinfo(); ?>

Và trên trang web của bạn, bạn có thể thấy cấu hình của php.ini và nó được đánh dấu ở đâu.

Chỉnh sửa vào ngày 9 tháng 1 năm 2015:

Nếu bạn không thể truy cập php.ini của mình, bạn có hai tùy chọn khác.

Bạn có thể đặt dòng này trực tiếp trong tệp "name.php" của mình nhưng tôi không tìm thấy upload_max_filesize cho tùy chọn này:

set_time_limit(0);

Hoặc trong ".htaccess"

php_value upload_max_filesize 0
php_value max_execution_time 0

9

nếu những gì bạn cần làm chỉ cụ thể cho 1 hoặc 2 trang, tôi khuyên bạn nên sử dụng set_time_limit để nó không ảnh hưởng đến toàn bộ ứng dụng.

set_time_limit(some_values);

nhưng tất nhiên 2 giá trị này (post_max_size & upload_max_filesize) phải được điều tra.

bạn có thể đặt nó qua hàm ini_set

ini_set('post_max_size','20M');
ini_set('upload_max_filesize','2M');

hoặc trực tiếp trong tệp php.ini như phản hồi ở trên của Hannes, hoặc thậm chí đặt nó là .htaccess như bên dưới

php_value upload_max_filesize 2M
php_value post_max_size 20M

5

Để bổ sung cho các câu trả lời ở trên, bạn có thể sử dụng set_time_limit()hàm:

http://php.net/manual/en/ Chức năng.set-time-limit.php

truyền 0dưới dạng đối số sẽ làm cho tập lệnh của bạn chạy không giới hạn thời gian.


Hàm set_time_limit () không có gì để làm với tập tin tải lên
Common Sense của bạn

1
Điều này không đủ chính xác, Đại tá Shrapnel. Trong khi trên môi trường Unix, thời gian thực thi tối đa được so sánh với thời gian CPU tích lũy được sử dụng bởi php-thread, trên các hệ thống windows, thời gian tuyệt đối được sử dụng. Tải lên chủ yếu là "thời gian nhàn rỗi" (IO-Wait). Nhưng như bạn thấy, mặc dù quá trình tải lên có thể dừng lại khi quá lâu.
Christoph Strasen

4

Nếu bạn tình cờ sử dụng máy chủ Microsoft IIS , ngoài cài đặt php.ini được đề cập bởi những người khác, bạn có thể cần tăng cài đặt thời gian chờ thực thi cho ứng dụng PHP FastCGI trong Trình quản lý máy chủ IIS:

Bước 1) Mở Trình quản lý máy chủ IIS (thường trong Trình quản lý máy chủ trong Menu Bắt đầu, sau đó Công cụ / Dịch vụ Thông tin Internet (IIS) ).

Bước 2) Nhấp vào kết nối chính (không dành riêng cho bất kỳ miền cụ thể nào).

Bước 3) Trong phần IIS , tìm Cài đặt FastCGI (hiển thị bên dưới).

nhập mô tả hình ảnh ở đây

Bước 4) Trong đó, click chuột phải vào ứng dụng PHP và chọn Edit ... .

Bước 5) Kiểm tra thời gian chờ (hiển thị bên dưới).

nhập mô tả hình ảnh ở đây

Trong trường hợp của tôi, thời gian chờ mặc định ở đây là 70 và 90 giây; trước đây là nguyên nhân gây ra Lỗi máy chủ nội bộ 500 trên các tập lệnh PHP mất nhiều hơn 70 giây.


3

Bạn có lỗi đánh máy: ini_set ('max_input_time', '200M') - tập giá trị cần phải là số nguyên, như ini_set ('max_input_time', '200')


2

Tôi biết bạn đang hỏi cụ thể về thời gian chờ của PHP, nhưng điều mà dường như chưa ai đề cập đến là cũng có thể có thời gian chờ trên máy chủ web và nó có thể trông rất giống với thời gian chờ của PHP.

Vì vậy, nếu bạn đã thử:

  1. Tăng thời gian chờ trong php.ini bằng cách thêm dòng: max_execution_time = {số giây tức là 60 trong một phút}
  2. Tăng thời gian chờ trong chính tập lệnh của bạn bằng cách thêm: ini_set ('max_execution_time', '{số giây tức là 60 cho một phút}');

Và bạn đã kiểm tra bằng hàm phpinfo () rằng max_execution_time thực sự đã được tăng lên, sau đó bạn có thể muốn thử thêm nó vào .htaccess để đảm bảo rằng chính Apache sẽ không hết thời gian:

RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]

Thông tin thêm tại đây: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-despx-ini-set/


2

Đầu tiên kiểm tra php.iniđường dẫn tệp bằng cách phpinfo(); và sau đó thay đổi các thông số PHP.INI:

upload_max_filesize = 1000M
memory_limit = 1500M
post_max_size = 1500M
max_execution_time = 30

khởi động lại Apache

set_time_limit(0); // safe_mode is off

ini_set('max_execution_time', 500); //500 seconds

Lưu ý : bạn cũng có thể sử dụng lệnh để tìm php.initrong Linux

locate `php.ini`

1

Nếu bạn không thể chỉnh sửa php.ini (ví dụ: trên máy chủ của bạn), bạn có thể cố gắng thay đổi các tham số php.ini từ trong mã php của mình. Thử:

ini_set('max_execution_time', 'NUMBER OF SECONDS TO ALLOW BEFORE TIMEOUT');

Nếu cách đó không hiệu quả, hãy thử đặt 'set_time_limit' theo cách tương tự, ngoài ra, tôi muốn nói rằng lựa chọn duy nhất của bạn là liên hệ với máy chủ của bạn. Không thể sửa đổi các cài đặt này khi ở chế độ an toàn.


3
Hannes đã nhận được điều này một phút trước khi tôi đăng và chỉ ra một cách chính xác rằng set_time_limit () không nên được đặt bởi ini_set, như đã nêu trong câu trả lời này mà bằng cách đặt giây trong ngoặc. Đã bình chọn hannes lên.
John

1

Kiểm tra xem bạn có đang ở chế độ an toàn hay không - nếu không - hãy đặt giới hạn thời gian (Giá trị cục bộ) thành những gì bạn muốn:

if(!ini_get('safe_mode')){

    echo "safe mode off";
    set_time_limit(180);// seconds

    phpinfo();// see 'max_execution_time'
}

* Bạn không thể đặt giới hạn thời gian theo cách này nếu chế độ an toàn 'bật'.


1

tùy chọn: nếu bạn đặt cấu hình về php.ini nhưng vẫn không tải lên được

-đây là chức năng php để kiểm tra mã lỗi

$error_type = [];
$error_type[0] = "There is no error";
$error_type[1] = "The uploaded file exceeds the upload_max_filesize directive in php.ini.";
$error_type[2] = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
$error_type[3] = "The uploaded file was only partially uploaded.";
$error_type[4] = "No file was uploaded.";
//$error_type["5"] = "";
$error_type[6] = "Missing a temporary folder. Introduced in PHP 5.0.3.";
$error_type[7] = "Failed to write file to disk. Introduced in PHP 5.1.0.";
$error_type[8] = "A PHP extension stopped the file upload. PHP does not provide a way to ascertain which extension caused the file upload to stop; examining the list of loaded extensions with phpinfo() may help. Introduced in PHP 5.2.0.";
//------------------------------
//--> show msg error.
$status_code = $_FILES["uploadfile"]["error"];
if($status_code != 0){
    echo $error_type[$status_code];
    exit;
}

0

Bạn cũng có thể đặt thời gian thực thi tối đa trong .htaccesstệp của mình :

php_value max_execution_time 180

0

Để thực sự tăng giới hạn thời gian, trước tiên tôi muốn nhận được giá trị hiện tại. set_time_limitkhông phải lúc nào cũng tăng giới hạn thời gian. Nếu giá trị hiện tại (ví dụ từ php.inihoặc trước đây được đặt) cao hơn giá trị được sử dụng trong lệnh gọi hiện tại của set_time_limit, nó sẽ giảm giới hạn thời gian!

Vì vậy, những gì với một người trợ giúp nhỏ như thế này?

/**
 * @param int $seconds Time in seconds
 * @return bool
 */
function increase_time_limit(int $seconds): bool
{
    return set_time_limit(max(
        ini_get('max_execution_time'), $seconds
    ));
}

// somewhere else in your code
increase_time_limit(180);

Xem thêm: Nhận max_execution_time trong PHP script

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.