2010-12-03 42 views
2

J'écris un script PHP qui sera installé sur un serveur fonctionnant sous Amazon EC2. Il va recevoir les fichiers téléchargés, créer un enregistrement dans la base de données, renommer le fichier pour correspondre à l'ID de base de données, redimensionner le fichier, déplacer le fichier vers un nouvel emplacement sur le serveur et également PUT le fichier image sur Amazon S3.Comment devrais-je concevoir mon script de téléchargement et de redimensionnement de l'image PHP pour attraper et signaler les erreurs?

À chacune de ces étapes, il y a une possibilité d'échec qui entraînera l'interruption du script et si l'utilisateur télécharge de nombreux fichiers, le prochain fichier en attente ne sera pas téléchargé. Donc, à chacune de ces activités, je sais que j'ai besoin d'attraper des erreurs, de les enregistrer pour être traitées plus tard et de passer à l'image suivante, ou de rapporter qu'un problème est survenu. Je pense que je veux enregistrer les téléchargements échoués dans ma base de données afin que je puisse obtenir un rapport de quand les téléchargements ont échoué, et enregistrer le nom de fichier, le nom d'utilisateur du téléchargeur et toute autre information qui me permettra de contacter l'utilisateur ou Si c'est à l'étape du redimensionnement que l'erreur s'est produite, par exemple, redimensionnez l'image et placez-la sur Amazon S3.

Je ne suis pas un codeur PHP très expérimenté, les blocs Try Catch conviennent à toutes les situations ci-dessus. Dois-je utiliser Try Catch pour renommer()?

acclamations

Répondre

6

Je pense que la partie la plus importante de cette solution est le stockage probable que les détails concernant l'événement d'échec que vous pouvez réessayer plus tard, déboguer le problème, ou à tout le moins, contacter l'utilisateur si nécessaire . S3 est probablement idéal pour cela - je écrirais essentiellement une fonction de gestion des erreurs qui, lorsqu'elle est appelée, regroupe tous les détails autour de la demande (probablement toutes les variables HTTP POST, en-têtes de requête HTTP, etc) et l'image et les stocke sur S3 pour la récupération future. Puisque votre service fonctionne sur EC2, les chances de ne pas écrire sur S3 sont assez faibles, donc c'est probablement un fourre-tout efficace.

Sur les échecs d'écriture S3, je ferais un faible nombre de tentatives, mais pas exhaustif, car il est si improbable. Vous pouvez même boucler dans un mécanisme de journalisation SimpleDB si vous souhaitez enregistrer le fait que vous avez stocké sur S3, mais ce n'est pas strictement nécessaire puisque vous pouvez simplement lister les fichiers dans votre "seau d'erreur" pour voir si vous en avez les erreurs. En demandant chaque objet, vous pouvez également voir le problème. Après cela, vous voudrez probablement faire en sorte que le try/catch soit enroulé autour de vos autres points de défaillance et en cas d'échec, appelez votre fonction store-on-S3 et passez au téléchargement suivant. Si votre service prend son envol, vous pouvez encore améliorer cette situation en intégrant le bit de gestion des erreurs dans votre approche inévitable du stockage et de la file d'attente pour le téléchargement et le traitement de ces téléchargements. Cette approche impliquera probablement de toujours stocker le fichier téléchargé sur S3, puis de mettre en attente les demandes de traitement sur SQS, afin que votre fonction de gestion des erreurs puisse simplement référencer le fichier S3 qui a déjà été stocké, plutôt que d'être regroupé et stocké.

Espérons que ça aide!

+0

Bonne réponse - merci beaucoup pour cela, je vais regarder la mise en œuvre de vos suggestions. Paix – undefined