Yavaş PHP geçidi

4 Cevap

Çeşitli sebeplerden dolayı, ben bir HTTP Request ve diskteki bir dosyaya arasında aracılık oynamak gerekiyor. Benim yaklaşım başlıkları doldurmak ve daha sonra bir readfile ('/ yol / / file.jpg') gerçekleştirmek olmuştur;

Şimdi, her şey çok yavaş, hatta orta ölçekli bir görüntü verir dışında çalışıyor.

Üstbilgileri gönderildikten sonra herkes istemciye dosya akışı daha verimli bir şekilde bana sağlayabilir?

Not: Bu konularda eğer bir hosting ortamında bir linux kutusu

4 Cevap

Çeşitli web sunucuları harici komut tam olarak bunu yapmak için onlara izin verir. X-Sendfile Apache (mod_xsendfile ile) biridir.

Özetle, tüm gönderdiğiniz başlıkları olduğunu. Özel X-Sendfile başlık yanıtın vücut olarak adlandırılan dosya göndermek için web sunucusuna yönlendirir.

Koşullu GET isteği desteği uygulama ile başlayabilirsiniz.

Dosyası ile bir "Last-Modified" başlığını göndermek ve istemci ile dosyayı istediğinde "304 Değişmedi" ile cevap "If-Modified-Since" ve dosya değiştirilmiş edilmediğini görüyoruz. Bazı mantıklı tazelik-bilgiler ayrıca ilk etapta bir değişmeden kaynak için tekrarlanan talepleri önlemek için tavsiye edilir ("Cache-Control" / via başlıklarını "Expires").

Eğer gerçek performansı hakkında hiçbir şey yapamaz bulmalısınız bile bu şekilde en azından algılanan performans, gelişmiş olabilir.

Bu aslında oldukça hızlı olmalıdır. Biz bir sorun olmadan büyük görüntülerle bu yaptım. Eğer böyle bir görüntü üzerinde bazı meta verileri hesaplamak gibi, süreci yavaşlatan olabilir görüntü çıktısını almadan başka bir şey yapıyor musunuz?

Edit: You may need to flush the output and use fread. IE:

$fp = fopen($strFile, "rb");
//start buffered download
while(!feof($fp))
	{
	print(fread($fp,1024*16));
	flush();
	ob_flush();
	}
fclose($fp);

Temelde bir sunucu kurmak istiyorum ... Bu önemsiz değil.

Orada bir PHP tabanlı sunucunun çok promissing proje: Nanoweb.

Bu, ücretsiz ve tamamen genişletilebilir bulunuyor.