Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O script de usuário PHP foreach parece fazer o apache travar


Esse comportamento soa como bloqueio de sessão. A maneira padrão como as sessões PHP funcionam é bloquear a sessão (para evitar que dois processos gravem no objeto da sessão). Isso normalmente é bom para scripts PHP típicos de curta duração, mas pode mordê-lo quando você tem algo que é de longa duração.

Se seu aplicativo não estiver usando sessões, desative session.auto_start em php.ini ou .htaccess:http ://www.php.net/manual/en/session.configuration.php#ini.session.auto-start (Se você não o vê lá, ou ele já está desativado, mas você está usando algum tipo de framework, o framework pode estar iniciando a sessão para você; se estiver, é mais simples ir para a próxima solução do que tentar lutar o quadro.)

Se você estiver usando a sessão em algumas páginas, mas não neste processo de longa duração, a solução é fechar a sessão no início do seu script, com session_write_close() :
<?
set_time_limit(0);

require '../connect.php';
require '../includes/ses.php';

session_write_close();

$i = 1;
....

Novamente, o aviso do framework:se o framework está iniciando uma sessão para você, então coloque session_write_close(); depois de incluir os arquivos do framework, não antes! (Você mencionou que era o caso em seus comentários, e é por isso que eu coloquei após as linhas de exigência.)

Se o seu processo de longa duração precisar usar a sessão, mas somente leitura, o procedimento acima ainda funcionará. Consulte https://stackoverflow.com/a/14409902/841830 (Como essa resposta mostra, se você precisar gravar na sessão no final do processo de longa duração, isso também é possível.)

(P.S. Isso já foi respondido nos comentários, mas aceitei a oferta de Wrikken de postar como resposta. Sim, os rumores são verdadeiros:farei qualquer coisa por alguns representantes ...)