Pergunta

Eu estou obtendo resultados variados com algum código PHP que eu escrevi para carregar arquivos para S3 em seguida, chamar uma instância EC2 para executar ações no arquivo enviado.

Aqui está a ordem que eu faço coisas -

1) uso classe S3 para colocar o arquivo

$result = s3 -> putObjectFile($uploadDIR, $bucket, $name, S3::ACL)

2) verifique $ result

if($result == "1") {
//file made it to s3

3) uso cURL para chamar EC2 instância e executar a ação em arquivo no S3

Eu estou usando isso com arquivos de vídeo, quando eu carregar um pequeno arquivo de vídeo funciona ok (por exemplo, 3MB), mas para vídeo maior (por exemplo 80MB) o doesnt código parecem ficar passo passado 1. O arquivo é movido para s3 ok mas meu palpite é que depois de um tempo PHP dá-se esperar para ver se $ result == 1 e assim não executar o resto do código.

Qual é a melhor maneira de lidar com algo assim? Como posso detectar que o arquivo foi carregado para S3 e depois executar algum código quando se tem?

Foi útil?

Solução

Para arquivos grandes o tempo que leva para fazer o upload deles provavelmente será maior do que o do script max_execution_time .

Você pode simplesmente usar a função set_time_limit (), mas ainda não é provavelmente uma boa idéia para páginas da web como o script seria apenas "travar" lá sem qualquer feedback do usuário (saída para o navegador).

Este seria provavelmente mais agradável:

  1. uso set_time_limit () para que o script não morrer.
  2. Guarde o nome do arquivo em um local temporário (DB, sessão, etc) e obter uma identificação única para ele
  3. Saída uma página com algum código AJAX para (repetidamente) consulta uma segunda roteiro para o status do arquivo (terminado, Falhou, UNDEFINED?)
  4. No roteiro original, espera para a ação ao fim e atualizar o banco de dados com o resultado.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top