PHP-Function regelmäßig ausführen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufrufen
beispiel
browser
check
code
dank
datei
funktion
header
jemand
nachricht
paar
restlichen platz
sekunde
server
set
test
unteren rand
url
zahl
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Welche Funktion willst du denn so oft aufrufen und zu welchem Zweck? Was stört es, wenn die Funktion seltener aufgerufen werden würde, z.b. alle Minuten oder so?
Möglichkeiten gibt es natürlich, angefangen von »mit JavaScript aufrufen« bis hin zu »Cronjob«, je nachdem worum es sich handelt und welche Möglichkeiten dir zur Verfügung stehen.
Beitrag zuletzt geändert: 3.4.2013 14:54:01 von hackyourlife -
am besten sollte die funktion alle paar sekunden ausgeführt werden
ich hoffe, das ist möglich
am besten mit PHP -
Das klingt wirklich nach schlechtem Design.
Was willst du damit erreichen? Es gibt sicherlich Möglichkeiten das weniger stressig für dich und vorallem den Server zu realisieren. ;)
PHP ist nicht wirklich für sowas gedacht fürchte ich. Es wäre sicher möglich aber naja...
Rück erstmal raus damit, was du genau erreichen willst. Dann sehen wir weiter. -
ich hatte gedacht, ein chat als übungsprogramm zu schreiben,
das habe ich auch schon gemacht, aber wenn zwei auf der seite sind, werden neue einträge erst angezeigt, wenn die php-seite neu-geladen wurde
ich würde es gerne haben wenn das programm alle paar sekunden überprüft, ob eine neue nachricht vorhanden ist
ich hoffe da gibts ne gute möglichkeit -
Mehrere unterschiedlich komplexe Möglichkeiten für deinen Chat:
1) Statisches HTML + Frames
Ein Frame am unteren Rand = Eingabeleiste für die Eingabe der Nachricht, ein weiteres Frame nimmt den restlichen Platz ein und lädt immer wieder (per meta-Tag) neu. Diese Variante kommt ohne JavaScript aus, ist aber entsprechend Resourcenlastig und langsam (und technisch veraltet).
2) Polling mit JavaScript
Du fragst mit JavaScript alle paar Sekunden den Server ab, ob etwas neues gekommen ist. Dazu nutzt du z.B. XMLHttpRequests.
3) fortgeschrittenere Techniken
WebSockets, Long-Polling, …, nur um ein paar Möglichkeiten zu nennen, wie man so einen Chat wirklich bauen würde.
Punkt 2 ist das, was dich interessieren wird. -
können sie mir vielleicht mal ein beispiel geben? ich habe nämlich noch nie mit XMLHttpRequests gearbeitet. einfach einen codeausschnitt für die abfrage oder so.
ich versuch mich mal mit:
http://www.webdeveloper.com/forum/showthread.php?169337-Auto-refresh-lt-DIV-gt-using-ajax
mit setTimeout(), ajax und so...
aber wenn jemand ne bessere möglichkeit kennt, bin ich offen für vorschläge
Edit by burgi: Beiträge zusammengefügt
Beitrag zuletzt geändert: 24.5.2013 23:41:19 von burgi -
Beispiel mit jQuery
<html> <head> <title>TEST</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> <script type="text/javascript"> var seconds = 5; // --- Gesamt Reload-Dauer in Sekunden var mdelay = 1000; // --- Dauer der fadeIn/Out Animation var milisec = ((seconds*1000) - (mdelay*2)); var auto_refresh = setInterval( function() { $('#loaddiv').fadeIn(mdelay).load('reload1.php').delay(milisec).fadeOut(mdelay).empty(); }, 5000); $(document).ready(function(){ $('#loaddiv').fadeIn(mdelay).load('reload1.php').delay(milisec).fadeOut(mdelay).empty(); }); </script> <style type="text/css"> <!-- body { background: #FFFFFF; color: #000000; } #loaddiv { font-family: "Times New Roman", Times, serif; font-size: 22px; color: #003366; text-align: center; margin: 0 auto; padding: 8px; width: 60px; height: 30px; background: #AACCFF; border: 1px solid #33AA00; } --> </style> </head> <body> <br> <div style="text-align: center;"> <div style="margin: 0 auto; padding:6px; width:90px; height:50px; background:#AAFF99;"> <div id="loaddiv"> </div> </div> </div> <br> </body> </html>
Datei: reload1.php
hier die PHP-Funktion rein ... im BSP wird eine Zufalls-Zahl zwischen 0 und 1000 ausgegeben)
<?php $randid = rand(0,1000); echo $randid; ?>
nur so als Idee ... mit jQuery
Beitrag zuletzt geändert: 5.4.2013 20:23:26 von keyrank -
danke für den code,
aber ich bin mir nicht ganz sicher ob es absicht ist, dass die Zahl nicht verändert wird
ich habe es bei mir ausprobiert, und es kommt immer die gleiche zahl.
so wie ich den code verstehe, müsste doch eigentlich alle 5 sek eine neue zahl geschrieben werden oder?
kann mich da mal jemand aufklären?
---
komisch auf meinem laptop hats jetzt geklappt, wie ichs vermutet habe
---
das liegt an scheinend am browser: bei Opera funktionierts, bei Firefox nicht
weiß jemand vielleicht wie man es auch auf Firefox zum laufen bringt?
Beitrag zuletzt geändert: 7.4.2013 12:20:36 von fockolino -
also ich habe den Code auch mal ausprobiert,
bei mir klappt es (alle 5 Sekunden neue Zahl)
sowohl im FF als auch im IE
hast Du evtl. JavaScript deaktiviert an Deinem Computer ?
oder hat Dein Browser / Webspace Cacheing aktiviert ?
Cacheing am Webspace "deaktivieren" kannst Du über .htaccess
Header set Cache-Control "must-revalidate, no-store, no-cache, max-age=0, pre-check=0, post-check=0" Header set Pragma "no-cache"
Es geht auch ohne jQuery (obwohl das nicht schlecht ist)
.... direkt mit Ajax ... jetzt mal alle 3 Sekunden
<html> <head> <title>TEST</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script type="text/javascript"> function ajax_reload() { var xmlhttp; if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); } else { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } var millisec = new Date().getTime(); xmlhttp.open("GET","reload1.php?ms=" + millisec + "",true); xmlhttp.send(); } // ----- set refresh-time in seconds var seconds = 3; // ---- convert to milliseconds var runinms = (seconds*1000); // ----- refresh after xxx (milli-)seconds var set_interval = setInterval( ajax_reload, runinms); // ----- first run when document is ready window.onload = ajax_reload; </script> <style type="text/css"> <!-- body { background: #FFFFFF; color: #000000; } #myDiv { font-family: "Times New Roman", Times, serif; font-size: 22px; color: #003366; text-align: center; margin: 0 auto; padding: 8px; width: 60px; height: 30px; background: #AACCFF; border: 1px solid #33AA00; } --> </style> </head> <body> <br> <br> <div style="text-align: center;"> <div style="margin: 0 auto; padding:6px; width:90px; height:50px; background:#AAFF99;"> <div id="myDiv"> </div> </div> </div> <br> <br> </body> </html>
das Anhängen der Millisekunden mit GET Parameter (hier: "?ms=") an reload1.php
bewirkt, dass jeder Aufruf eine eindeutige URL ist, um evtl. Cacheing zu verhindern
ist quasi eine Alternative zur Cache-Vermeidung
zu dem oben genannten Eintrag in eine .htaccess Datei
Beitrag zuletzt geändert: 7.4.2013 11:37:20 von incdesign -
ich habs jetzt mal mit EXTRAS, EINSTELLUNGEN, ERWEITERT und dann den cashe auf 0 begrenzt, das hat geklappt
danke.
PS: wo müsste denn die .htaccess-Datei hin?
Beitrag zuletzt geändert: 7.4.2013 17:11:43 von fockolino -
fockolino schrieb:
In den gleichen Ordner wie die Dateien die nicht gecached werden sollen. Allerdings gilt diese .htaccess-Datei dann auch für alle Dateien in allen Unterordnern…
PS: wo müsste denn die .htaccess-Datei hin? -
mit der .htaccess-Datei klappts jetzt auch ohne die cashbegrenzung.
nochmal danke.
PS: kann vielleicht mal jemand einen link posten, wo man noch so andere befehle für .htaccess findet
Beitrag zuletzt geändert: 7.4.2013 21:33:45 von fockolino -
Das heißt immer noch 'cache' und nicht 'cash'.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage