php file abarbeiten ohne Browser zu starten?

C

comrat

Aktives Mitglied
Thread Starter
Dabei seit
27.12.2004
Beiträge
112
Reaktionspunkte
0
Hallo,

ist es möglich eine php-Datei abarbeiten zu lassen ohne daß der Browser diese aufruft?

Ich brauche ich dieses Verfahren um permanente Datenbank-Prüfungen im Hintergrund laufen zu lassen. Statt permanent möchte ich diese später regelmäßig laufen lassen, ausgelöst durch einen Terminplaner. Nannte man den scheduler? Danke.

Wie umgehe ich das Problem der begrenzten Ladezeit des Browsers Safari? Nach meiner kurzen Erfahrung mit ihm, bricht dieser nach 60 Sekunden ab. Und wie umgehe ich einen:
zitat-anfang
fatal error: Maximum execution time of 30 seconds exceeded in [...]/create_stock.php on line 141
zitat-ende

Mir ist klar, daß dies grundsätzlich an einem schlecht strukturierten Programmablauf oder Datenbestand liegt. Dieser wird auch unverzüglich bereinigt - den Fehler glaube ich schon erkannt zu haben. Interessehalber: Kann ich jedoch kurzzeitig alle genannten Zeitgrenzen ausdehnen, um festzustellen, wie sich das Problem dann verhält?

Dankbar bin ich für ein paar Stichworte, den genannten Aufgaben zugeordnet, damit ich weiß an welchem Lesestoff ich mein Wissen vertiefen muß. Ganz herzlichen Dank für Eure Zeit und Mühe.
 
Zuletzt bearbeitet:
comrat schrieb:
ist es möglich eine php-Datei abarbeiten zu lassen ohne daß der Browser diese aufruft?

Ja, hier steht wie:
php3.de/manual/en/features.commandline.php

Sieht mir aber nicht nach Spaß aus...

Grüße,
Flo
 
comrat schrieb:
Hallo,

ist es möglich eine php-Datei abarbeiten zu lassen ohne daß der Browser diese aufruft?

'türlich. In der Shell eingeben: php dateiname.php
Und wenn es in regelmäßigen Abständen ausgeführt werden soll, einfach in die crontab eintragen

comrat schrieb:
... das Problem der begrenzten Ladezeit des Browsers Safari? Nach meiner kurzen Erfahrung mit ihm, bricht dieser nach 60 Sekunden ab. Und wie umgehe ich einen:
zitat-anfang
fatal error: Maximum execution time of 30 seconds exceeded in [...]/create_stock.php on line 141
zitat-ende
In der /etc/php.ini die Zeile
max_execution_time = 30 ; Maximum execution time of each script, in seconds
suchen und entsprechend abändern.
Hat übrigens nichts mit dem SAFARI zu tun. Da brechen alle Brwoser ab.

Gruß vom

McGyver
 
Zuletzt bearbeitet:
Danke für Eure prompten Antworten. Ich werde mir das genauer anschauen.
 
Zuletzt bearbeitet:
Witzigerweise wissen die wenigsten, daß PHP eine vollwertige Scriptsprache ist. Ich verwalte damit seit Jahren beruflich ne Menge Server. Einfach weil es lesbarer ist als z.B. Perl ( finde ich!). Geht ganz einfach. Unter UNIX muß in der ersten Zeile das sogenannte bang! stehen, also der Hinweis wer der Interpreter ist der diese Datei ausführen soll. Dazu wird hinter dem Bang ("#!") einfach der Pfad zum Interpreter angegeben ( hier eben PHP) und schon kann es losgehen:

In dem Beispiel hier gehe ich von einer entropy.ch-Installation aus:

PHP:
#! /usr/local/php5/bin/php
<?
  print "Ich bin ein Shellprogramm\n";
?>

damit stehen einem PHP und alle Extensions( auch die GD-Lib oder TCP/IP-Funktionen oder FTP-Zugänge auf andere Server offen). Sofern per php.ini erlaubt, kann man auch argc,argv für Startparameter verwenden. Ich verwende diese form des Skriptens als quasi typfreien C-Interpreter schon lange. Seit PHP dabei auch richtig zügig geworden ist, geht das auchsehr angenehm. Damit lassen sich remot-DB's syncen. Backups fahren. Sogar einen Mailfilter für die Firma habe ichmal in PHP geschrieben. Der hat mir zuverlässig alle .EXE, .PIF und Konsorten aus mails entfernt und konnte per Konfiguratiosndatei um Extensions, User und Rechte verändert werden. PHP ist viel mehr als nur eine Webserversprache :D

enjoy & discover

Gruß Wegus
 
Das hört sich sehr interessant an.

Glaube ich… Verstanden hab ich's noch nicht… :D

Kannst Du mal kurz umreißen, wie ich z.B. alle 10 Sekunden eine neue Datei anlege (oder sowas) ohne die PHP-Datei per Hand oder crontab aufzurufen?
 
Zuletzt bearbeitet:
Ne Endlos-Schleife mit den gewünschten Kommandos und einem "sleep 10" sollte da schon genügen.
 
Zuletzt bearbeitet:
Ja, das is klar, aber wegus meint, das geht auch ohne das zutun des Users/eines Programms, wenn ich ihn richtig verstanden habe.

Wenn ich nur den Code schreibe und ihn auf nen Server setze wird er ja ohne terminal oder Browser nicht ausgeführt, außer -anscheinend- mit wegus Bang!
 
Jakob schrieb:
Ja, das is klar, aber wegus meint, das geht auch ohne das zutun des Users/eines Programms, wenn ich ihn richtig verstanden habe.
...
Das wäre ja schrecklich.

Jakob schrieb:
...
Wenn ich nur den Code schreibe und ihn auf nen Server setze wird er ja ohne terminal oder Browser nicht ausgeführt, außer -anscheinend- mit wegus Bang!
Nein, da hast Du was missverstanden.
Der bang oder shebang gibt nur den Interpreter an, der verwendet wird, um den Programmtext in prozessorlesbare Befehle zu übersetzen.
Das heisst man kann ein solches Skript einfach über seinen Namen aufrufen und das System weiss dann, ob es das Skript an Perl, Python, einen Shellinterpreter oder eben z. B. an PHP zur Ausführung übergeben muss.

Anstelle von
php ./meinSkript
genügt dann
./meinSkript
 
Zuletzt bearbeitet:
Ah! Danke.

Hatte mich echt gewundert, wenn's das wirklich gäbe wäre wahrscheinlich recht viel Schabernack damit zu betreiben.
 
Jakob:
alle 10 Sekunden eine neue Datei anlege (oder sowas) ohne die PHP-Datei per Hand oder crontab aufzurufen?

Nö, das hab ich so nicht gesagt! Mit dem Bang kannst Du die Datei wie ein Executable handhaben. Also ein chmod u+x auf die Datei und sie ist ausführbar wie jedes andere Shellprogramm, ohne explizit den Interpreter aufzurufen. Auch bei einer nativen Exe-Datei brauchst Du einen Urprozeß um die anderen zu verwalten. Der muß einmal gestartet werden. Anders kann es gar nicht gehen. Somit kannst Du aber ein PHP-Programm zum spawnen der Anderen Programme schreiben. Den Start kannst Du dann per crontab veranlassen. In Deinem Fall wäre das ein z.B. stündlicher cronjob, der einen Prozeß startet ( in PHP), der abhängig von der DB-Situation einzelne Prüfungen veranlaßt, diese durchführt und die Ergebnisse archiviert. Ich bekomme so täglich log-Einträge von DB-Syncronisationen die 2stündlich ablaufen. Wichtige Dinge teilen mir die Programme per mail mit. Alles durch per cronjob aktivierte PHP-Skripte. So bin ich immer auf dem Laufenden.
 
Das hört sich interessant an.

Könnte man bestimmt auch mit includes machen (eine Hauptdatei includet und verarbeitet) aber so sieht's einfacher aus.

Muss ich mir mal angucken.
 
Zurück
Oben Unten