Çıktı tamponunun içinde PHP usleep / uyku

1 Cevap php


I have a PHP application containing these files: landing.php, redirect.php, ajax.php

Bir sayfa çağrı landing.php, ben belirli verileri yakalamak, ve ajax.php hangi DB ekler onları bir AJAX POST vermek için bir javascript kodu çalıştırmak. Son olarak php header() yönlendirir redirect.php

Şu yukarıdaki özelliği çıktı tamponlama kullanıyor, ancak header() çok yakında AJAX POST bitmedi yürütüldüğünde .. yani, hiçbir DB sorgu yapılır.

I sleep() usleep() header() önce kullanmaya çalıştı ama onlar çalışmıyor. Ben çıktı tamponlama çok aşina değilim, bir tür el sunmak misiniz?

Teşekkür ederim.

<?php ob_start(); ?>

<scripts type="text/javascript">
var data = 'blah..blah..blah..';
ajaxPost('ajax.php', data);
</scripts>

<?php
sleep(2);    // <---- I want the script to sleep here and wait for the AJAX to finish
header('c.php)
ob_end_flush();
?>

1 Cevap

Ben doğru anladım ise, web uygulamaları işe nasıl temel bir yanlış anlama var.

PHP komut bütün script sunucuda ilk çalıştırma olduğundan, yürütmek için AJAX bit için sabırsızlanıyorum, ve çıkış - AJAX çağrı hangi parçası - daha sonra tarayıcıya gönderilir. Bunu yapıyoruz yolu yeniden düşünmek zorunda.

Örneğin, JavaScript ilk AJAX arama yapmak, ve sonra tarayıcıyı yönlendirme olabilir.

Edit: tarayıcı kısa sürede komut çalıştırır eğer Tamam, şimdi ben bir süre daha bu konuda düşündüm ki, ben, çıktı tamponlama kullanıyorsanız değilken böyle bir şey might nasıl çalıştığını görebilirsiniz o (tam sayfa yüklendiğinde kalmadan) onu görür. Gerçekten de böyle ise, o zaman hala senkronize şeyleri tutmak için böylece tarayıcının zamanlaması, kullanıcının internet bağlantısı kalitesine güvenerek ve konum. Bu kesinlikle not iyi bir şeydir.

AJAX çağrı, başlık çağrısının önce tarayıcıya outputted var Ancak, işe yarayabilir tek yoludur - mümkün değil ki! Başlıkları HTTP yanıtı (Eğer ilk etapta çıktı tamponlama kullanıyorsanız neden olan) içeriğin önce gönderilmesi gerekir, bu yüzden ya çıktı JavaScript veya başlık çağrı başarısız olur olmaz. Yani sizin yaklaşım yeniden düşünmek öneririz.