2009-04-21 78 views
1

我试图运行在PHP以下PHP的exec和返回二进制

$测试= svn cat ....

现在$测试的输出基本上是由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; 

回答

1

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

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

上面的代码是由伊戈尔在BBOY点RU提供。

0

的问题可能是你有三个内容类型头 - 因为据我所知,浏览器只接受一个,所以我会去八位字节流。

1

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

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

1

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

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

1

您可能想要在PHP中使用passthru()函数。

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

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