2015-07-24 11 views
6

ich eine API bin aufrufen, die mir diese Antwort sendet:Curl: Speichern einer Datei statt dem Öffnen

HTTP/1.1 200 OK\r\n 
Date: Fri, 24 Jul 2015 06:30:16 GMT\r\n 
Server: Apache/2.2.26 (Unix) mod_ssl/2.2.26 OpenSSL/0.9.8e-fips-rhel5 mod_mono/2.6.3 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.4.22 mod_perl/2.0.6 Perl/v5.8.8\r\n 
X-Powered-By: PHP/5.4.22\r\n 
Expires: \r\n 
Cache-Control: max-age=0, private\r\n 
Pragma: \r\n 
Content-Disposition: attachment; filename="LVDox-Master.docx"\r\n 
X-Content-Type-Options: nosniff\r\n 
ETag: d41d8cd98f00b204e9800998ecf8427e\r\n 
Content-Length: 68720\r\n 
Vary: Accept-Encoding,User-Agent\r\n 
Connection: close\r\n 
Content-Type: application/octet-stream\r\n 
\r\n 
PK\x03\x04\x14\x00\x06\x00\x08\x00\x00\x00!\x000\x1FÎò¡\x01\x00\x00ß\x08\x00\x00\x13\x00\x08\x02[Content_Types].xml ¢\x04\x02(\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ 
... 
... (etc) 

Wenn ich diesen Code die Datei an den Benutzer gesendet wird, und alles funktioniert:

Aber jetzt möchte ich die Datei woanders speichern, damit mein Skript daran arbeiten kann (umbenennen etc), also möchte ich es nicht direkt an den Benutzer senden.

Ich habe versucht, den header($header); Teil zu kommentieren, und so etwas wie:

$content = getMyFile(); 
$file = fopen('MYTEST.docx', "w+"); 
fputs($file, $content); 
fclose($file); 

Aber die resultierende Datei ist nicht lesbar (es scheint beschädigt zu sein).

Haben Sie eine Idee, was dieses Problem verursachen könnte?

Vielen Dank im Voraus.

+0

schreibt die Daten in den Speicherort der Datei? dh, können Sie die Anzahl der geschriebenen Bytes überprüfen, was Sie erwartet haben, oder schreibt es nichts? –

+0

Ja, ich habe eine Datei mit einer Größe von 69KB. Aber diese Datei ist nicht korrekt (kann nicht geöffnet werden). Aber wenn ich die Header behalten, funktioniert alles gut, aber die Datei wird an den Benutzer gesendet. Also könnten die Header wichtig sein? – Vico

+0

Versuchen Sie 'fwrite' anstelle von' fputs' zu verwenden - da Sie es mit binären Daten zu tun haben. Alternativ, warum nicht nur 'file_put_contents'? –

Antwort

1

Sie müssen die Inhaltslänge für fputs angeben, damit sie binär sicher ist. In diesem Fall

könnten Sie fputs($file, $content, 68720);

versuchen und schließlich die Länge aus dem Header zur Verfügung stellen.

Ich würde auch vorschlagen, Datei im Binärmodus zu öffnen, indem Sie fopen('MYTEST.docx', "wb"); verwenden, besonders wenn Sie Ihren Code unter Windows ausführen.

+0

Vielen Dank, Ihre Lösung löste mein Problem! – Vico