我应该如何设计我的PHP上传和调整图像大小脚本,以最好地捕获和报告错误

我应该如何设计我的PHP上传和调整图像大小脚本,以最好地捕获和报告错误,php,upload,try-catch,Php,Upload,Try Catch,我正在编写一个PHP脚本,它将位于运行在AmazonEC2中的服务器上。它将接收上传的文件,在数据库中创建记录,重命名文件以匹配数据库id,调整文件大小,将文件移动到服务器上的新位置,并将图像文件放在AmazonS3上 在这些阶段中的每一个阶段都可能出现故障,这将导致脚本中断,如果用户正在上载许多文件,则下一个等待的文件将不会上载 因此,在这些活动中,我知道我需要捕捉任何错误,记录它们以便以后处理,然后转到下一个图像,或者报告出现了问题 我想我想在我的数据库中记录失败的上传,这样我就可以得到上传

我正在编写一个PHP脚本,它将位于运行在AmazonEC2中的服务器上。它将接收上传的文件,在数据库中创建记录,重命名文件以匹配数据库id,调整文件大小,将文件移动到服务器上的新位置,并将图像文件放在AmazonS3上

在这些阶段中的每一个阶段都可能出现故障,这将导致脚本中断,如果用户正在上载许多文件,则下一个等待的文件将不会上载

因此,在这些活动中,我知道我需要捕捉任何错误,记录它们以便以后处理,然后转到下一个图像,或者报告出现了问题

我想我想在我的数据库中记录失败的上传,这样我就可以得到上传失败时的报告,并记录文件名、上传者的用户名和任何其他信息,这些信息将允许我联系用户,或者如果错误发生在调整大小阶段,例如,调整图像大小并将其放在Amazon S3上

我不是一个经验丰富的PHP程序员,Try-Catch块适合所有上述情况。我是否应该对rename()使用Try-Catch


干杯

因此我认为此解决方案最重要的部分可能是存储有关故障事件的详细信息,以便您可以稍后重试、调试问题,或者至少在必要时与用户联系

S3可能是实现这一点的理想之选——我基本上会编写一个错误处理函数,当调用该函数时,它会将请求(可能是所有HTTP POST变量、HTTP请求头等)和映像的所有细节捆绑起来,并将它们存储在S3上以备将来检索。由于您的服务是在EC2上运行的,因此无法写入S3的可能性非常低,因此这可能是一个有效的综合解决方案

对于S3写入失败,我会进行少量重试,但不会穷尽,因为这不太可能。如果您想记录存储在S3上的事实,甚至可以循环使用SimpleDB日志记录机制,但这并不是绝对必要的,因为您可以只列出“错误桶”中的文件来查看是否有任何错误。通过请求每个对象,您还可能看到问题所在

完成后,您可能只想将try/catch包装在其他故障点和故障事件上,调用store-on-S3函数并继续下一次上载

如果您的服务起飞,您可以通过将错误处理位作为不可避免的存储和队列方法的一部分来上传和处理这些上传,从而进一步改进这一点。这种方法可能涉及始终将上传的文件存储在S3上,然后在SQS上对处理请求进行排队,因此您的错误处理函数可以简单地引用已经存储的S3文件,而不必捆绑和存储


希望有帮助

回答得很好-非常感谢,我将考虑实施您的建议。和平