Por que session_start causa um tempo limite quando um script chama outro script usando curl
Pergunta
Tenho dois scripts PHP, ambos usando a mesma sessão chamando session_name('MySessID')
.
Quando o primeiro script chama o segundo script usando curl, o segundo script trava quando session_start()
é chamado.
Por que isso aconteceu?
Solução 2
Não entendo totalmente por que isso acontece, mas eu resolvi.
este incomodar descreve o mesmo problema que estou tendo. Eu tenho um script postando para outro script, ambos usando a mesma sessão, que aparentemente paralisou o PHP.
Então, antes de fazer todo o script de pós -curl, eu chamo o session_commit
Função, encerrando a sessão de scripts de chamada e permitindo o script chamado para reiniciar a sessão.
Whack ...
Outras dicas
Do manual do php
http://php.net/manual/en/function.session-write-close.php
Os dados da sessão geralmente são armazenados após o término do seu script, sem a necessidade de chamar session_write_close(), mas como os dados da sessão são bloqueados para evitar gravações simultâneas, apenas um script pode operar em uma sessão a qualquer momento.Ao usar conjuntos de quadros junto com sessões, você verá os quadros sendo carregados um por um devido a esse bloqueio.Você pode reduzir o tempo necessário para carregar todos os quadros encerrando a sessão assim que todas as alterações nas variáveis da sessão forem feitas.
Portanto, você não pode ter 2 scripts usando a mesma sessão ao mesmo tempo.
Eu fui mordido por isso também.Consertei graças às informações fornecidas no stackoverflow.
Eu tinha duas páginas, ambas tinham "session_start()" no topo e a primeira chamava a segunda com curl para que eu pudesse POST variáveis para o segundo script após a validação.O servidor web estava travado até que eu adicionei "session_write_close ()".
Exemplo de código a seguir:
// IMPORTANT (OR ELSE INFINITE LOOP) - close current sessions or the next page will wait FOREVER for a write lock.
session_write_close();
// We can't use GET because we can't display the password in the URL.
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$url = "http://$host$uri/formPage2.php?";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); //append URL
curl_setopt($ch, CURLOPT_POST,TRUE);//We are using method POST
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_REQUEST, '', "&"));//append parameters
curl_exec($ch); // results will be outputted to the browser directly
curl_close($ch);
exit();