Php exec и возвращаемый двоичный код

Я пытаюсь запустить следующее в 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; 

Из комментариев к документации 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(); 

Вышеприведенный код был предоставлен igor на bboy dot ru.

Вы считали сохранение этого файла во временном месте на жестком диске и обслуживании его оттуда? Действительно ли необходимо обслуживать файл из памяти? Что делать, если у вас 500 человек, загружающих этот файл. Будет ли сервер сохранять все 500 файлов в памяти, пока пользователи загружают их?

Моя рекомендация сохраните файл во временное место, доступное вашему веб-серверу, и дайте им ссылку.

В дополнение к ответу Питера D; вы можете записать двоичный файл в файловую систему, а затем выполнить его как загрузку. Вместо того, чтобы давать пользователям ссылку.

Сначала попробуйте его с помощью простого текстового файла, если это работает; попробуйте его с вашим двоичным файлом.

Вероятно, вы хотите использовать функцию passthru () в PHP.

Возможно, вызов должен появиться после заголовков, но сначала попробуйте оба способа.

edit: Я не думаю, что это вызовет проблему с памятью. Я не думаю, что PHP будет хранить вывод в памяти, потому что он отправляется прямо в stdout.

Проблема может заключаться в том, что у вас есть три заголовка контента – насколько я знаю, браузеры принимают только один, поэтому я бы пошел на поток октетов.