PHP-Script verursacht Log einträge, wie abschalten?

Status
Für weitere Antworten geschlossen.

Cetax

Benutzer
Mitglied seit
18. Okt 2011
Beiträge
25
Punkte für Reaktionen
0
Punkte
1
Hallo liebe Leute,
ich finde den Fehler bzw. den Eintrag nicht, um das schreiben einer Log-Datei abzuschalten.
Also folgendes, ich habe hier ein PHP-Script, welche eine Shell-Script ausführt und dabei wird
wget benutzt, wget schreibt ein Logfile. Da das PHP-Script alles 10 minuten neu aufgerufen wird,
werden es verdamt viele Logfiles.
Also ich habe vor einpaar Tagen im Apachen System rumgefummelt und warscheinlich irgendwas
geändert und finde es nicht wieder. :(
Das PHP-Script funktioniert super.
Was ich aber rausgefunden habe, ist das, wenn ich das Shell-Script auf der Konsole (./fritz.sh) ausführe,
macht es kein Logfile !
Das passiert nur mit dem PHP-Script!

Hier das PHP-Script:
PHP:
<?
error_reporting(E_ALL);
$fp=pfsockopen("192.168.178.111",23);
if(!$fp)
       {
       echo "<font color=\"#FFFFCC\"><strong>Verbindung Fehlgeschlagen<br>Versuche es säter nochmal !</strong></font>";
       exit();
       }
else 
       { 
sleep(2);
fputs($fp,"root\r");      //Benutzer eingabe
sleep(2);
fputs($fp,"12345\r");  //Passwort eingabe
sleep(2);
fputs($fp,"cd /volume1/web/Visu/callmonitor\r");
sleep(2);
fputs($fp,"sh fritz.sh\r\n");
sleep(3);
}
fclose($fp);
?>

Und hier das Shell-Script:
Rich (BBCode):
#!/bin/sh

# Challenge abholen
ChallengeXML=`wget -O - "http://192.168.178.1/cgi-bin/webcm?getpage=../html/login_sid.xml" 2>/dev/null| grep Challenge`
Challenge=`echo $ChallengeXML | awk '{match($0,/>[^<>]+</); print substr($0,RSTART+1,RLENGTH-2)}'`

Passwd="12345"

# login aufbauen und hashen
CPSTR="$Challenge-$Passwd"
MD5=`echo -n $CPSTR | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}'`
RESPONSE="$Challenge-$MD5"
POSTDATA="login:command/response=$RESPONSE&getpage=../html/de/menus/menu2.html"

# login senden und SID herausfischen
SID=`wget -O - --post-data="$POSTDATA" "http://192.168.178.1/cgi-bin/webcm" 2>/dev/null| grep "name=\"sid\"" | head -1 | awk '{match($0,/value="[^"]+"/); print substr($0,RSTART+7,RLENGTH-8)}'`

# refresh der daten auslösen
wget -O /dev/null "http://192.168.178.1/cgi-bin/webcm?sid=$SID&getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&var%3Aactivtype=pppoe&var%3AtabInetstat=0&var%3Aweckernr=&logger%3Asettings%2Ffilter=2"

# CSV runterladen
wget -O ./fritz.csv "http://fritz.box/cgi-bin/webcm?sid=$SID&getpage=..%2Fhtml%2Fde%2FFRITZ%21Box_Anrufliste.csv"

Wo muss ich am Apachen drehen, das WGET oder PHP oder was weis ich, keine Logfiles mehr schreibt.
Bin schon am verzweifeln, mein Ordner Explodiert fast... :confused:

Danke für Eure Hilfe...
Greatz
Cetax
 

Stabmaster

Benutzer
Mitglied seit
04. Sep 2011
Beiträge
169
Punkte für Reaktionen
0
Punkte
0
Hallo Cetax,

ich weis jetzt leider nicht, wo genau die Logfiles erstellt werden. Sind diese im Pfad zu finden, wo das PHP/Bash-Script aufgerufen wird?
Ansonsten nenn einmal bitte den Pfad dazu.

Folgen die Dateinamen einer bestimmten Logik? Sprich heißen die alle gleich?
Ansonsten mach doch einfach ein Delete in deinem PHP-Script, welches die *.log Dateien löscht. Schon hast du dein Problem gelöst.

Mit freundlichen Grüßen

Frank
 

Cetax

Benutzer
Mitglied seit
18. Okt 2011
Beiträge
25
Punkte für Reaktionen
0
Punkte
1
Hallo Stabmaster,
die Logfiles befinden sich im selben Ordner und werden fortlaufend angelegt (wget-log, wget-log.1. wget-log.2, usw).
Ich habe jetzt versucht eine "löschanweisung" einzufügen, die auch funktioniert, aber wenn kein Logfile da ist, schmeiss er mir eine Fehlermeldung raus :
(Warning: unlink(wget-log): No such file or directory in /volume1/web/Visu/callmonitor/fritz1.php on line 26)

error_reporting(E_ALL); Ist Ausgeschaltet.

Hier mal mein Ansatz:
PHP:
<?
#error_reporting(E_ALL);
$fp=pfsockopen("192.168.178.111",23);
if(!$fp)
       {
       exit();
       }
else 
       { 
sleep(2);
fputs($fp,"root\r");      //Benutzer eingabe
sleep(3);
fputs($fp,"ch5fn7sb\r");  //Passwort eingabe
sleep(2);
fputs($fp,"cd /volume1/web/Visu/callmonitor\r");
sleep(1);
fputs($fp,"sh fritz.sh\r\n");
sleep(3);
}

if ($kill = 'wget-log') {
  unlink($kill);
    }
fclose($fp);
?>
Wie kann ich das abschalten? Hatte da an "else" gedacht, aber irgendwie kreig ich das nicht hin. :-(
Ich habe auch versucht Log-Dateien, die "wget-log.1","wget-log.2" usw. mit ein zubauen in die abrfage, aber das scheitert an mangelden php-kenntnissen :(

Haste vieleicht eine Lösung?
Danke dir für deine Hilfe.

Greatz
Cetax
 

Stabmaster

Benutzer
Mitglied seit
04. Sep 2011
Beiträge
169
Punkte für Reaktionen
0
Punkte
0
Versuch zu prüfen, ob die Datei überhaupt existiert. Ist dies der Fall, kannst du Sie löschen, ansonsten machst du nichts oder gibst eine Meldung aus.
Ggf. muss du den absoluten oder relativen Pfad zu der Datei angeben, aber da dürfte dir das php-manual sehr gut weiterhelfen.

PHP:
$kill = "wget-log";
if (file_exists($kill) ) { unlink($kill); } else { echo "Keine Log-Datei vorhanden!"; }

Was du hier mit einer Zuweisung machen möchtest, weis ich leider nicht. Vermutlich wolltest du ein Vergleich machen, der aber in meinen Augen keinen Sinn macht. ;-)

PHP:
if ($kill = 'wget-log') { 
  unlink($kill); 
    }

PHP:
 if ( $kill == "wget-log" ) ...
=> wäre ein Vergleich, deins ist eine Zuweisung ;-)

Alles in allen, sollte dies dein Problem beheben. Falls du noch Fragen hast, raus damit.

Mit freundlichen Grüßen
Frank
 

Cetax

Benutzer
Mitglied seit
18. Okt 2011
Beiträge
25
Punkte für Reaktionen
0
Punkte
1
Hi,
SUPER !! Vielen Dank funktioniert.
Manchmal sieht man den Wald vor lauter Bäumen nicht. ;-)
Natürlich wollte ich keinen Vergleich bzw. keine Zuweisung, aber als Anfänger verwechselt bzw.
versteht man manchmal was verkehrt.

Eine Frage habe ich noch, kann man bei PHP nicht den "*" benutzen um Sachen zu löschen etc. ?
Also ich meine, sowas :
PHP:
$kill = "wget-log*";        #<----
if (file_exists($kill) ) { 
   unlink($kill); 
} 
else 
{ 
}
Kann man nicht so fortlaufende Dateien löschen ?
Ich meine, es wird ja als erstes die "wget-log" angelegt und dann (wenn die datei nicht gelöscht wurde) "wget-log.1" und dann "wget-log.2" usw.
Auf der Konsole kann ich Dateien damit löschen ( rm wget-log* )

Oder wie löst man sowas ? Habe in mein "Kofler" (PHP 5.3) nix gefunden oder weiß nicht genau wo nach ich suche.

Aber ein GROSSES DANKE !!

Greatz
Cetax
 

Stabmaster

Benutzer
Mitglied seit
04. Sep 2011
Beiträge
169
Punkte für Reaktionen
0
Punkte
0
Das Asterisk-Zeichen (*) kannst du zum Löschen verwenden, wenn du den Befehl direkt auf der Konsole ausführst. D.h. du müsstest sowas wie
PHP:
 exec ("rm wget-log*")
ausführen. Dürfte aber bspw. nicht überall funktionieren, man hat nicht immer Zugriff auf die Konsole, vor allem auf gekauften Webspace.

Du hast demnach andere Möglichkeiten. PHP erschlägt hier einen mit zugehörigen Funktionen.
Schau mal nach der Funktion "glob" -> http://de3.php.net/manual/de/function.glob.php

Hiermit kannst du nach einem sogenannten Pattern deine Dateien suchen und per Schleife über das Ergebnis iterieren und dann die Dateien löschen.

also ungefähr so:

PHP:
foreach (glob("wget-log*") as $fname) {
unlink ($fname);
}

Ich denke, dass sollte dich zum gewünschten Ziel führen. Viel Spaß ... :)

Mit freundlichen Grüßen

Frank
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
2
Punkte
84
Pack das "rm ..." einfach in das Shellskript mit rein, deutlich einfacher als mit PHP.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat