PHP fwrite vs çıkış borulama

2 Cevap php

Birisi bir web sayfasına bağlanmak ve anında indirmek için dosyaları oluşturmak için olanak sağlayan bir araç yazıyorum.

Bu dosyaları yazmak için, ben fopen veya fwrite gibi PHP fonksiyonları kullanabilir, ya da ben gibi çıktıyı üretmek için bir sistem çağrısı olarak adlandırılan bir komut dosyası oluşturabilirsiniz:

php downloadGen.php> filetocreate.xml

Çözümün fwrite sürümü daha fazla bellek kullanır ve ayrıca borulu sürümü daha yavaştır. Herkes bir sistem çağrısı olarak indir nesil yürütme ile herhangi bir sorun görüyor mu? Ben aynı anda çalışıyor olabilir kaç çağrıları bir kap olacak?

Neyse, birileri benzer bir şey ile deneyime sahiptir ve bazı tavsiyeler sunabilir umuyorum ...

2 Cevap

The fwrite version of the solution uses more memory and is also slower than the piped version

Emin misin? Ben tam tersi (ama bir şekilde önemsiz tür) bulunuyor börekler dolar bahse girerim, ve sadece yanlış ölçüm ediyoruz.

Bellek -

Fopen / fwrite via işlem dosyası oluşturmanın sunucu üzerinde ayrı bir süreç oluşturarak daha az bellek tüketmek gerekir. Belki size komut tüketen ne kadar bellek ölçüm çünkü etrafında başka bir yol olduğunu düşünüyorum. Ama bu php downloadGen.xml sistem çağrısı başka bir süreci başlıyor. Orada PHP kodu sizin sunucunuzun bağlı sürecinde yaptım eğer yaptığınız kadar bellek kullanmak, artı cli php sürecinin tüm yükü olacaktır. Yani farkı önemsiz olmalıdır.

"Hız" -

Aynı hızda için de geçerlidir. PHP yorumlayıcısı açılması işlemci.Maliyet. Tüm eşzamanlı bu yapıyorsanız, ana komut sizin nesil / çıkış kodu koyarak daha hızlı olmalıdır. Ama sadece zar zor.

(PHP 5.0 ve sonrasında mevcuttur) kolay ve en etkili yolu, sadece dosyaya içeriğini eklemek için file_put_contents () kullanmaktır. Dosyasına girdi veri - Sen ilk parametre olarak dosya ve (bir ikili güvenli bir fonksiyon, ikili ya da basit metin ya) dize belirtin.

Daha sonra belirttiğiniz yolda dosyası oluşturur.

Eğer yoksa Ve, ikinci noktasını cevap:

  1. Kullanıcıların çok sayıda,
  2. Siz sürekli BÜYÜK dosyaları yazma, ya da
  3. Sunucu bok

Sonra iyi olacak.