Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在APACHE中动态记录服务文件_Php_Apache_Zip - Fatal编程技术网

Php 在APACHE中动态记录服务文件

Php 在APACHE中动态记录服务文件,php,apache,zip,Php,Apache,Zip,我正在通过PHP动态提供Zip和PDF文件,使用以下输出: header('Content-Disposition: attachment; filename="'.$project->name .'.zip"'); echo($zipfile->zl_pack()); 不过,我在APACHE日志中找不到这些下载的任何参考。是否由于是动态的而未记录 我真的需要将文件写入Web服务器,然后将结果上传到日志中吗?还是我遗漏了什么 干杯, 小摩擦是正确的。httpd不会查看传出头以进行日

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

header('Content-Disposition: attachment; filename="'.$project->name .'.zip"');
echo($zipfile->zl_pack());
不过,我在APACHE日志中找不到这些下载的任何参考。是否由于是动态的而未记录

我真的需要将文件写入Web服务器,然后将结果上传到日志中吗?还是我遗漏了什么

干杯,
小摩擦是正确的。httpd不会查看传出头以进行日志记录
error_log()
将向httpd的错误日志发送一条消息,但无法在访问日志中添加内容。

应记录对生成该头的PHP程序的请求。内容处置标头中提到的文件名将不会被删除


我相信mod_,我不知道mod_php是否提供了类似的功能。

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

1) 更改当前脚本,使其不生成文件,而是将创建文件所需的参数放入会话中;您将放置
标题('Location:'.$project->name.'.zip'),而不是当前标题和文件内容

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


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

供参考,我发现了一个非常好的解决方法

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

Content-Disposition : attachment
方法

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

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

ForceType应用程序/八位组流
标题集内容处置附件
将Zip写入文件服务器,并将页面重定向到Zip

当然,我每天晚上都要清理,但是它会被记录下来,而且它仍然会迫使他们选择下载文件的位置(除了Safari,几乎所有的东西都是如此[总有一个])

干杯,
小问题

我来看看mod_perl。这种类型的日志记录的主要原因是我们得到的信息不正确,即我可以将完整的Zip文件大小记录到数据库中,但无法判断他们是否在完成下载之前终止下载,而是记录实际交付的字节数。