Mehrere PHP Skripte nacheinander ausführen

OP #4434047
Lesenswert?

Hallo

Für eine Datenauswertung habe ich acht PHP Sktipte,
die sich alle sehr ähneln.

Jedes Skript hat eine Laufzeit von mehr als einer Stunde.
Parallel kann ich die nicht laufen lassen, das schafft der Rechner 
nicht.
Weil ich aber auch nicht warten will bis das erste Skript fertig ist,
nur um das zweite anzuklicken, dachte ich mir,
dass am Ende eines Jeden das nächste aufgerufen wird.

Nur bekomme ich da sofort folgende Fehlermeldung:

Fatal error: Cannot redeclare zeit()

Was ja auch Sinn macht, denn in der 2. Datei ist die Funktion Zeit auch 
enthalten.
Insgesamt gibt es zwischen 4 und 8 Funktionen pro Datei,
welche sich fast immer unterscheiden.

Gibt es eine Möglichkeit, dass die acht Dateien nacheinander aufgerufen 
werden,
ohne das Funktionswerte üpbergeben werden?


Danke und Gruß
Gast #4434072
Lesenswert?

Wieso packst Du nicht alle in eine Datei?

Du müssest halt nur die Namen von Variablen und Funktionen anpassen.

Außerdem scheint es ja so sein, dass sich die Skripte alle ähneln.
Hier lässt sich bestimmt auch den Programm-Code optimieren, gerade was 
die Ausführungszeit angeht.
OP #4434105
Lesenswert?

Weil ich da jetzt nicht noch Zeit in das einarbeiten von den Skripten 
stecken möchte.
An jedes Ende eines Skriptes einen Aufruf einzufügen, hält sich ja noch 
in Grenzen,
aber jetzt noch anfangen was genau da zu optimieren ist,
ginge zu weit.

Shell bzw Batch ist natürlich ne Möglichkeit,
aber wie kann das Batch Skript wissen,
wann das PHP Skript fertig ist.

Danke und Gruß
Gast #4434108
Lesenswert?

Kolja L. schrieb:
> Shell bzw Batch ist natürlich ne Möglichkeit,
> aber wie kann das Batch Skript wissen,
> wann das PHP Skript fertig ist.

es wartet doch bis der befehl ausgeführt wurde.
1
php script1.php
2
php script2.php
3
php script3.php

warum dauern die scripte so lange? Eventuell ist ja php dafür nicht die 
richtige sprache?
#4434178
Lesenswert?

Kolja L. schrieb:
> Ob PHP die richtige Spreche dafür ist,
> kann ich nicht beurteilen.

Man kann mit php hat schnell irgendwas mit webseite zusammenbasteln.

> Die Skripte durchsuchen eine Datenbank mit 2 Millionen Einträgen
> und erstellen daraus CVS Dateien.

Und dafür brauch da teil 1 Stunde? Ernsthaft? Das geht mit Sicherheit 
viel schneller (< 1 Min) wenn man den Code etwas optimiert und/oder die 
Arbeit der Datenbank gibt. Dafür sind de nämlich erfunden worden.

> Ich habe mir einfach eine Batch Datei erstellt und rufe von dort den IE
> mit der entsprechenden URL auf:
>
> start iexplore http://127.0.0.1:7777/uni/8_AP_DOC.php

Na das ist doch schon brauchbar. Nimm wget an statt start iexplore und 
schreib die Aufrufe in einer Batch untereinander.
Gast #4434183
Lesenswert?

Kolja L. schrieb:
> Ich habe mir einfach eine Batch Datei erstellt und rufe von dort den IE
> mit der entsprechenden URL auf:
>
> start iexplore http://127.0.0.1:7777/uni/8_AP_DOC.php
>
> Gruß Kolja

viel zu umständlich. Warum erst eine webabfrage starten?

Man kann den php interpretet auch einfach so starten ohne das man ein 
webserver oder Client braucht.

irgendwo musst du eine php*.exe haben. Diese startest du einfach und 
übergibst als Parameter den Dateiname von dem script.


> Die Skripte durchsuchen eine Datenbank mit 2 Millionen Einträgen
> und erstellen daraus CVS Dateien.
das mache in Täglich in Datenbanken mit >200 Millionen Einträgen und das 
dauert nur Minuten.
OP #4434208
Lesenswert?

Code veröffentlichen geht nicht, da es nicht meiner ist.
Forschungsprojekt der Uni...

So schreibt das Skript die Daten in die Datei:

      $fh = fopen("LP_DAT.csv", "a");
      $kopfzeile = "LP;;DAT;;Leistung; \n 
Datum;Uhrzeit;;min;durchschn.;max \n";
      fwrite($fh, $kopfzeile);

Danke für die Hilfe!
Gast #4434216
Lesenswert?

Vermutlich sind die SQL-Abfragen oder das DB-Design Schrott oder die 
Kiste hat zu wenig Speicher, PHP hat per Webserver zu wenig RAM 
zugewiesen bekommen oder ....

Ohne mehr Infos kann man da keine zwingend schnellere Lösung geben.
Gast #4434219
Lesenswert?

Also da kannst Du entweder die Hinweise nehmen das in ein einzelnes 
Script zu packen, vor allem wenn da immer wieder das gleiche gemacht 
wird oder Du machst einen cronjob bzw. wenn Win eine batch die dann 
automatisch ausgeführt wird.
Und was für eine Datenbank ist das wenn die solange braucht, sollte man 
mal über's SQL drübergucken und vor allem ob da auch Primärkeys drin 
sind.
Kenne da so einiges wildes vor allem im MS-Office Bereich ...
Eine einfache Umstellung der Tabellen im SQL kann da schon das doppelte 
bis dreifache an Geschwindigkeit herausholen.
OP #4434221
Lesenswert?

Es müssen alle 8 Dateien einmal durchlaufen.
Dazu kann ich jetzt immer eine starten, warten und dann die nächste 
starten.
Damit bin ich nach 2 tagen und 8 Klicks durch.

Ich wollte mir doch nur die 8 Klicks sparen...

Jetzt läuft es über Batch, den IE und nach jedem Start warte ich einfach 
2 Stunden.
Damit sollte es morgen abend fertig sein.
#4434229
Lesenswert?

Kolja L. schrieb:
> Code veröffentlichen geht nicht, da es nicht meiner ist.
> Forschungsprojekt der Uni...

So musst du wohl weiter 1 Stunde auf Ergebnisse warten.
Oder geh den schlagen der das verbrochen hat.

> So schreibt das Skript die Daten in die Datei:
>
>       $fh = fopen("LP_DAT.csv", "a");
>       $kopfzeile = "LP;;DAT;;Leistung; \n
> Datum;Uhrzeit;;min;durchschn.;max \n";
>       fwrite($fh, $kopfzeile);

Dann ist mir aber nicht klar warum das mit wget nicht geht. 
Fehlermeldung? Mit dem http-Request wird ja nur der Interpreter 
gestartet. Ausgabe erfolgt ja auf anderem wege.

Insgesamt eine eher fragwürdige "Konstruktion".

> Danke für die Hilfe!

Gerne doch. Ohne Code geht aber nicht viel mehr....
#4434243
Lesenswert?

Philipp K. schrieb:
> Julian .. schrieb:
>> Mit dem http-Request wird ja nur der Interpreter
>> gestartet.
>
> Vielleicht ist das ein User und Rechte Problem (BASEDIR), bzw wird dann
> fopen Restricted, dann mal ausprobieren ob eine Hand erstellte Leere
> Datei befüllt wird.

Ob der http-Request vom ie oder wget erzeugt wird, spielt für alles was 
danach kommt doch keine rolle (ja, theoretisch kann da was drin sein, 
halte ich jedoch auf Grund der Qualität des Aufbaus für 
unwahrscheinlich).

Vermutlich läuft wget in einen timeout da keine Daten vom Script kommen.
Das könnte man per --read-timeout=SECONDS aber anpassen.

Alternativ das Script richtig(tm) machen.
Leider ist das keine Option.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren