【问题标题】:Serving Files in Zend Framework MVC在 Zend Framework MVC 中提供文件
【发布时间】:2009-08-07 07:39:43
【问题描述】:

从 Zend Framework MVC 提供文件的最佳实践是什么?这些文件必须从 MVC 提供,因为它们受到保护。

我知道您可以读取文件并将其放入 Response 对象中,但这似乎是一种不好的做法,因为您会将整个文件读入内存然后提供它。现在我通常这样做:

header('Content-type: image/jpeg');
fpassthru(fopen($path, 'rb'));
exit;

但这似乎也不正确,因为我要停止执行脚本。有什么建议吗?

【问题讨论】:

    标签: model-view-controller zend-framework


    【解决方案1】:

    我认为 exit(); 没有任何问题。您需要注意的是您可能拥有的任何输出缓冲层(gzip 压缩等)。大文件可能会很快炸毁这些缓冲区,因此您需要关闭它们并可能使用 fopen/fread 循环“分块”您的输出。

    【讨论】:

      【解决方案2】:

      我建议构建一个超级简单的脚本来检索基于票据系统的文件,例如在 CMS 中生成票据到 DB - 文件名、唯一哈希,然后重定向到超级简单的文件检索脚本 (file.php?哈希=asd52ad3as1g5)。它将从查询中获取哈希,并基于它获取真实的文件名并将其推送到您使用 fpassthru 编写的输出。哈希必须是唯一的且难以猜测...

      【讨论】:

      • 但是如果你需要完成你的脚本,我认为 exit() 没有问题,它也用于内部 ZF 重定向;)
      【解决方案3】:

      您可以尝试使用 X-Sendfile 标头。它受 lighttpd 和较新版本的 apache 支持。基本上,网络服务器将用您指定的文件替换脚本的输出。缺点是它特定于网络服务器的配置,因此您可能在不支持它的主机上。

      【讨论】:

      • 这很好,但我们有很多问题,服务器配置在这里不正常,我不想依赖它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      相关资源
      最近更新 更多