Heroku上传和脚本执行限制

时间:2013-08-26 20:34:10

标签: php file-upload heroku nginx amazon-s3

我在Heroku上的NGINX(自定义buildpack)上使用PHP 5.4.12。上传1.5MB及更大尺寸的图片时遇到问题。这就是我正在做的事情:

  • PHP上传到Heroku(使用iFrame和Ajax)

  • 在Heroku上裁剪,调整大小并屏蔽照片(使用Imagick命令行,convertcomposite

  • 将编辑过的图像移动到另一台服务器(因为Heroku不会让你长期存储东西,除非它们被git推送到服务器)。现在我正在使用我的测试环境/服务器,但我相信我最终会把它移到S3上。

任何小文件都可以通过。任何大于几个megs的东西都会挂起(看起来像什么)上传时间。相同的脚本在不同的服务器上运行良好。

我在Heroku上通过php.ini文件进行了修改,重新编译了slug,重新启动并重置了dynos。 phpinfo()调用显示增加的上载限制,但脚本仍然以相同的方式失败。

我知道Heroku应该有30秒的脚本执行限制,但是,就我看来,PHP上传发生在脚本开始执行之前。

我原本试图从不同的服务器执行上传脚本,但是,因为我正在向上传脚本发出Ajax请求,所以我遇到了CORS(跨域资源共享)限制,我不喜欢CORS解决方法,因为一些浏览器不遵守。

任何想法如何允许用户上传大于1.5MB的图像,在图像上运行我的裁剪/屏蔽脚本然后将图像存储在某处(例如Amazon S3)?也许有人知道直接上传到亚马逊的方法,在EC2上编辑图像然后转到S3? 谢谢!

PS,寻找无Flash解决方案,因为我正在尝试移动设备友好。

1 个答案:

答案 0 :(得分:0)

在文件上传完成之前,您的脚本开始执行。仔细阅读有关限制和路由的Heroku文档,您将看到您的脚本读取POST主体的时间,并且路由器限制并限制您可以读取的最低速率。

Heroku建议将大型文件直接上传到S3:https://devcenter.heroku.com/articles/s3#file-uploads