Як збільшити час очікування виконання у php?


102

Як збільшити час очікування транзакції? Я хочу завантажити відео, але відео великого розміру не завантажено?

Це видає помилку The process *** exceeded the timeout of 60 seconds.


1
Визначте "час очікування транзакції". Що де не працює?
Pekka

1
чому, на вашу думку, очікується час очікування "транзакції"?
Ваш здоровий глузд

короткі відеозаписи успішно завантажені. але довге відео не завантажено, я думаю, що час очікування закінчився.
Aamir

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

1
краще розділити файл перед завантаженням. Існує багато програм, якими можна скористатися. Я віддаю перевагу плюплоуду.
bksi

Відповіді:


128

Вам потрібно змінити деякі налаштування у вашому php.ini:

upload_max_filesize = 2M 
;or whatever size you want

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

Якщо ваш PHP.ini знаходиться, це залежить від вашого оточення. Більше інформації: http://php.net/manual/en/ini.list.php


вибачте, я не уявляю, що ви маєте на увазі під цим :(
Ганнес,

@Aamir, Вам потрібно мати дозвіл веб-хостингу, щоб змінити конфігурацію веб-сервера. Часто вони не дозволяють вам міняти подібні речі.
hellozimi

чи можу я змінити upload_max_filesize та max_execution_time у файлі htaccess?
Aamir

2
@Col, я не згоден, він хоче внести зміни на льоту, а не в цілому додатку, тому запитує, як він може це зробити. І навіть якби він запитав, як він може просто змінити деякі речі у php.ini, це може бути питання новачка, але все одно законне питання.
Hannes

1
@IulianOnofrei добре, просто відчуйте необхідність зазначити це: D, але, можливо, якщо ви не знаєте, що все ще добре це шукати ... "Ті, хто не може вчитися з історії, приречені це повторити" і все таке ...
Ганнес,

56

Ви повинні мати можливість робити це під час виконання, також використовуючи

set_time_limit(100);

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

або у вашому vhost-config

php_admin_value max_execution_time 10000

Наявність глобального обмеження часу виконання, яке є НИЗКИМ, в основному є гарною ідеєю з міркувань продуктивності не надто надійних додатків. Тож ви можете дозволити лише тим сценаріям працювати довше, ніж це абсолютно потрібно.

ps: Не забувайте про post_max_size і upload_max_filesize (як перша відповідь уже сказана)


Якщо ви встановите його, тоді сон буде ігноруватися
Snake Eyes

20

Щоб доповнити відповідь Ганнеса.

Вам потрібно змінити деякі налаштування у вашому php.ini:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

Якщо хтось хоче ввести необмежену кількість (я не знаю чому, але якщо ви хочете), ви можете встановити час на 0:

Вам потрібно змінити деякі налаштування у вашому php.ini:

upload_max_filesize = 0 

max_execution_time = 0

І якщо ви не знаєте, де ваш php.ini. Ви можете створити файл "name.php" на своєму сервері і поставити:

<?php phpinfo(); ?>

І на вашому веб-сайті ви можете побачити конфігурацію вашого php.ini, і там позначено, де він знаходиться.

Редагувати 9 січня 2015 року:

Якщо ви не можете отримати доступ до свого php.ini, у вас є ще два варіанти.

Ви можете встановити цей рядок безпосередньо у своєму файлі "name.php", але я не знаходжу для upload_max_filesize для цього параметра:

set_time_limit(0);

Або в ".htaccess"

php_value upload_max_filesize 0
php_value max_execution_time 0

9

якщо те, що вам потрібно зробити, стосується лише 1 або 2 сторінок, я пропоную використовувати set_time_limit, щоб це не вплинуло на всю програму.

set_time_limit(some_values);

але, звичайно, ці 2 значення (post_max_size & upload_max_filesize) підлягають дослідженню.

Ви можете встановити його за допомогою функції ini_set

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

або безпосередньо у файлі php.ini, як відповідь вище від Hannes, або навіть встановити його в .htaccess, як показано нижче

php_value upload_max_filesize 2M
php_value post_max_size 20M

5

Як доповнення до вищезазначених відповідей ви можете використовувати set_time_limit()функцію:

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

передача 0в якості аргументу змусить ваш сценарій працювати без обмеження часу.


set_time_limit () не має нічого спільного із завантаженням файлів
Ваш здоровий глузд

1
Це недостатньо точно. Полковник осколок. Хоча в середовищах Unix максимальний час виконання порівнюється із сукупним процесорним часом, що використовується php-потоком, у системах Windows використовується абсолютний час. Завантаження переважно відбувається в режимі очікування (IO-Wait). Але, як ви бачите, завантаження можуть зупинятися, коли це займає занадто багато часу.
Крістоф Штрасен

4

Якщо ви випадково використовуєте сервер Microsoft IIS , на додаток до параметрів php.ini , згаданих іншими, вам може знадобитися збільшити налаштування часу очікування виконання програми PHP FastCGI в диспетчері серверів IIS:

Крок 1) Відкрийте диспетчер серверів IIS (зазвичай під диспетчером серверів у меню «Пуск», потім « Інструменти / Менеджер інформаційних служб Інтернету» ).

Крок 2) Клацніть на основному підключенні (не характерному для певного домену).

Крок 3) У розділі IIS знайдіть налаштування FastCGI (показано нижче).

введіть тут опис зображення

Крок 4) У цьому, клацніть правою кнопкою миші додаток PHP і виберіть Edit ... .

Крок 5) Перевірте тайм-аути (показано нижче).

введіть тут опис зображення

У моєму випадку за замовчуванням час очікування тут був 70 і 90 секунд; перший з яких викликав 500 внутрішніх помилок сервера на PHP-скриптах, що зайняло більше 70 секунд.


3

У вас була помилка: ini_set ('max_input_time', '200M') - набір значень повинен бути int, наприклад ini_set ('max_input_time', '200')


2

Я знаю, що ви спеціально запитуєте про тайм-аут PHP, але те, що, схоже, ніхто інший не згадував, - це те, що на веб-сервері може бути таймаут, і це може виглядати дуже схоже на тайм-аут PHP.

Отже, якщо ви пробували:

  1. Збільшення часу очікування у php.ini, додавши рядок: max_execution_time = {кількість секунд, тобто 60 на одну хвилину}
  2. Збільшення часу очікування в самому сценарії, додавши: ini_set ('max_execution_time', '{кількість секунд, тобто 60 на одну хвилину}');

І ви перевірили за допомогою функції phpinfo (), що max_execution_time дійсно збільшено, тоді ви можете спробувати додати це до .htaccess, що переконається, що сам Apache не закінчує тайм-аут:

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

Більше інформації тут: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-despite-ini-set/


2

Спочатку перевірте php.iniшлях до файлу за допомогою phpinfo(); а потім змінив PHP.INIпараметри:

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

перезапустив Apache

set_time_limit(0); // safe_mode is off

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

Примітка : Ви також можете використовувати команду для пошуку php.iniв Linux

locate `php.ini`

1

Якщо ви не можете редагувати php.ini (наприклад, на вашому сервері), ви можете спробувати змінити параметри php.ini всередині вашого коду php. Спробуйте:

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

Якщо це не спрацює, спробуйте також встановити 'set_time_limit' таким же чином, крім того, я б сказав, що ваш єдиний варіант - зв'язатись із хостом. Ці налаштування не можна змінювати в безпечному режимі.


3
Ханнес отримав це за хвилину до моєї публікації, і правильно зазначає, що set_time_limit () не слід встановлювати ini_set, як зазначено у цій відповіді, а вводячи секунди в дужки. Проголосував Ханнес.
Джон

1

Перевірте, чи перебуваєте ви в безпечному режимі - якщо ні - встановіть обмеження часу (Місцеве значення) на те, що хочете:

if(!ini_get('safe_mode')){

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

    phpinfo();// see 'max_execution_time'
}

* Ви не можете встановити обмеження часу таким чином, якщо безпечний режим увімкнено.


1

необов’язково: якщо ви встановили конфігурацію про php.ini, але все одно не можете завантажити

-це функція php для перевірки коду помилки

$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

Ви також можете встановити максимальний час виконання у своєму .htaccessфайлі:

php_value max_execution_time 180

0

Щоб реально збільшити обмеження часу, я волію спочатку отримати поточне значення. set_time_limitне завжди збільшує обмеження часу. Якщо поточне значення (наприклад, від php.iniабо раніше встановленого) перевищує значення, яке використовується у поточному виклику set_time_limit, це зменшить обмеження часу!

То що з таким маленьким помічником?

/**
 * @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);

Дивіться також: Отримати max_execution_time у PHP-скрипті

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.