Php exec ve ikili dönüş

5 Cevap php

Ben php aşağıdaki çalıştırmak için çalışıyorum

$ Test = svn cat ....

Şimdi $ test çıktı temelde svn tarafından döndürülen bir ikili dosyadır. Nasıl bir yükleme olarak bu ikili dosya kullanılabilir yapabilirim. Aşağıdaki koymak için çalışıyorum:

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

5 Cevap

the comments üzerine PHP.net belgelerine itibaren passthru():

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

The above code was provided by igor at bboy dot ru.

Eğer sabit diskte geçici yere bu dosyayı kaydetme ve oradan hizmet düşündünüz mü? Bellekten dosyayı hizmet gerçekten gerekli mi? Ne bu dosyayı indirirken 500 kişi varsa. Kullanıcılar onları indirirken sunucu belleği tüm 500 dosyaları kurtarmak mı?

Benim öneri, web sunucusu erişilebilir ve onlara bir link vermek geçici bir konuma kaydedin.

Peter D's cevap ek olarak; Eğer dosya sistemine ikili dosya yazma ve sonra bir download olarak hizmet verebilir. Bunun yerine kullanıcılara bir link vererek.

Eğer o çalışır, ilk basit bir metin dosyası ile deneyin; ikili dosyası ile deneyin.

Muhtemelen PHP passthru() işlevini kullanmak istiyorum.

Çağrı Başlıklardan sonra gelmek gerekir, ancak ilk iki yönde deneyebilirsiniz.

edit: Ben bu bellek sorunu neden olur sanmıyorum. Ben Stdout düz aracılığıyla gönderilen çünkü PHP, bellekte çıktı tutacak sanmıyorum.

Bildiğim kadarıyla, tarayıcılar sadece bu yüzden octet-stream için giderdim birini kabul - Sorun üç içerik türü başlıklar var ki olabilir.