Sobrecarga em uploads de arquivos

Vou expor uma experiência e se alguém puder contribuir com soluções e ideias, agradeço.

Desenvolvi no SC6 um sistema de gerenciamento de projetos. Os usuários se cadastram e podem preencher diversos formulários com informações sobre o projeto. O sistema utiliza um controle de acesso baseado em grupos: Administrador, Operadores, Proponentes e Avaliadores. O sistema exibe um menu e opções de acordo com o grupo, etc.

O problema aconteceu justamente nos últimos dias em que as pessoas tinham para cadastrar o projeto e submetê-los à avaliação. Os proponentes tinham prazo e como todos os brasileiros deixam para última hora, o sistema nos 3 últimos dias do prazo simplesmente pirou.

O problema na verdade aconteceu em um dos formulários, o que receberia arquivos para uploads. Vou tentar explicar com detalhes como é o caminho até chegar no formulário em questão.

O usuário proponente acessa o sistema e abre um formulário de controle no qual ele seleciona o projeto desejado (cadastrado previamente em outro form) e clica no ok. Nesse momento é gravada uma variável global [id_projeto]. Após clicar no ok, um formulário com 6 abas é aberto e o último form, na última aba, é o formulário que o usuário pode cadastrar arquivos que é do tipo grid editável.

No formulário de anexos existe os seguintes campos:
{id_projeto} {nome_arquivo} {arquivo}

O campo {id_projeto} é oculto para o usuário, ele recebe a variável [id_projeto], gravada no formulário de controle anterior, para identificar no banco a que projeto o anexo pertence. O campo {nome_arquivo} usuário digita uma descrição para o arquivo e o campo {arquivo} armazena no banco o binário (blob) e no scriptcase ele é do tipo “Documento - nome de arquivo”, ou seja, além de gravar no banco ele é enviado para o servidor.

O sistema foi testado e tudo aparentemente funcionava, os registros de anexos eram gravados no banco com o respectivo id_projeto, os arquivos eram enviados para o servidor para um subdiretório que tinha como nome o próprio [id_projeto], tudo perfeito.

Mas com o aumento de usuários fazendo a mesma coisa nos últimos dias de prazo para submeter projetos, começaram os problemas.
Em alguns momentos, ao consultar o log do sistema, tinham mais de 50 usuários tentando realizar cadastros de arquivos no formulário, ou seja, tentando realizar uploads.

Primeiro problema, a maioria não conseguia. Segundo problema, quando aparentemente eles conseguiam, ao clicar no botão “inserir esta linha” no form do anexos (grid editável) o registro era gravado, mas o arquivo que aparecia pertencia a outro projeto, ou seja, outro [id_projeto].

Pesquisando descobri que existe uma opção no php.ini que limita a quantidade de uploads simultâneos permitidos, a opção max_file_uploads, que no meu servidor estava configurada para 20. Até aí tudo bem, ou seja, quando 20 estavam gravando no form ao mesmo tempo, a partir 21º não conseguia fazer uploads.

O que mais me causou preocupação foi o fato de que muitos gravavam mas não os arquivos enviados e sim os arquivos de outros projetos de outros usuários. Parecia que na hora que usuário clicava no botão para inserir o registro, em vez do sistema pegar o arquivo que ele enviou e o id_projeto do seu projeto, ele pevaga o arquivo de outro projeto. O id_projeto era gravado o correto, mas o arquivo ele pegava de outro projeto, de um outro usuário que estava fazendo o mesmo naquele momento e para esse último usuário, se ele tentasse realizar o download do arquivo mencionado, aparecia arquivo inexistente, pois o arquivo tinha sido enviado para outro projeto (os arquivos enviados para o servidor são enviados para subdiretórios que tem o id_projeto como nome).

Diante de tudo que verifiquei surge a dúvida:

Será que tudo foi apenas gerado pela configuração do parametro no php.ini max_file_uploads=20?

Existe algum parametro/configuração que também limita o número de variáveis globais gravadas ao mesmo tempo? porque no meu caso, por exemplo, se 50 usuários ao mesmo tempo acessarem o form em questão, serão geradas 50 variáveis [id_projeto]

Aguardo contribuições.

Grato desde já!

Sim aparentemente foi o limite para 20 uploads, tanto é que até o 20 foram de boa após o 21 como ele não conseguia
mais manipular o recebimento de arquivos começou a confusão.

Adicione também 1 campo DATETIME ao criar o ID do Projeto para ver depois fazer um LOG caso isso ocorra
novamente para analisar até que Sequência de DOWNLOAD ele conseguiu finalizar com sucesso.