Como aumentar o tempo limite de execução no php?

101

Como aumentar o tempo limite da transação? Quero fazer upload de vídeos, mas os vídeos em tamanho grande não foram enviados?

Lança erro The process *** exceeded the timeout of 60 seconds.

Aamir
fonte
1
Defina "tempo limite da transação". O que não funciona onde?
Pekka
1
por que você acha que é o tempo limite de "transação"?
Seu senso comum
vídeos curtos carregados com sucesso. mas o vídeo longo não foi enviado, acho que o tempo limite.
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
é melhor dividir o arquivo antes de carregá-lo. Existem muitos aplicativos que podem ser usados. Eu prefiro plupload.
bksi de

Respostas:

127

Você precisa alterar algumas configurações em seu 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

A localização do seu PHP.ini depende do seu ambiente, mais informações: http://php.net/manual/en/ini.list.php

Hannes
fonte
desculpe, não tenho ideia do que você quer dizer com isso :(
Hannes
@Aamir, você precisa ter permissão do seu host para alterar a configuração do seu servidor da web. Freqüentemente, eles não permitem que você mude coisas assim.
hellozimi
posso alterar upload_max_filesize e max_execution_time no arquivo htaccess?
Aamir
2
@Col, eu discordo, ele quer fazer as alterações na hora e não em todo o aplicativo, então ele pergunta como ele pode fazer isso. E mesmo se ele perguntasse como ele pode simplesmente mudar algumas coisas no php.ini, pode ser uma pergunta de novato, mas uma pergunta legítima da mesma forma.
Hannes
1
@IulianOnofrei tudo bem, só senti a necessidade de apontar isso: D, mas talvez se você não sabe o que é ainda é bom procurar… "Quem não pode aprender com a história está condenado a repetir" e tudo mais …
Hannes
56

Você deve ser capaz de fazer durante a execução também usando

set_time_limit(100);

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

ou em seu vhost-config

php_admin_value max_execution_time 10000

Ter um limite de tempo de execução global BAIXO é principalmente uma boa ideia por motivos de desempenho em aplicativos não tão confiáveis. Portanto, você pode permitir que apenas esses scripts sejam executados por mais tempo do que absolutamente necessário.

ps: Não se esqueça de post_max_size e upload_max_filesize (como a primeira resposta disse allready)

Christoph Strasen
fonte
Se você configurá-lo, o sono será ignorado
Snake Eyes
20

Para completar a resposta de Hannes.

Você precisa alterar algumas configurações em seu php.ini:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

Se alguém quiser colocar em ilimitado (não sei por que, mas se quiser), você pode definir o tempo para 0:

Você precisa alterar algumas configurações em seu php.ini:

upload_max_filesize = 0 

max_execution_time = 0

E se você não sabe onde está o seu php.ini. Você pode fazer um arquivo "name.php" no seu servidor e colocar:

<?php phpinfo(); ?>

E no seu site, você pode ver a configuração do seu php.ini e está marcado onde está.

Editar em 9 de janeiro de 2015:

Se você não consegue acessar seu php.ini, você tem mais duas opções.

Você pode definir esta linha diretamente no seu arquivo "name.php", mas não encontro upload_max_filesize para esta opção:

set_time_limit(0);

Ou em ".htaccess"

php_value upload_max_filesize 0
php_value max_execution_time 0
Lynxi
fonte
9

se o que você precisa fazer é específico apenas para 1 ou 2 páginas, sugiro usar set_time_limit para que não afete todo o aplicativo.

set_time_limit(some_values);

mas é claro que esses 2 valores (post_max_size & upload_max_filesize) estão sujeitos a investigação.

você pode configurá-lo através da função ini_set

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

ou diretamente no arquivo php.ini como a resposta acima de Hannes, ou mesmo configurá-lo em .htaccess como abaixo

php_value upload_max_filesize 2M
php_value post_max_size 20M
Komang
fonte
5

Além das respostas acima, você pode usar a set_time_limit()função:

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

passar 0como um argumento fará com que seu script seja executado sem limite de tempo.

Tomasz Kowalczyk
fonte
set_time_limit () não tem nada a ver com uploads de arquivos
Seu senso comum
1
Isso não é preciso o suficiente, coronel Shrapnel. Enquanto em ambientes Unix o tempo máximo de execução é comparado ao tempo de CPU cumulativo usado pelo php-thread, em sistemas Windows o tempo absoluto é usado. O upload é geralmente "tempo ocioso" (IO-Wait). Mas, como você vê, os uploads podem ser interrompidos quando demoram muito.
Christoph Strasen
4

Se você estiver usando o servidor Microsoft IIS , além das configurações de php.ini mencionadas por outros, pode ser necessário aumentar as configurações de tempo limite de execução para o aplicativo PHP FastCGI no Gerenciador de servidor IIS:

Etapa 1) Abra o Gerenciador do Servidor IIS (geralmente em Gerenciador do Servidor no Menu Iniciar e, em seguida, Gerenciador de Ferramentas / Serviços de Informações da Internet (IIS) ).

Etapa 2) Clique na conexão principal (não específica para nenhum domínio em particular).

Etapa 3) Na seção IIS , encontre configurações FastCGI (mostrado abaixo).

insira a descrição da imagem aqui

Etapa 4) Aí, clique direito do mouse no aplicativo PHP e selecione Editar ... .

Etapa 5) Verifique os tempos limite (mostrados abaixo).

insira a descrição da imagem aqui

No meu caso, os tempos limite padrão aqui eram 70 e 90 segundos; o primeiro estava causando um 500 Erro Interno do Servidor em scripts PHP que demoravam mais de 70 segundos.

Michael
fonte
3

Você cometeu um erro de digitação: ini_set ('max_input_time', '200M') - o conjunto de valores precisa ser um int, como ini_set ('max_input_time', '200')

tanatoide
fonte
2

Eu sei que você está perguntando especificamente sobre o tempo limite do PHP, mas o que ninguém mais parece ter mencionado é que também pode haver um tempo limite no servidor da Web e pode ser muito semelhante ao tempo limite do PHP.

Então, se você tentou:

  1. Aumentando o tempo limite no php.ini adicionando uma linha: max_execution_time = {número de segundos, ou seja, 60 por um minuto}
  2. Aumentando o tempo limite em seu próprio script adicionando: ini_set ('max_execution_time', '{número de segundos, ou seja, 60 por um minuto}');

E você verificou com a função phpinfo () que max_execution_time foi realmente aumentado, então você pode querer tentar adicionar isso a .htaccess para garantir que o Apache não expire:

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

Mais informações aqui: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-despite-ini-set/

Paul Feakins
fonte
2

Primeiro verifique o php.inicaminho do arquivo phpinfo(); e, em seguida, alterou os PHP.INIparâmetros:

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

Apache reiniciado

set_time_limit(0); // safe_mode is off

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

Nota : você também pode usar o comando para localizar php.inino Linux

locate `php.ini`
Ashfaq Muhammad
fonte
1

Se você não pode editar o php.ini (em seu servidor, por exemplo), você pode tentar alterar os parâmetros do php.ini de dentro do seu código php. Experimentar:

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

Se isso não funcionar, tente definir 'set_time_limit' da mesma forma, além disso, eu diria que sua única opção é entrar em contato com seu host. Essas configurações não podem ser modificadas no modo de segurança.

John
fonte
3
Hannes entendeu isso um minuto antes de eu postar, e aponta corretamente que set_time_limit () não deve ser definido por ini_set, como declarado nesta resposta, mas colocando os segundos entre colchetes. Ele votou hannes up.
John
1

Teste se você está no modo de segurança - se não estiver - defina o limite de tempo (valor local) para o que você deseja:

if(!ini_get('safe_mode')){

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

    phpinfo();// see 'max_execution_time'
}

* Você não pode definir o limite de tempo desta forma se o modo de segurança estiver ativado.

TV-C-15
fonte
1

opcional: se você definir a configuração sobre php.ini, mas ainda não conseguir fazer upload

- esta é uma função php para verificar o código de erro

$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;
}
Ruthe
fonte
0

Você também pode definir um tempo máximo de execução em seu .htaccessarquivo:

php_value max_execution_time 180
Discernimento
fonte
0

Para realmente aumentar o limite de tempo, prefiro primeiro obter o valor atual. set_time_limitnem sempre aumenta o limite de tempo. Se o valor atual (por exemplo, de php.iniou anteriormente definido) for maior do que o valor usado na chamada atual de set_time_limit, ele diminuirá o limite de tempo!

Então, o que há com um pequeno ajudante como este?

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

Veja também: Obtenha max_execution_time no script PHP

algoritmo
fonte