2009-04-21 14 views
1

Ich versuche, die folgend in PHPPhp exec und zurück binär

$ test = svn cat ....

Nun ist die Ausgabe von $ Test ist im Grunde eine Binärdatei von svn zurückgegeben zu laufen. Wie stelle ich diese Binärdatei als Download zur Verfügung? Ich versuche folgendes gesagt:

$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; 

Antwort

1

Von the comments auf PHP.net in der Dokumentation auf passthru():

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

Der obige Code wurde bei bboy dot ru igor zur Verfügung gestellt.

0

Das Problem könnte sein, dass Sie drei Content-Type-Header haben - soweit ich weiß, Browser akzeptieren nur ein so würde ich für Octet-Stream gehen.

1

Haben Sie darüber nachgedacht, diese Datei auf einem temporären Speicherort auf der Festplatte zu speichern und von dort aus zu bedienen? Ist es wirklich notwendig, die Datei aus dem Speicher zu liefern? Was ist, wenn 500 Personen diese Datei herunterladen? Wird der Server alle 500 Dateien speichern, während die Benutzer sie herunterladen?

Meine Empfehlung, speichern Sie die Datei an einem temporären Speicherort, der für Ihren Webserver zugänglich ist, und geben Sie ihnen einen Link.

1

Zusätzlich zu Peter D's Antwort; Sie könnten die Binärdatei in das Dateisystem schreiben und dann als Download bereitstellen. Anstatt Nutzern einen Link zu geben.

Versuchen Sie es zuerst mit einer einfachen Textdatei, wenn das funktioniert; Probieren Sie es mit Ihrer Binärdatei aus.

1

Wahrscheinlich möchten Sie die-Funktion in PHP verwenden.

Der Anruf muss möglicherweise nach den Headern kommen, aber versuchen Sie beide Wege zuerst.

edit: Ich glaube nicht, dass dies zu einem Speicherproblem führen wird. Ich glaube nicht, dass PHP die Ausgabe im Speicher behalten wird, weil es direkt an stdout gesendet wird.