PHP: mac os x üzerinde bir zip akışı passthru kullanarak sorunu sadece

0 Cevap php

Ben Unix'in zip komuta ve PHP'nin Geçiş fonksiyonunun kullanımı yoluyla bir zip akış çözümü bir araya getirmek için çalışıyorum, ama ben bir engele isabet ettik.

Script şöyle:

<?php
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachement; filename=myfile.zip");
passthru("zip -r -0 - /stuff/to/zip/");
exit();
?>

The zip command works OK and the output is received by the browser and saved as a zip file. The zip can then be extracted fine on Windows and Unix, but on Mac OS X the build in extractor (BOMArchiveHelper) can't extract the file. Using other applications on OS X works fine though.

The error given by BOMArchiveHelper is the same it gives if a zip is password protected (not handled by the application). I used some kind of zip analyzer program and it indicated that some of the files in the zip archive were flagged as password protected. Like I said though, no other extraction application pays attention to that apparently.

When examening the zip closer I found that the one generated by the PHP files is a few bytes larger than one generated directly by the zip command on the server. It seems that the stream process with passthru adds something to the file that probably causes the problems with BOMArchiveHelper.

To test this, I used passthru to stream a zip I had already created on the server: passthru("cat stuff.zip") That worked fine with BOMArchiveHelper.

Yani sorun Geçiş işlevi zip komutuyla anında oluşturulan ikili verileri alır ve geçer sürecinde yerde yalan görünüyor tarayıcı.

I've tried to eliminate all the sources where the extra bytes could be generated (setting zip command to quiet and so on), but the added data still remains. A binary diff of the streamed zip and a pre generated zip shows that the extra data is scattered all over the zip, not just in the end or the beginning.

Herkes bir ipucu var, ya da daha önce bu sorunu gördük ve bunu çözmek imkansız karar verdi?

NB: başkası zaten karşılaştı ve bana çok iyi önce bu sorunu tarif ben sadece kopyalanan / burada yaptığı mesaj yapıştırın herhangi bir cevap vermeden ve onun tüm testler etkili benim herhangi geçti başarısız ve ne emin yaptı yana ...

Görünüşe göre işe almak bu tek yolu açmak ya suffitexpander ya da kullanmak için insanlara sormak olacaktır ...

0 Cevap