Bir işlevi PHP sayfa yük sonra for every 10 seconds of 10 saniye aramak için herhangi bir yolu var mı. (HTML kullanarak değil.)
Şimdiden teşekkürler.
Fero
Pek değil, hayır. Yüklenmiş sizin sayfası 10 saniye sonra (en az) PHP script bittikten 10 saniye sonra, yani it is no longer running (dışında ben sanmıyorum ki, bağlantıyı açık tutarak deneyin hileler gibi bir süre için çalışacak sürece 10 saniye)!
Bu nedenle, 10 saniye içinde yangın sunucu tarafında bir cron
işi planlamak gerekir, ya sen AJAX kullanarak, web sitesinden bir geri gerekir.
PHP is a server side scripting language. Bir şey istemci tarafında zaten yüklü olup olmadığını kontrol etmek gerekiyorsa, you will need a client-side scripting language like JavaScript.
You might need to use jQuery for your purpose şeyleri basitleştirmek için. jQuery a,
fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.
Birincisi, indir jQuery. HTML'nizin kafa etiketinde, bu ekleyin:
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
// Check if the page has loaded completely
$(document).ready( function() {
setTimeout( function() {
$('#some_id').load('index.php');
}, 10000);
});
</script>
HTML'nizin vücut olarak, bu ekleyin:
<div id="some_id"></div>
Edited to remove bug
Bu garip bir fikir gibi görünüyor ama belki size HTML / JS dokunmadan PHP bunu yapmak istiyorsanız için ne arıyorsanız:
<?php
your_website_here();
flush(); //this sends the output to the client. You may also need ob_flush();
sleep(10); //wait 10 seconds
your_func_here();
?>
Yukarıdaki teoride preety Tamam, ama pratikte çok bellek tüketen uygulama neden olacaktır. Yani uyardı.
Ve beni DOWNVote etmeyiniz, bu sadece teorik bir anlaşmazlık var.
Gibi soru yorumlamak, o zaman bu yaklaşım birkaç yolu vardır "Benim sayfa oluşturmak için uzun bir zaman alır o üretir iken, şimdi ben bir PHP işlevini her 10 saniyede arayabilirler" ...
$nexttick=time()+10;
$active=true;
while ($active)
{
if (time()>=$nexttick)
{
my_tick_function();
$nexttick=time()+10;
}
//now do some useful processing
$active=do_some_work();
}
Bu sizin "kene" fonksiyonu çıktılarının bir ilerleme ölçer temsil HTML güncelleştirmek için bazı javascript alarak, uzun süren operasyonlar için bir ilerleme ölçer uygulamak için böyle bir tekniği kullanmak mümkündür.
Eğer Process Control desteği PHP sizin inşa etkin varsa Alternatif olarak, pcntl_alarm zaman belli bir miktar geçtikten sonra bir sinyal yöneticisini çağırmak için kullanmak mümkün olabilir.
Sen register_tick_function PHP motoru fonksiyonu her x 'kene' diyoruz için declare ile birlikte inşa kullanabilirsiniz. Manuel:
A tick is an event that occurs for every N low-level tickable statements executed by the parser within the declare block. The value for N is specified using ticks=N within the declare blocks's directive section.
Eğer gerçekten aynı PHP komut dosyası içinde bunu yapmak gerekir, temiz yolu bir fork olacaktır.
Bu mümkün değilse ya da, burada bunu yapmanın gerçekten kötü bir hackish yolu:
<?php
ignore_user_abort(1);
page_output_stuff();
// ...
flush();
sleep(10);
do_something_after_script();
?>
Eğer bir gecikmeden sonra kullanıcıya çıktı şeyler için bu yapıyorsanız, yukarıdaki can çalışma yapılabilir ama bunu yapmanın gerçekten çok çirkin bir yoldur. Sadece yerine AJAX kullanın.
I wanted to do the same thing, to be notified at each hit my resume got. With flush() after all data sent then the DB and mail operations: the page on the client is fully rendered but the downloading progress bar is still present until the script is fully terminated.
Ben (oluşturulan HTML dosyası hataları vermeden temiz kullanılabilir çevrimdışı olmasını sağlamak için) tüm eşyalarını sunucu tarafı tutmak istedim JS bir seçenek değildi.
Sonunda sadece bir cron işi son Gönderdi¤imiz sürümü ile bu dosya boyutunu karşılaştırır her dakika ekleyin ve bu betik tüm lenghty fonksiyonlarını 9k sayfa hala yükler sırasında kolları ve bir kısmını işler, bir metin dosyasına parametreleri ile bir satır ekleyerek sona erdi Bir saniyenin.
Ne yazık ki bu yöntem hala en fazla 1 dakika gecikme ama hala basit vardır:
#!/bin/sh
FLOG=/home/web/traceur/cvaccess.txt
if [ -e $FLOG ]; then
if [ ! -e $FLOG.sent ]; then touch $FLOG.sent; fi;
SENT_LINES=$(wc -l $FLOG.sent | cut -d " " -f 1)
# No disk write if no new-data
if [ $(wc -l $FLOG | cut -d " " -f 1) -gt $SENT_LINES ]; then
cp -f $FLOG $FLOG.intr
NEW_LINES=$(wc -l $FLOG.intr | cut -d " " -f 1)
TO_SEND=$(( $NEW_LINES - $SENT_LINES ))
tail -n $TO_SEND $FLOG.intr > $FLOG.diff
mailx -s "Nouvelle consultation du CV" -r "HAL <hal@jmd-tech.com>" jmarodon@jmd-tech.com < $FLOG.diff
rm $FLOG.diff
mv -f $FLOG.intr $FLOG.sent
fi
fi
And the page is at: http://www.jmd-tech.com/cv-julien-marodon.html, the PHP code is nothing more than those 3 lines at the end of the previously plain HTML file:
<?php
// Enregistrement log
$ligne=$_SERVER["REMOTE_ADDR"]."\t".$_SERVER["HTTP_USER_AGENT"]."\t".$_SERVER["HTTP_REFERER"]."\t".date("Y-m-d H:i:s");
$fic=fopen("/home/web/traceur/cvaccess.txt","a");
if ($fic) { fwrite($fic,$ligne."\n"); fclose($fic); }
?>
I yakın bir anlık (<1s) veya 10 saniyelik bir gecikme sürüm yapmak istedim, ben gitmek için yol bir cini yerine bir cron işi ve süreçler arası iletişim çeşit, muhtemelen bir dinleme soketi kullanarak olacağını düşünüyorum PHP komut dosyası, Tul işlemleri ile kendisi tarafından daha sonra cini gelirleri veri gönderme ve (hızlı) kapatılması için () fsockopen hangi.