mikrocontroller.net

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


Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: TestX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
shell script

Autor: HDA (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
php script1.php
php script2.php
php script3.php

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

Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Julian .k (juliank)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kolja L. (kolja82)
Datum:

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

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Julian .k (juliank)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Webdödel (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: ??? (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Shidori (Gast)
Datum:

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

Autor: Philipp K. (philipp_k59)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Julian .k (juliank)
Datum:

Bewertung
1 lesenswert
nicht 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....

Autor: Philipp K. (philipp_k59)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Julian .k (juliank)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.