Forum: PC-Programmierung Mehrere PHP Skripte nacheinander ausführen


von Kolja L. (kolja82)


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ß

von TestX (Gast)


Lesenswert?

shell script

von HDA (Gast)


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.

von Kolja L. (kolja82)


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ß

von Peter II (Gast)


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?

von Kolja L. (kolja82)


Lesenswert?

Hallo Peter

Ob PHP die richtige Spreche dafür ist,
kann ich nicht beurteilen.
Die Skripte durchsuchen eine Datenbank mit 2 Millionen Einträgen
und erstellen daraus CVS Dateien.

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

von Julian .. (juliank)


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.

von Peter II (Gast)


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.

von Kolja L. (kolja82)


Lesenswert?

Mit wget hatte ich es schon versucht, aber damit werden keine csv 
Dateien erstellt.

von Peter II (Gast)


Lesenswert?

Kolja L. schrieb:
> Mit wget hatte ich es schon versucht, aber damit werden keine csv
> Dateien erstellt.

schreibt die PHP-script dierekt die Datei oder wird sie als Download 
angeboten?

Kannst du uns das PHP script zeigen?

von Julian .. (juliank)


Lesenswert?

Kolja L. schrieb:
> Mit wget hatte ich es schon versucht, aber damit werden keine csv
> Dateien erstellt.

Und wieso nicht? Fehlermeldung? Wget macht nix anderes anderes als dein 
ie.
Das Ergebnis der Anfrage landet halt direkt auf der Platte (vermutlich 
mit .php als Dateiendung).

Zeige mal den Code...

von Kolja L. (kolja82)


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!

von Webdödel (Gast)


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.

von ??? (Gast)


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.

von Kolja L. (kolja82)


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.

von Shidori (Gast)


Lesenswert?

<?PHP
exec("sudo /usr/bin/php /path/to/file.php  > /dev/null &");
?>

von Philipp K. (philipp_k59)


Lesenswert?

Vielleicht ein einfaches header() als Weiterleitung auf sich selbst mit 
übergebenem GET Parameter als Dateinamennummer für einen Array.

Setzt voraus das nen Browser zum Aufruf auf ist der nicht gerade selbst 
schliesst.

von Julian .. (juliank)


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....

von Philipp K. (philipp_k59)


Lesenswert?

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.

von Julian .. (juliank)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.