Cronjob

Alles, was PHP betrifft, kann hier besprochen werden.

Cronjob

Postby thomas34 » 28. December 2005 11:15

Erstmal Hallo zusammen,
ich habe mir XAMPP für Windows installiert und es läuft auch alles.
Nun habe ich versucht ein Script über einen geplanten Task auszuführen.
Z:\xampp\xampp\php\php4\phpcli.exe -f "Z:\xampp\xampp\htdocs\web\insert.php"

Das Script soll eine DB leeren und dann wieder füllen. Das Leeren der DB klappt auch, aber es wird nichts wieder hereingeschrieben.
Kann das an irgendeiner Rechtevergabe liegen?
Kann die insert.php über header(Location:dateix.php) eine weitere Datei aufrufen?
Danke schonmal
Thomas
thomas34
 
Posts: 12
Joined: 28. December 2005 11:04

Postby Wiedmann » 28. December 2005 11:28

Das Script soll eine DB leeren und dann wieder füllen. Das Leeren der DB klappt auch, aber es wird nichts wieder hereingeschrieben.
Kann das an irgendeiner Rechtevergabe liegen?

k.a. Immerhin wird das Script ja wohl schonmal ausgeführt (leeren). Jetzt ist es an dir ein Fehlerlog-/Auswertung zu aktivieren um den Fehler einzugrenzen.

Kann die insert.php über header(Location:dateix.php) eine weitere Datei aufrufen?

Einen (HTTP-) Header gibt es natürlich nur wenn ein Script über einen Webserver aufgerufen wird (eben über das Protokoll HTTP).
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby thomas34 » 28. December 2005 11:43

Hallo,
vielen Dank für die schnelle Antwort.
Jetzt habe ich aber gleich die nächste Frage.
Wie kann ich ein Fehlerlog-/Auswertung starten?
Thomas
thomas34
 
Posts: 12
Joined: 28. December 2005 11:04

Postby Tango » 28. December 2005 12:15

also ich habe mir damals Apanatschi instaliert, und von dort aus beobachte ich die log dateien
User avatar
Tango
 
Posts: 89
Joined: 18. October 2004 06:06
Location: Aachen

Postby Wiedmann » 28. December 2005 12:25

Wie kann ich ein Fehlerlog-/Auswertung starten?

Die erste Frage wäre ja, tut das Script direkt in der Konsole mit diesem Aufruf? (da sieht man ja die Ausgaben)

Ansonsten:
http://de.php.net/manual/en/ref.errorfunc.php
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby thomas34 » 28. December 2005 13:11

In der Konsole sagt das Script:
Warning: file <warengruppen.txt>: failed to open stream: No such file or directory in C:\xampp\xampp\htdocs\web\insert.php on line 13

und das nochmal mit 2 anderen Dateien. Ich habe auch schon versucht die Pfadangaben zu ändern und alle Dateien in das selbe Verzeichnis, erhalte aber immer diese Meldung.

Hier das komplette Script:

$conn_id = mysql_connect($host,$id,$pw);
mysql_select_db($database,$conn_id) or die("Datenbankzugriff gescheitert!");

mysql_query("TRUNCATE TABLE db_egis");

$find=file("warengruppen.txt");
$ein="produkte.csv";
unlink("ende.txt");

foreach(file($ein) as $zeile){
$einzeln=explode(';',$zeile);
if(!empty($einzeln[8]) && $einzeln[8]>0 && !ereg("-",$einzeln[8])){
for($i=0;$i<sizeof($find);$i++){
if(rtrim($find[$i])==$einzeln[4]){
$einzeln[4]=rtrim($find[$i]);
if(ereg("-->",$einzeln[4])){
$kat1="";
$kat2="";
$kat3="";
$kat=array();
$pattern="-->";
$kat=explode($pattern,$einzeln[4]);
if(isset($kat[0]) && isset($kat[1]) && isset($kat[2])){
$kat3=substr($kat[2],0,strrpos($kat[2],'"'));
$kat2=$kat[1];
$kat1=substr($kat[0],1);
}elseif(isset($kat[0]) && isset($kat[1]) && !isset($kat[2])){
$kat3="";
$kat2=substr($kat[1],0,strrpos($kat[1],'"'));
$kat1=substr($kat[0],1);
}elseif(isset($kat[0]) && !isset($kat[1]) && !isset($kat[2])){
$kat3="";
$kat2="";
$kat1=substr($kat[0],1);
$kat1=substr($kat1,0,strrpos($kat1,'"'));
}
}else{
$kat =substr($einzeln[4],1);
$kat1=substr($kat,0,strrpos($kat,'"'));
$kat2="";
$kat3="";
}
$pcs_artnum1=substr($einzeln[0],1);
$pcs_artnum=substr($pcs_artnum1,0,strrpos($pcs_artnum1,'"'));
$lief_artnum1=substr($einzeln[1],1);
$lief_artnum=substr($lief_artnum1,0,strrpos($lief_artnum1,'"'));
$waren_gruppe1=substr($einzeln[4],1);
$waren_gruppe=substr($waren_gruppe1,0,strrpos($waren_gruppe1,'"'));
$pcs_bez1=substr($einzeln[5],1);
$pcs_bez=substr($pcs_bez1,0,strrpos($pcs_bez1,'"'));
$lieferant1=substr($einzeln[9],1);
$lieferant=substr($lieferant1,0,strrpos($lieferant1,'"'));
$hersteller1=substr($einzeln[10],1);
$hersteller=substr($hersteller1,0,strrpos($hersteller1,'"'));
$ean1=substr($einzeln[11],1);
$ean=substr($ean1,0,strrpos($ean1,'"'));

mysql_query("insert into db_egis (pcs_artnum, lief_artnum, datum, waren_gruppe, kat1, kat2, kat3, pcs_bez, ek, lieferant, hersteller, ean, menge) VALUES ('$pcs_artnum', '$lief_artnum','$einzeln[3]','$waren_gruppe', '$kat1', '$kat2', '$kat3', '$pcs_bez', '$einzeln[7]', '$lieferant', '$hersteller', '$ean', '$einzeln[8]')");
}
}
}
}

Hm, hat noch jemand 'ne Idee?
thomas34
 
Posts: 12
Joined: 28. December 2005 11:04

Postby Wiedmann » 28. December 2005 13:54

Die willst das hier lesen:
http://de.php.net/manual/en/features.commandline.php
--> Remarkable differences of the CLI SAPI compared to other SAPIs
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby thomas34 » 28. December 2005 14:34

Hollahiaho.
Ich glaube das habe ich nicht verstanden.
Das müßte doch mein Ansatzpunkt sein, oder?
Aber wie?
CLI wird standardmäßig im stillen Modus gestartet, dennoch gibt es die Optionen -q und --no-header aus Kompatibilitätsgründen noch, so dass Sie auch ältere CGI-Skripte noch benutzen können.
thomas34
 
Posts: 12
Joined: 28. December 2005 11:04

Postby Wiedmann » 28. December 2005 15:26

Nö, du hast ja ein Problem das er Dateien nicht findet... Das da bedeutet nur, dass das CLI bei diesen Parametern keinen Fehler bringt obwohl es sie eigentlich nicht kennt.

Der nächste Punkt:
It does not change the working directory to that of the script. (-C and --no-chdir switches kept for compatibility)
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby thomas34 » 28. December 2005 15:39

Also muß ich -C oder --no-chdir eingeben?
Kommt das ins Script oder als Parameter in die Kommandozeile?
Sorry, aber irgendwie blick ich das alles noch nicht.
thomas34
 
Posts: 12
Joined: 28. December 2005 11:04

Postby Wiedmann » 28. December 2005 16:06

Also muß ich -C oder --no-chdir eingeben?

Nein. Ist wie vorher. Das CLI akzeptiert die Parameter, kennt sie aber nicht.

Sorry, aber irgendwie blick ich das alles noch nicht.

Ist doch eigentlich simpel...

Wenn z.B. das aktuelle Arbeitsverzeichnis "C:\WINDOWS" ist und du rufst ein Script in "C:\xampp\xampp\htdocs\web" auf, dann
a) wechselt das PHP Modul das aktuelle Arbeitsverzeichnis in "C:\xampp\xampp\htdocs\web"

b) wechselt das PHP CGI das aktuelle Arbeitsverzeichnis in "C:\xampp\xampp\htdocs\web"

c) bleibt beim PHP CLI das aktuelle Arbeitsverzeichnis "C:\WINDOWS"

Und da dein Script die Dateien im aktuellen Arbeitsverzeichnis sucht...
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby thomas34 » 28. December 2005 16:56

Dann ist
C:\xampp\xampp\php\php4\
das aktuelle Arbeitsverzeichnis nach dem Aufruf?
Ich habe die Dateien schon in sämtliche Verzeichnisse kopiert (vor lauter Verzweiflung :-) - aber nichts.
Und auch wenn ich im Script
$find=file("C:\xampp\xampp\htdocs\web\warengruppen.txt");
schreibe, funktioniert es nicht.

Ist doch eigentlich simpel...

Dann wird's jetzt langsam peinlich
thomas34
 
Posts: 12
Joined: 28. December 2005 11:04

Postby Wiedmann » 28. December 2005 17:11

Dann ist "C:\xampp\xampp\php\php4\" das aktuelle Arbeitsverzeichnis nach dem Aufruf?

Kene Ahnung wo du da bist. Das steht in der Konsole normalerweise da wo der Cursor blinkt. Kann man aber im Script herausfinden mit:
Code: Select all
echo getcwd();


Ich habe die Dateien schon in sämtliche Verzeichnisse kopiert

Das ist auch eine Lösung. man könnte auch am Anfang /im/ Script in das Verzeicnis wechseln wo das Script ist:
Code: Select all
chdir(__FILE__);


Und auch wenn ich im Script
Code: Select all
$find=file("C:\xampp\xampp\htdocs\web\warengruppen.txt");

schreibe, funktioniert es nicht.

Lese: http://de.php.net/manual/en/language.types.string.php
Insbesondere was es dort über Backslashs zu lesen gibt.

BTW ist es immer eine gute Idee bei Pfadangaben Forwardslashs zu verwenden (auch unter Windows).
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby thomas34 » 28. December 2005 17:38

Oh Mann, vielen Dank für Deine Geduld!
Nun funktioniert es :-)
Nur die Header(Location:dateix.php) nicht, aber das war ja schon geklärt.
Gibt es eine andere Möglichkeit oder muß ich alles in ein Script packen?
Gruß
Thomas
thomas34
 
Posts: 12
Joined: 28. December 2005 11:04

Postby Wiedmann » 28. December 2005 17:46

Gibt es eine andere Möglichkeit oder muß ich alles in ein Script packen?

Kommt auf das Script daruf an. Es gäbe da include(), exec() usw. oder beide Scripte hintereinander über eine Batchdatei ausführen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests