3

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

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

  • 在 Heroku 上裁剪、调整大小和遮罩照片(使用 Imagick 命令行convertcomposite

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

任何小文件都可以通过。任何大于几兆的东西都会在(看起来像)上传期间挂断。相同的脚本在不同的服务器上工作得很好。

我通过php.iniHeroku 上的文件进行了修改,重新编译了 slug,重新启动并重置了测功机。一个 phpinfo() 调用显示了增加的上传限制,但是脚本仍然以同样的方式失败。

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

我最初试图从不同的服务器执行上传脚本,但是,由于我正在向上传脚本发出 Ajax 请求,我遇到了 CORS(跨源资源共享)限制,并且我不喜欢 CORS 解决方法,因为有些浏览器不服从。

有什么想法可以让用户上传大于 1.5MB 的图像,在图像上运行我的裁剪/遮罩脚本,然后将图像存储在某个地方(例如 Amazon S3)?也许有人知道直接上传到亚马逊的方法,在 EC2 上编辑图像,然后转移到 S3?谢谢!

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

4

1 回答 1

0

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

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

于 2013-08-26T23:00:14.990 回答