# PHP-Funktion aus JavaScript aufrufen



## MAN (27. August 2004)

Hallo,

besteht die Möglichkeit eine PHP-Funktion aus JavaScript heraus aufzurufen?

Beispiel, ich habe eine Funktion geschrieben, die mir den aktuellen Counter von der Besucherzahl zurückgibt. Wenn ich jetzt aber Javascript habe, und dann folgendes progge:


```
<script language="JavaScript">
	function getVisitors()
	{
		document.getElementById("visitors").innerHTML = "<? echo getVisitorsFromDB(); ?>";
	}
</script>
```
Dann wird ja der PHP-Code geparsed, und es steht fest drin, zum Beispiel 143. Da ich aber mittels

```
<body onLoad="getVisitors(); window.setInterval('getVisitors()',1000);">
	<span id="visitors" /> Besucher
</body>
```
meinen Counter eben sekündlich updaten will, bringt mir das nichts!

Vielleicht hat jemand einen schönen Workaround dafür! 

Vielen Dank!


mfG,
MAN


----------



## Tobias Menzel (27. August 2004)

Hi,

da PHP auf dem Server ausgeführt wird, müsstest Du die Seite schon periodisch aktualisieren:
	
	
	



```
<body onLoad="getVisitors(); window.setInterval('location.reload()',1000);">
```

Gruß

P.S.: das würde natürlich die Usability erheblich einschränken. Ich würde zur Anzeige des Counters ein kleines Flash verwenden, welches sekündlich den aktuellen Wert aus einer Textdatei liest oder das PHP-Script aufruft.


----------



## Sven Mintel (27. August 2004)

Per Javascript könntest du in Intervallen ein Bild neu laden....welches diese Anzahl als Ziffer enthält.
Dein PHP-Skript müsste dann halt dieses Bild mit bspw. den GD-Funktionen erzeugen.


----------



## MAN (27. August 2004)

> P.S.: das würde natürlich die Usability erheblich einschränken.


Richtig  so etwas hätte ich eventuell auch noch hinbekommen, einfach mit parent.location.href = "currentSite.php";

Aber das ist ja wie gesagt Benutzerunfreundlich.

Mit einem Flash-Object oder bei JavaScript mittels PHP und der GD-Funktionen habe ich noch überhaupt keine Ahnung von.

Habt ihr vielleicht das schon selbst gemacht, und mir schnell ein kleinen Beispiel zeigen? wie mache is es mit einem Flash-Object? Wie erstelle ich so etwas? Brauch ich dazu ein anderes Programm, oder kann ich das selbst proggen?

Vielen Dank für Antworten!  


mfG,
MAN


----------



## Tobias Menzel (27. August 2004)

Hi,



> Brauch ich dazu ein anderes Programm, oder kann ich das selbst proggen?


 In der Tat; Macromedia Flash wird dazu benötigt. Ich habe so etwas schon mehrfach erstellt und es funktioniert prima.

Der Vorschlag von fatalus wäre für Dich aber wohl sinnvoller, wenn Du Dich in PHP schon auskennst. 

Gruß


----------



## Sven Mintel (27. August 2004)

Die PHPSache ist recht simpel.....das geht mit der Funktion *imagestring()* 

Beispiel mit Uhrzeit 

Die PHP-Source für das Bild findest du dort.
Beim Javascript ist wichtig, das die aufgerufene URL immer variiert, damit es auch sicher neu geladen wird....in dem Beispiel hab ich per Javascript einfach nen Timestamp an die Bildadresse rangehängt(siehst du ja im Quelltext der Seite)


----------



## MAN (27. August 2004)

@fatalus: Dein Beispiel ist für meine Zwecke an sich perfekt. Jedoch ist es eigentlich auch nicht sehr benutzerfreundlicher, oder?

Da er ja immer jede Sekunde (so wollt ich das natürlich auch haben) das neue Bild mit der aktuellen Zeit laden muss, springt der Cursor immer wieder auf die Sanduhr.

Ich bräucht eben so etwas wie es bei Javascript möglich ist (Beispiel gibts genug für Uhren anzeigen). Jeodh will ich aus einer DB Werte rauslesen.

Die Alternative wäre jetzt mit JavaScript werte aus ner MySQL-DB rauszulesen. Aber so etwas kann ja JavaScript leider nicht, oder etwa doch?!


mfG,
MAN


----------



## Sven Mintel (27. August 2004)

nö...das kann Javascript nicht


----------



## MAN (27. August 2004)

Andere Frage: so wie man das neu generierte Bild sich immer wiederaus der php-Datei zieht, kann man sich da nich einfach andere Werte holen?

Also jetzt nicht im BIldformat, sondern einfach so wie ein return-Wert von einer Funktion?

Mit include( "function.php"); gehts ja auch nicht, da wird die php-Datei ja auch gleich wieder geparsed. Gut wäre eben eine Funktion wie imageString für Text oder ähnliches...

mfG,
MAN


----------



## Sven Mintel (27. August 2004)

Das geht  nur bedingt.
Statt einem Bild könnte man in Intervallen eine externe JS-Datei neu aufrufen, ...in welcher dann...wieder von PHP erzeugt, eine aktualisierte Javascript-Variable drinnen steht.....die du dann irgendwohin schreiben kannst.

Das Dumme dabei ist, dass dies mit dem IE zwar geht....Mozilla z.B. spielt da aber nicht mit.

Eine andere Möglichkeit wäre, in einem versteckten iFrame eine HTML-Seite ständig neu zu laden, welche dann diese Werte, die du haben willst, enthält.....und z.B. an das Elternfenster sendet.


----------



## MAN (27. August 2004)

wie würde es dann per iframe aussehen? Wäre es dann so, dass er die ganze Seite wieder aktualisiert, aber eben bloß in einem kleinen frame-bereich, und auf dieser Seite steht dann der php-Befehl?

Ich glaube (ich hab es noch nich probiert), dass es genauso aussehen wird, wie wenn ich es mit dem ladenden Bild mache, da er ja wieder kontinuirlich etwas laden muss.... da ja ein iframe so etwas wie ein Frame ist, und ein Frame ist ja ne Seite, und so wie er eben die Seite aktualisiert, aktualisiert er beim iframe einen Bereich der Seite.

Ach, ich probiers einfach mal aus, vielleicht merkt man das gar nicht so 

Danke für den Tipp!


mfG,
MAN


----------



## MAN (28. August 2004)

Also: ich habs jetzt einfach mal mit diesem ImageString gemacht.

Funktioniert eigentlich auch ganz gut, ich hab' den Counter jetzt nur 10-Sekündlich aktualisieren lassen, und dann fällt das gar nicht so auf....

Eine Frage dazu hätte ich aber noch:
Wie bekomme ich nun als Image-Schriftart zum Beispiel "Arial" ? Ist das irgendwie möglich? Oder kann ich nur die fonts von 1 - 5 nehmen?


mfG,
MAN


----------



## Sven Mintel (28. August 2004)

bei imagestring() hast du keinen Einfluss auf die Schriftart, da kannst du wie vermutet 1-5 wählen, wobei die jeweilige Schriftart, welche sich dahinter verbirgt, von der jeweiligen PHP-Konfiguration abhängt.

Um mit einem TTF Text in einem Bild zu erzeugen, gibt es die Funktion imagettfbox() ...ob du diese allerdings benutzen kannst, hängt auch vom Server ab....dort muss die Freetype-Bibliothek installiert sein.


----------

