On-the-fly sıkıştırma &

0 Cevap php

Birkaç büyük dosyaları sıkıştırılmış ve indirmek için müşteriye sağlanmalıdır bir web sunumu senaryo düşünün. LAMP bunu yapmak için en belirgin yolu kullanıcıya ya echo o zaman, PHP'nin yeteneği kullanarak bir geçici zip dosyası oluşturmak veya diskete kaydetmek ve biraz zaman silinecek bunu gerektiren (yönlendirmek gelecek).

Ancak, bu tür bir şema, aşağıdaki dezavantajlara sahiptir:

  1. Yoğun CPU ve disk dayak dönemi
  2. istek başına kabul edilemez derecede yüksek bellek kullanımı
  3. önemli geçici disk alanı
  4. Kullanıcı için önemli bir başlangıç ​​gecikme arşiv hazırlanan iken.

Kullanıcı yolu ile indirme yarısını iptal ederse Ayrıca, kaynakların büyük miktarda israf edilmiş olacaktır.

Paul Duncan ZipStream-PHP bu sorunların bazılarını çözen, etkin dosyası ile Apache dosyasına verileri kürekle. Ancak, hala çok yüksek bellek kullanımı (dosyaları belleğe tamamen yüklenir), disk ve CPU kullanımı ani sonuçlanır çekiyor.

Bunun aksine, aşağıdaki deneme parçacık göz önünde bulundurun:

ls -1 | zip -@ - | dd of=/dev/somewhere

Bir boru ayrılmaz bir tampon vardır, ve bu dolduğunda, OS gönderme programını askıya alır. Yani, burada Info-ZIP (OS X üzerinde sağlanan util zip, kolayca apt-var & c. Linux) akış modunda çalışır ve bu nedenle düşük bir bellek alanına sahiptir ve sadece kadar hızlı çalışıyor onun çıkış dd tarafından okunabilir.

Optimum yol, daha sonra yapılacak aynı olacaktır: a zip programı aracılığıyla kullanıcıya stream dosyaları. Bu çok az yük ile faaliyet gösterecek ve gzip anında modern web sunucuları tarafından uygulandığı şekilde çok benzer olacaktır.

Bu Apache'yi kullanarak ve elde etmek mümkün mü PHP?

(Kenara: Bu görev için daha uygun olabilir daha iyi bir web sunumu teknolojiler vardır?)

0 Cevap