代码之家  ›  专栏  ›  技术社区  ›  niggles

在APACHE中动态记录服务文件

  •  1
  • niggles  · 技术社区  · 16 年前

    我正在通过PHP动态提供Zip和PDF文件,使用以下输出:

    header('Content-Disposition: attachment; filename="'.$project->name .'.zip"');
    echo($zipfile->zl_pack());
    

    不过,我在APACHE日志中找不到这些下载的任何参考。是否由于是动态的而未记录?

    干杯 小气鬼

    4 回复  |  直到 16 年前
        1
  •  0
  •   Ignacio Vazquez-Abrams    16 年前

    对的httpd不会查看传出头以进行日志记录。 error_log() 将向httpd的错误日志发送消息,但无法在访问日志中添加内容。

        2
  •  0
  •   Quentin    16 年前

    我相信国防部_ perl would allow you to add custom logging ,我不知道mod_php是否提供了类似的功能。

        3
  •  0
  •   ahans    16 年前

    作为一种解决方法,您可以使用mod_rewrite来记录*.zip文件,并且仍然通过PHP提供该文件,而不实际将其写入文件系统,不过客户端必须发送两个请求。

    header('Location: '.$project->name .'.zip');

    2) 这将导致第二个请求。由于请求的文件还不存在,您可以使用mod_rewrite将请求更改为一个*.zip文件,使之与从会话中读取参数并生成文件的PHP脚本相同或其他PHP脚本,就像您现在所做的那样。如果您使用相同的PHP脚本,还可以让mod_rewrite向请求中添加一些参数,如“?action=produceFile”,然后在脚本中测试该参数。

    这样,您就可以在Apache日志中有两个不错的条目,而无需实际保存文件(以后可能会删除)。

        4
  •  0
  •   niggles    16 年前

    问题的一部分是,我们想强制进行“另存为”对话,因为许多用户对文件保存的位置感到困惑。所以这就是我为什么去的原因

    Content-Disposition : attachment
    

    仍然调用对话的更好方法是将其添加到.htaccess

    <Files *.zip>
    ForceType application/octet-stream
    Header set Content-Disposition attachment
    </Files>
    

    干杯

    推荐文章