Domanda

sto ottenendo risultati diversi con po 'di codice PHP che ho scritto per caricare i file su S3 quindi chiamare un'istanza EC2 per eseguire azioni sul file caricato.

Qui è l'ordine che faccio le cose -

1) utilizzare la classe S3 per mettere file

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

2) assegno di $ risultato

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

3) usare curl per chiamare istanza EC2 ed eseguire azioni su file in S3

Sto usando questo con i file video, quando a caricare un file video piccola funziona bene (ad esempio, 3 MB), ma per il video più grande (ad esempio 80 MB) il codice doesnt sembrano avere passaggio passato 1. Il file viene spostato a s3 ok ma la mia ipotesi è che dopo un po 'di PHP si arrende in attesa di vedere se $ result == 1 e quindi non esegue il resto del codice.

Qual è il modo migliore per gestire una cosa del genere? Come posso rilevare che il file è stato caricato a S3 e quindi eseguire del codice quando ha?

È stato utile?

Soluzione

Per file di grandi dimensioni il tempo necessario per caricarle sarà probabilmente superiore a quello dello script max_execution_time .

Si potrebbe utilizzare la funzione set_time_limit (), ma probabilmente non è ancora una buona idea per le pagine web come lo script sarebbe solo "appendere" lì senza alcun feedback degli utenti (output al browser).

Questo sarebbe probabilmente più bello:

  1. uso set_time_limit () in modo che il copione non muore.
  2. Memorizzare il nome del file in una posizione temporanea (DB, sessione, ecc) e ottenere un ID univoco per esso
  3. Output una pagina con qualche codice AJAX per (più volte) interrogare un secondo script per lo stato del file (FINITO, non è riuscito, non definito?)
  4. Nella sceneggiatura originale, attendere che l'azione per completare e aggiornare il DB con il risultato.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top