selbst updatende Webseite in Perl oder PHP

franco98

NetBSDler aus Leidenschaft
Hallo alle zusammen,

ich stehe z.Z. vor dem Problem ein Programm mit MySQL-Anbindung und Webinterface über Apache als Server zu realisieren und ein Teil der Webseiten (läuft im geschützten Intranet unserer Firma) soll sich im Abstand von ca. 10-15 sek. aktualisieren.
Ich habe mit Perl und der o.g. Umgebung schon gute Erfahrungen und die Datenbank administriere ich mit phpmyadmin - sprich wir haben beide Scriptsprachen am Laufen um das Problem zu lösen. Ich habe nun viel im Web über PHP gelesen und auch mit Python gute Erfahrungen, kann mir aber kein richtiges Urteil darüber bilden. Auf Windows Rechnern soll PHP langsamer als auf Unix laufen, das ist hier also der Fall!

Nun meine Frage, welche der beiden Sprachen ist für o.g. Aufgabe eher geeignet? Datenbankanbindung ect. ist alles nicht das Problem - die Seiten müssen immer aktuell sein, d.h. regelmäßig den SQL-Server anfragen und sich neu aufbauen!

Hat jemand Erfahrung damit?

Gruß und Danke
Frank
 
franco98 schrieb:
Hallo alle zusammen,

ich stehe z.Z. vor dem Problem ein Programm mit MySQL-Anbindung und Webinterface über Apache als Server zu realisieren und ein Teil der Webseiten (läuft im geschützten Intranet unserer Firma) soll sich im Abstand von ca. 10-15 sek. aktualisieren.
Ich habe mit Perl und der o.g. Umgebung schon gute Erfahrungen und die Datenbank administriere ich mit phpmyadmin - sprich wir haben beide Scriptsprachen am Laufen um das Problem zu lösen. Ich habe nun viel im Web über PHP gelesen und auch mit Python gute Erfahrungen, kann mir aber kein richtiges Urteil darüber bilden. Auf Windows Rechnern soll PHP langsamer als auf Unix laufen, das ist hier also der Fall!

Nun meine Frage, welche der beiden Sprachen ist für o.g. Aufgabe eher geeignet? Datenbankanbindung ect. ist alles nicht das Problem - die Seiten müssen immer aktuell sein, d.h. regelmäßig den SQL-Server anfragen und sich neu aufbauen!

Hat jemand Erfahrung damit?

Gruß und Danke
Frank

Werden die Seiten per Perl/PHP als HTML Dateien erstellt und das soll automatisiert gehen? --> cronjob
Oder geht es darum das sich lediglich die Seite neu lädt? --> HTML kann das von sich aus

Oder hab ich nicht ganz verstanden, was du genau willst --> :huth:
 
wysiib schrieb:
Werden die Seiten per Perl/PHP als HTML Dateien erstellt und das soll automatisiert gehen? --> cronjob
Oder geht es darum das sich lediglich die Seite neu lädt? --> HTML kann das von sich aus

Oder hab ich nicht ganz verstanden, was du genau willst --> :huth:

Nun ich integriere HTML in die CGI-Scripte! Die Seite soll sich selbst wieder aufrufen bzw. darstellen, aber mit erfolgtem Aufruf der Datenbank -> also DB öffnen, Datensätze in Array laden ect. , Ergebnisse erneut grafisch darstellen und DB wieder schließen! Und das ca. alle 10-15 sek. Ziel ist die permanente Darstellung von Arbeitsabläufen, also der aktuelle Status (Anfang, in Arbeit und Ende von externen Prozessen). Alles wird von anderen Mitarbeiter per Webinterface in die Datenbank gefüttert und an anderer Stelle (besagte Seite) ausgespuckt! Stell Dir 'top' grafisch in einer Webseite vor!

Gruß Frank
 
IMHO ist die Sprache unerheblich.
Nimm das, was du besser beherrscht oder was besser in die bestehende Umgebung passt.
 
lars schrieb:
IMHO ist die Sprache unerheblich.
Nimm das, was du besser beherrscht oder was besser in die bestehende Umgebung passt.

Nun dann wohl Perl! Aber PHP ist immer mehr im Kommen und soll bei Webdesign etwas die Nase vorn haben (habe leider keine Erfahrung). Was ich nehme ist mir überlassen, ich kann mich in PHP sicher einarbeiten, Perl und Python beherrsche ich schon ausreichend gut! Es ist auch eine Frage der externen Anbindung - Ziel könnte u.a. eine SAP bzw. MeDOS Anbindung sein, Datensicherheit muß ganz groß geschrieben werden (Ha,HA und das bei Windows und Internet Explorer)
Naja mal sehen!
 
Hi,

du meinst sowas in der Richtung (nur als Beispiel)?!

Code:
<html>
<?php
$refresh        = 360;           // Refresh der Seite in xxx Sekunden
?>

<head>
        <meta http-equiv="refresh" content="<?php print $refresh;?>; URL=name_des_files.php">
</head>

<?php

require("config.php");

Datenbankverbindung erstellen und Daten anzeigen
usw usw.

Elwood
 
Elwood schrieb:
Hi,

du meinst sowas in der Richtung (nur als Beispiel)?!

Code:
<html>
<?php
$refresh        = 360;           // Refresh der Seite in xxx Sekunden
?>

<head>
        <meta http-equiv="refresh" content="<?php print $refresh;?>; URL=name_des_files.php">
</head>

<?php

require("config.php");

Datenbankverbindung erstellen und Daten anzeigen
usw usw.

Elwood
Nuja ich kenne PHP nicht (noch nicht), nutze nur phpmyadmin, aber wenn das Script den Webseitenaufbau mit all seinen Unterfunktionen realisiert, dann ja!
Am besten sollte die Seite für den User statisch wirken und nur die Ergebnisse innerhalb der Seite aktualisiert werden!
 
Elwood schrieb:
Hi,

du meinst sowas in der Richtung (nur als Beispiel)?!

Code:
<html>
<?php
$refresh        = 360;           // Refresh der Seite in xxx Sekunden
?>

<head>
        <meta http-equiv="refresh" content="<?php print $refresh;?>; URL=name_des_files.php">
</head>

<?php

require("config.php");

Datenbankverbindung erstellen und Daten anzeigen
usw usw.

Elwood

genau so meinte ich das. Läd einfach die ganze Seite neu. Wenn du gezielt nur die Ergebnisse neu laden willst, sollte das per Frame gehen. Aber da hab ich dann selber an sich keine Idee mehr von ^^
 
Um was fuer Daten handelt es sich denn? Alle 10-15 Sekunden hoert sich schon etwas strange an. Vielleicht waere es gesuender die Seiten nur zu aktualisieren, wen sich die Daten auch aendern? ;)

Da es hier wohl um die Generierung einer Seite geht und nicht um eine dynamische Darstellung wuerde ich wohl zu mod_perl mit CGI Modul raten. Die Manpages zu den Modulen sind wirklich ausfuehrlich (man CGI / man DBI) und mit den Infos aus der Dokumentation sollte sich das auch relativ schnell realisieren lassen. ;)

Ein anderer Denkansatz: Vielleicht willst du ja auch nur die Werte aus der Datenbank auslesen und irgendwo auf dem Dateisystem abspeichern (als Storable oder XML vielleicht?). Dann koenntest du die Werte auch noch Bequem in ein HTML Template einpassen.
 
also mit perl würd ich das eher machen, oder gar ne C datei (zur not perl in C umwandeln lassen und compilieren, soll ja gehen)
die ausführungsgeschwindigkeit is da bisschen schneller,

wenn das ganze in aktuellen browsern dargestellt werden soll (sprich Opera ab 7.53, Firefox ab 1.0 (kann auch sein das frührere schon) und Internet Explorer ab 6.0) dann kannst du nen XML-RPC machen, damit wird der inhalt dann per XMLHTTPRequest neugeladen, aber die seite wird nur vom Javascript dynamisch geändert...
erfordert bisschen mehr aufwand, wirkt dann aber so als ob die seite selbst nie neulädt...
sowas hab ich in einem meiner PHP Projekte zurzeit Realisiert.. funktioniert aber wie gesagt nur in neueren browsern .. ansonsten such mal nach "PostOfficeBox" oder so ähnlich da gibts ne andere variante davon im source ..

das ganze nennt sich "AJAX" .. such mal im google nach "google suggest" und dann ruf diese Google!!! seite auf und tipp mal, dann wirst du sehen was ich meine...google setzt da auch den AJAX ein,

eine suche im google nach ajax fördert auch sehrviele ergebnisse zutage mit beispiel source.. meist für ASP oder PHP dann..
wenn der dahinter liegende Server ne Windows kiste ist, würd ich vielleicht auf ASP/ASPX (asp.net) setzen, ist soweit ich weiss schneller in der ausführung als php oder perl...

das ganze mit ajax kann man in jeder beliebigen sprache hinkriegne, sogar mit C.. einzigst die daten müssen von einem kleinen queryscript als XML zurückgeliefert werden, dazu finden sich dann aber auch viele beispiele etc.

wenn ich es nich vergess kann ich ja n kleines beispielscript morgen mal posten (den source davon hab ich nur in der arbeit;)


generell würd ich aber, wie schon die vorredner gesagt haben, eine sprache nehmen die man beherrscht, wobei PHP den vorteil bringt das sie schnell erlernt ist.. und die mysql funktionen bereits "integriert" sind.. und zur not gibt es für php die adoDB klasse, ist ne sehr feine sache, eines meiner projekte läuft z.b. auf Firebird und mit sehr kleinen änderungen, dank adoDB auch auf mysql (nur die sql querys minimal angepasst wegen unterschieden in dem befehlsumfang beider sql server)


viel erfolg wünsch ich
 
sebbo schrieb:
Um was fuer Daten handelt es sich denn? Alle 10-15 Sekunden hoert sich schon etwas strange an. Vielleicht waere es gesuender die Seiten nur zu aktualisieren, wen sich die Daten auch aendern? ;)
(...)

Wie kriegt der Browser das mit, wenn sich am Server etwas ändert?
 
Kurze Pause von mir - Döner und so...

Die Daten sind Patientendaten, genau genommen alles was mit der Operation zusammenhängt. Ich will alle OP-Säle grafisch auflisten, zeigen wann was läuft und welcher Patient gerade operiert wird ( OP-Status)! Die Chirurgen sollen von den einzelnen PCs im Saal sehen, wie der Status in allen anderen Sälen gerade ist! Man nennt solche Software KIS (kommerzielle Produkte kosten ca. 150000 Euro, da ist aber auch alles dabei). Nun in Zeiten leerer Kassen sucht man nach Alternativen und ich habe u.a. ein Bestellsystem entwickelt, das auf Perl, Apache und MySQL basiert und die ideotische Materialbestellung per eMail ersetzte! Das hier sprengt aber den Rahmen!!!
Das Problem für mich sind die ständig aktuellen Seiten bzw. die sich stetig wiederholenden Abfragen der Datenbank und gleichzeitige Ausgabe (wie auch immer, evt. tabellarisch) !
Wie gesagt, man hört von PHP viel, massig Bücher ect. , aber Perl beherrsche ich schon!
Es soll auch ein Vergleich der Soll- und Istzeiten erfolgen, in einem Frame z.B. oder einer einzelnen Seite, die man per Browser zu Dienstbeginn lädt. Wie ich schon sagte, stellt euch das Konsolenprogramm top vor, in eine Webseite verbaut, von mir aus mit zusätzlichen Update-Button, doch die Funktion muß auch ohne erfolgen!
Zum Thema XML, ich weiß nicht, ob alle Clients da mitspielen, mir ist Html + Javascript Css verpackt in Perl z.B. das sicherste, man weiß ja nie bei den Win-PCs!

Danke für das viele Posten!
Gruß Frank aus LE - die leider 2012 verpasst haben :-(
 
also so wie ich das sehe, wär AJAX definitiv das richtige für dich, und ich denk mal das sind alles windows 2000 clients ? und da man die normalerweise aktuell halten soll, sollt da auch IE6 drauf laufen .. zur not damit argumentieren warum man an jedem rechner des blöde ding installieren muss : "es ist nötig wegen der sicherheit" ..
dann ist mit AJAX und JS kein problem mehr .. (; solange du JS auch beherrscht

hier mal 2 links die dir da weiterhelfen:
http://www.xml.com/pub/a/2005/02/09/xml-http-request.html
http://developer.apple.com/internet/webcontent/xmlhttpreq.html

und hier apples beispiel seite (die arbeitet über ne statische xml datei .. aber das tut nix zur sache, da man ja auch mit php eine xml datei ausgeben kann (oder perl... ):
http://developer.apple.com/internet/webcontent/XMLHttpRequestExample/example.html

damit solltest du dein "problem" mit ca. 2 stunden in die quellcodes reindenkzeit und 5 minuten programmierarbeit wenn man soweit ist, lösen können (;

die frage ist halt welche "vorraussetzungen" die windowsclients bieten ... sind die mit XP (kein problem dann mit ajax) oder sind sie mit 95 ausgestattet...
zur not reicht die installation des Opera 8.0 oder des Firefox und das ganze läuft.. und man kann da zur not vor dem cheffe mit "ist für die sicherheit und stabilität der systeme" argumentieren .. (wenn er nich schon von selbst normalerweise damit ankommt...)
 
Es macht IMO keinen Sinn eine Seite staendig neu zu generieren, wenn sich in der DB ueberhaupt nichts geaendert hat. Ich wuerde das also getriggert aktualisieren, wenn sich was an der DB aendert.

Content in eine Datei schreiben lassen (wenn Aenderung da), make(1) und perl-Skripte verwursteln dass dann zu statischen HTML-Seiten. Der HTML-Code sorgt fuer die noetigen Refreshs.

Achja, bleib bei Perl. PHP ist viel zu sehr gehypt und ist im Prinzip die gleiche Scheisse. JSP oder Ruby waeren interessante Alternativen.
 
Relaod und Cacheing ist zu ziemlich das räudigste Thema unter Webbrowsern. Wenn es sich einrichten lässt, würde ich dazu raten etwas anderes als eine WWW-Seite zu nehmen. Java z.B.

Oder du rufst in der Datenbank einen Trigger auf der bspw. via PL/Perl eine Mason-Komponente triggert. Mason ist nämlich was feines, wenn man Perl benutzen will.


Das Vorhandensein von Büchern und hype ist im übrigen kein Qualitätsmerkmal, oder warum bist du hier im BSDforum?
 
Hi!

Ich hatte vor kurzen das selbe Problem, dass ich immer aktuelle Daten aus der Datenbank laden musste und diesen dann auf einer Seite dargestellt werden sollten. Weil mir aber das ständige neuladen der Seite nicht gefiel, habe ich das ganze dann über ein verstecktes(höhe und breite null) iframe gemacht.
Die Seite im iframe wurde regelmäßig neu geladen und die neuen Daten dann per javascript auf die ursprungsseite geschrieben.

Kann man vielleicht auch anders lösen, aber so läuft es auch und man hat kein ständiges neu laden der ganzen Seite.
 
Hallo nochmal und danke für die Tipps!

Also: Alle WinClients haben Windows 2000 SP3 drauf, Anzahl ca. 500- 800!
Ich habe keine Zugang zu den PC, da sie über viele Häuser in einem sehr großem Klinikum verteilt sind! Im Durschnitt sind da nur IE 5.0 oder max. IE 5.5 drauf, kein WinXP und kein IE 6.0!
Ich muß gewährleisten, dass das Programm auf jeder Möhre von Win-PC läuft, schnell und stabil! Also fällt Java wohl flach!
Ich werde Perl benutzen, JavaScript evt. und hoffe dass es so geht! Das mit dem Anpingen der DB ist eine gute Idee, muß mir nur noch ein Konzept einfallen lassen!
Alle anderen Ideen sind sicher auch gut, haben aber hier ihre Grenzen! Ich administriere nur die DB, nicht mal den SQL-Server und die Apache-Administration muß auch von extern geschehen. Alles sehr bescheiden!

Danke nochmal an das Forum, falls jemand eine Idee mit dem Ping und der Perleinbettung hat, bitte her damit!

Gruß Frank aus LE - die es 2012 verdient hätten!
 
VanDom schrieb:
Hi!

Ich hatte vor kurzen das selbe Problem, dass ich immer aktuelle Daten aus der Datenbank laden musste und diesen dann auf einer Seite dargestellt werden sollten. Weil mir aber das ständige neuladen der Seite nicht gefiel, habe ich das ganze dann über ein verstecktes(höhe und breite null) iframe gemacht.
Die Seite im iframe wurde regelmäßig neu geladen und die neuen Daten dann per javascript auf die ursprungsseite geschrieben.

Kann man vielleicht auch anders lösen, aber so läuft es auch und man hat kein ständiges neu laden der ganzen Seite.

Danke! Klingt nicht übel!!!
 
ChaosKind schrieb:
und hier apples beispiel seite (die arbeitet über ne statische xml datei .. aber das tut nix zur sache, da man ja auch mit php eine xml datei ausgeben kann (oder perl... ):
http://developer.apple.com/internet/webcontent/XMLHttpRequestExample/example.html

Danke für den Tipp, das sieht ganz gut aus, sollte man mit Perl auch hinbekommen!
Hier wird die Eingabe (s.Link) aber vom User in der Seite vorgenommen und dann erfolgt die Aktualisierung, bei mir muß die Seite es selbst tun!
Anderes Problem ist die Serverbelastung bei einer Anfrage von alle 10sek. und vielen Clients. Ich überlege, ob ich die DB-Verbindung permanent mache und nicht temporär wie in meinen aktuellen Projekt. Dann sind aber ca. 100-300 Clients in der DB ständig aktiv - Frage Unsinn oder nicht?
 
permanente connection is da wohl wirklich die bessere wahl, musst halt bedenken das entwedern alle 10 sekunden 300 clients connection aufbauen, oder 300 clients bereits verbunden sind und hin und alle 10 sekunden ne sql query schiessen..
ist weniger belastend für den server..
und soweit ich weiss bleibt, zumindestens bei php, die permanente connection für das script (egal wer es aufruft) bestehen .. heisst soviel wie wenn 10 clients die gleiche datei aufrufen is die verbindung für alle die eine die man aufgebaut hat, genau weiss ichs nicht

und das mit dem example da kannst du über ein javascript mit setTimeout(function(), 15000) alle 15 sekunden aufrufen .. bisschen mehr in html/javascript etc reindenken und das ding steht (;
 
ChaosKind schrieb:
und das mit dem example da kannst du über ein javascript mit setTimeout(function(), 15000) alle 15 sekunden aufrufen .. bisschen mehr in html/javascript etc reindenken und das ding steht (;

Ich denke auch, dass ich das hinkriege...
Mit der DB-Anbindung bin ich bisher so vorgegangen:
Open DB
Select ... -> Array
Close DB
alles unmittelbar nacheinander, dann wurden die Variablen bzw. der Inhalt weiterverarbeitet.
Hier würde ich das Close DB erst starten, wenn man die Seite verläßt, also Button usw. drückt! Die Frage ist nur, was wenn einer den Browser einfach per Closebutton schließt - bekanntes X in der Titelleiste - ist dann die DB ordnungsgemäß geschlossen ???
Man müßte das unbedingt vorher checken, da die Rechner permanent laufen und so immer mehr offene Verbindungen entstehen, falls der MySQL-Server sie nicht automatisch per timeout schließt!
Ideen?!
 
Die Datenbank Verbindung (Seassion) wird doch automatisch beim beenden des Scripts geschlossen. Jedenfalls ist es bei PHP so. Ich denke das es bei Perl genauso ist, es geht ja nicht anders. Es können ja keine Variablen bzw. Filehandler über mehrere Aufrufe hinweg erhalten bleiben.
 
tschepe schrieb:
Die Datenbank Verbindung (Seassion) wird doch automatisch beim beenden des Scripts geschlossen. Jedenfalls ist es bei PHP so. Ich denke das es bei Perl genauso ist, es geht ja nicht anders. Es können ja keine Variablen bzw. Filehandler über mehrere Aufrufe hinweg erhalten bleiben.

Nunja ich lagere gewöhnlich die Datenbank-Subroutinen in eine separate Datei aus, die dann von den jeweiligen Scripten aufgerufen werden, wenn der Aufruf zum Schließen der Verbindung aber nicht erfolgt ist, weil Programmabbruch, dann müßte doch noch die Verbindung bestehen, als eine Art Leiche, Zombieprozess oder sowas? Ich will das Thema und das Forum auch nicht unnötig nerven, es war nur so eine Überlegung! Wie gesagt PHP ist noch nicht meins, Perl schon und es sollte eine stetig wiederholende DB-Abfrage mit Ausgabe innerhalb eines CGI-Scriptes erfolgen!
 
franco98 schrieb:
Nunja ich lagere gewöhnlich die Datenbank-Subroutinen in eine separate Datei aus, die dann von den jeweiligen Scripten aufgerufen werden, ...

Und wie bindest du die Datei in dein Script ein? Per require oder use?
Dann wird lediglich der Inhalt der "Datenbank-Subroutinen-Datei" in dein Script rein kopiert und danach von Perl interpretiert. So mit kann da kein "Zombie" Prozess übrig bleiben.

franco98 schrieb:
... wenn der Aufruf zum Schließen der Verbindung aber nicht erfolgt ist, weil Programmabbruch, dann müßte doch noch die Verbindung bestehen, als eine Art Leiche, Zombieprozess oder sowas? ...

Ich will doch stark hoffen das der Perl Interpreter nach getaner Arbeit auch wieder schön aufräumt. Wenn Verbindungen als eine art Leiche oder Zombie weiterhin bestehen würden, stellt sich die frage wie du die ansprechen willst?
Über ein socket :D?

Du könntest eine Perl Script schreiben das Ständig im Hintergrund läuft und eine verbindung zum Datenbank Server aufrecht erhält und mit deinem CGI Script über ein Satz an Pipes kommuniziert (oder ähnliches). Aber ob das besser ist als ein connect & disconnect...

Hast du es schon ausprobier, ob es das connecten & disconnecten wirklich so sehr rausreist?
 
tschepe schrieb:
Und wie bindest du die Datei in dein Script ein? Per require oder use?

Ich nutze require!
Ich habe mal im Win mit einem MySQL-AdminTool getestet, wieviele Verbindungen so offen sind und die DB mit Perl in der Cmd.exe zeilenweise angesprochen, solange kein disconnect erfolgte ist die Verbindung noch offen!
Wäre die Frage letztlich, wie viele Clients der Server dauerhaft verkraftet, es sind leider Windows-PCs!
Ich würde sonst was geben, den Server selber aufzusetzen und BSD einzuspielen, aber der Admin ist ein starrköpfiger Windowsliebhaber und ich ein normaler User!!!
 
Zurück
Oben