2009-04-21 5 views
1

Я пытаюсь выполнить следующую команду в PHPPhp Exec и вернуть бинарный

$ тест = svn cat ....

Теперь выход $ теста в основном двоичный файл, возвращаемый СВН. Как сделать этот двоичный файл доступным для загрузки. Пытаюсь поставить следующее:

$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 точка ру.

0

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

1

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

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

1

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

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

1

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

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

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