2009-03-31 7 views
1

Je reçois des résultats variés avec du code PHP que j'ai écrit pour télécharger des fichiers sur S3 puis appeler une instance EC2 pour effectuer des actions sur le fichier téléchargé.Comment séquencer des événements en PHP pour télécharger des fichiers sur Amazon S3

Voici l'ordre que je fais les choses -

1) utilisent la classe S3 pour placer le fichier

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

2) chèque $ result

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

3) CURL appeler EC2 instance et effectuer une action sur le fichier dans S3

Je l'utilise avec des fichiers vidéo, lorsque je télécharge un petit vi Deo fichier fonctionne bien (par exemple 3MB) mais pour une vidéo plus grande (par exemple 80MB) le code ne semble pas passer l'étape 1. Le fichier est déplacé à s3 ok mais je suppose qu'après un moment PHP abandonne attendre de voir si $ résultat == 1 et n'exécute donc pas le reste du code.

Quelle est la meilleure façon de gérer quelque chose comme ça? Comment puis-je détecter que le fichier a été téléchargé sur S3 et ensuite exécuter du code quand c'est le cas?

Répondre

4

Pour les fichiers volumineux, le temps de téléchargement est probablement supérieur à celui du script max_execution_time. Vous pouvez simplement utiliser la fonction set_time_limit(), mais ce n'est probablement pas une bonne idée pour les pages web, car le script "se bloque" là sans aucun retour d'utilisateur (sortie vers le navigateur).

Ce serait probablement plus agréable:

  1. utilisation set_time_limit() de sorte que le script ne meurt pas. Stocker le nom de fichier dans un emplacement temporaire (DB, session, etc) et obtenir un ID unique
  2. Sortie d'une page avec du code AJAX pour interroger (de manière répétée) un deuxième script pour l'état du fichier (FINISHED, ECHEC, NON DEFINI?)
  3. Sur le script d'origine, attendez que l'action se termine et mettez à jour le DB avec le résultat.
Questions connexes