PHP: komut bitmeden sayfasını görüntülemek nasıl?

5 Cevap

My script consists of two parts. The first part generates HTML page. The second part loads a resourse from the net and saves it into a file. Loading is a long operation and can take up to 10 seconds. The first and the second parts are completely indepenent (loading has no impact on the look of the page).

Ben (floş diyoruz ilk bölümünün sonunda), bu sayfa anında görüntülenir yapar.

Ancak, gömülü SWF film şu anda gösterilmez.

SWF is the key element of the page and it must be displayed as fast as possible. It is embedded in the page with SwfObject library. And the problem is that SwfObject starts to open SWF on "onLoad" event of the page.

But "onLoad" event comes at the end of the second part. That is "onLoad" can occure in 10 seconds. So in spite flush() call the user has to wait for 10 seconds in vain.

Is it possible to solve the task on PHP side? Is it possible to run "loading" task (the second part) in a separate process? Is it possible to tell the browser before the second part starts, that the page is reay and you can broadcast the "onLoad" event.

Bu çok uzun bir hikaye okumak için teşekkürler.

5 Cevap

Ben iki ayrı PHP dosyalarının içine kod bölme öneririz:

Ilk dosya SWF içeren HTML sayfası oluşturur.

İkinci dosya kaynak alır ve kaydeder.

Hile ilk sayfanın onLoad olayı size ikinci sayfasının URL istediğinde JavaScript küçük bir pasajı çalıştırılır.

İlk sayfa kod şöyle olacaktır:

...
<body onload="makeRequest('page2.php')">
...

makeRequest burada gibi bir fonksiyonu bir şey olduğu: http://www.captain.at/howto-ajax-form-post-get.php

Bu AJAX Tutorial Bunun anlamak için yararlı olabilir yapmak.

Bunlar gerçekten bağımsız ise tabii, ayrı bir işlem veya iş parçacığı ikinci bir çalışan bakmak gerekir. pcntl-fork burada yardımcı olabilir.

Eğer ikinci bölümünü yapmak ve exec() yöntemi kullanarak çalışacak bir komut dosyası yazmak zorunda olurdu böylece PHP parçacığı desteklemiyor. Ama bu da belki en iyi çözüm değil.

Ne muhtemelen yapabileceğiniz MVC denetleyicileri kullanıyorsanız komut dosyası veya denetleyicisi eylem ayırmak için uzun zaman alır ikinci kısmına taşımak unutun olduğunu. Sonra sadece ilk bölümünü çalıştırmak ve sayfa hızlı yük olacak. Sonra sayfanızda sonra algoritmanın ikinci bölümünü çalıştırmak için yeni script / aksiyon yüklü olduğunu aramak için bir AJAX ekleyebilirsiniz.

Bunun yerine "onload", sizin SWF film başlatmak için sayfanın sonunda bir komut dosyası bloğu ekleyebilirsiniz?

Emin değilim, ancak bir IFRAME içinde bu SWF filmi koysam?

Bir yaklaşım, ilk aşamada bir tek yönlü webservice isteği ile ikinci kademe başlatmak etmektir. Eğer PHP 5 kullanıyorsanız olduğunu varsayarsak, SOAP desteği bir göz atın.

Istemcisi) (floş aradıktan sonra yüklenmemesi durumunda, o zaman iki olasılık vardır: Birincisi, web sunucusu çıktı tamponlama olabilir ve istemci almak değil; ikinci, sen floş () çağrısı anda tam sayfa üretilmiş değil. Ikinci sorun çözmek için kolay olmalıdır.