Php exec和返回二进制

时间:2009-04-21 13:03:32

标签: php binary

我正在尝试在php中运行以下内容

$ test = svn cat ....

现在$ test的输出基本上是svn返回的二进制文件。如何将此二进制文件作为下载提供。我试图提出以下内容:

$test = `svn cat ....`
header("Content-Disposition: attachment; filename=" . urlencode($filename));
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
echo $test;

5 个答案:

答案 0 :(得分:1)

您是否考虑将此文件保存到硬盘上的临时位置并从那里提供服务?是否真的有必要从内存中提供文件?如果您有500人下载此文件怎么办?当用户下载它们时,服务器是否会将所有500个文件保存在内存中?

我的建议是,将文件保存到Web服务器可访问的临时位置,并为其提供链接。

答案 1 :(得分:1)

除了彼得D的回答;您可以将二进制文件写入文件系统,然后将其作为下载服务器。而不是给用户一个链接。

首先尝试使用简单的文本文件,如果可行的话;尝试使用二进制文件。

答案 2 :(得分:1)

您可能希望在PHP中使用passthru()函数。

呼叫可能需要在标题之后,但首先尝试两种方式。

编辑:我认为这不会导致内存问题。我不认为PHP会将输出保留在内存中,因为它会直接发送到stdout。

答案 3 :(得分:1)

来自passthru()的PHP.net文档上的the comments

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"myfile.zip\"");
header("Content-Length: 11111");
passthru("cat myfile.zip",$err);
exit();

以上代码由igor在bboy dot ru提供。

答案 4 :(得分:0)

问题可能是你有三个内容类型的标题 - 据我所知,浏览器只接受一个,所以我会选择octet-stream。