Estou em um servidor compartilhado (Siteground) e, como meu script PHP do WordPress leva mais de 30 segundos, ele retorna um tempo limite de 504 Gateway.
Minha consulta será executada e concluída se não encontrar mais um erro?
Editar: perguntei por que recebi esse erro na minha equipe de hospedagem. Aqui, o especialista em hospedagem de sites explicou o problema da seguinte maneira:
Usamos o Apache + Nginx em todos os nossos servidores. O Apache é usado para o serviço web principal, enquanto o Nginx é usado como proxy reverso e distribui o cache. Quando a resposta não pode ser veiculada no cache (geralmente, isso se refere ao conteúdo dinâmico), uma solicitação do Nginx é feita para o Apache. Quando o Apache está processando a solicitação, a encaminha para o seu site e de acordo com a lógica do PHP, as consultas MySQL podem ser feitas ou outros dados obtidos. Quando esse processo demorar muito e o Apache não retornar a resposta em tempo hábil ao Nginx, você verá esse erro. Em resumo, o Apache não pode atender à solicitação, pois o aplicativo concluiu o processo dentro do tempo permitido. Isso também significa que o processo iniciado provavelmente não foi concluído completamente e alguns dados / ações podem ter sido salvos / executados.
O especialista diz que "initiated process most probably not completed fully"
,
Mais detalhes no meu cenário: Meu script adiciona produtos de woocommerce com variações usando o wp_insert_post
método ao meu site wordpress. Após a adição dos produtos, ele exibe as imagens dos produtos adicionados recentemente.
Quando adiciono 1 produto (40 variações), ele conclui e exibe a imagem do produto. Quando adiciono 6 produtos (240 variações), recebo um erro diretamente no meu navegador.
Portanto, para testar ainda mais esse problema, modifiquei meu código e o reescrevi usando ajax e adicionei uma barra de processo como o sistema. (Que incrementa um número para cada variação).
Depois de executar o código de 1 produto (com 40 variações), o número do processo aumenta para 40 e ele exibe a imagem do produto.
Quando executo meu código para 6 produtos, o número do processo aumenta para 240, mas ele não exibe nada e, quando verifico, recebe um erro 504. ( jQuery.Ajax
seção de erro de função)
Portanto, isso me faz pensar que a consulta é executada até o tempo limite, mas ainda não consigo ter certeza e procurando detalhes por trás do erro de tempo limite do gateway 504, pois não há uma boa documentação sobre isso.
Respostas:
O script não para de executar até que eles atinjam o tempo limite do php.
O erro 504 é gerado no próprio gateway / proxy, não é proveniente do processo php.
É porque isso, se você possui um Apache com Apache-mod-php, nunca receberá esse erro, porque não há um proxy.
Estendendo a explicação, pense da seguinte maneira:
Você tem um processo PHP. O processo PHP pode ser um PHP-FPM, PHP-CGI ou Apache-MOD-PHP. Nesse processo, você tem um tempo limite (configurado no php.ini ou com um ini_set).
O proxy PHP fornece uma resposta no tempo permitido (também conhecido como: se você tiver um set_time_limit (600), seu processo PHP poderá estar em execução por até 10 minutos).
Sem relação com essa frase, você pode ter outro processo aguardando a resposta: É o caso de um apache (configurado para entrar em contato com o php por cgi ou fpm), um nginx, um lighthttpd e outros. Não é o caso de um apache configurado pelo apache-mod-php. Este segundo processo, possui um novo tempo limite (proxy_timeout), configurado na configuração do aplicativo vhost / general server. Esse é o tempo que o programa aguardará uma resposta do mecanismo de processamento PHP.
A última frase pode ser repetida em cada proxy / gateway.
Pense neste cenário:
haproxy (Timeout 1) -> Nginx (Frontend / cache) (Timeout 2) -> Apache (Timeout 3) -> PHP-FPM (PHP Timeout / set_time_limit).
E um cenário muito simples:
Apache (com apache-mod-php) (PHP Timeout / set_time_limit).
Cada aparência de tempo limite (exceto o próprio PHP Timeout) é uma origem provável de um erro de tempo limite do gateway HTTP 504.
fonte
Meu entendimento é que o script continua em execução, mas para de relatar dados para o cliente. (Não que eu tenha o conhecimento necessário para explicar isso.) Aqui está um artigo que pode ajudar:
Como corrigir um erro de tempo limite do gateway 504 no WordPress
fonte