2009-04-21 68 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。