opendir() geht nicht? ...

Ich versuche gerade über eine Funktion bzw. ein Script die Dateien in einem Ordner auf meiner Fritzbox zu zählen und die jüngste Datei herausfinden!?
Leider kann ich das Script nicht testen, weil schon der Aufruf opendir() eine Fehlermeldung bringt.

<?
	$dir='//192.168.3.1/Flashdisk-0-1/avm_tam/rec';
	$dirh=opendir($dir);
?>

Ergibt folgende Fehlermeldung:

<br />
<b>Warning</b>:  opendir(\\192.168.3.1\Flashdisk-0-1\avm_tam\rec) [<a href='function.opendir'>function.opendir</a>]: 
failed to open dir: Invalid argument in <b>E:\Programme\IP-SYMCON\scripts\.currentscript</b> 
on line <b>3</b><br />

Wo liegt denn jetzt der Fehler?? Hoffe da kann mir jemand weiter helfen!?

Gruß
Jens

Hallo Jens,

probier es mal hiermit.

$dir = "F:\BITMAPS";

$dh = opendir($dir);
echo "filename". $dir ;
closedir($dh);

Hallo,

ich kenne dein Problem. Ich habe auch meinen Anrufbeantworter von meiner Fritzbox über IPS laufen. Nur klappte opendir nicht auf der V2… deswegen bin ich noch bei Version 1.0.

Werde mal das von RWN@ ggf. mal die tage testen.

Gruß

Hallo Rainer,

hat leider keine Änderung gebracht …

@Hollowman: Ich nutze die V1 … aber auch da geht opendir nicht … zumindest nicht bei der Fritzbox. Kein Plan woran es liegt. :frowning:

$dir = "\\\\192.168.3.1\\Flashdisk-0-1\\avm_tam\\rec";
$dh = opendir($dir);
echo "filename".$dir ;
closedir($dh);

Egal ob ich meine 1. Pfadvariante und diese hier benutze … immer der gleiche Fehler:

<br />
<b>Warning</b>:  opendir(//192.168.3.1/Flashdisk-0-1/avm_tam/rec) [<a href='function.opendir'>function.opendir</a>]: 
failed to open dir: Invalid argument in <b>E:\Programme\IP-SYMCON\scripts\.currentscript</b> on line <b>6</b><br />
filename//192.168.3.1/Flashdisk-0-1/avm_tam/rec<br />
<b>Warning</b>:  closedir(): supplied argument is not a valid Directory resource 
in <b>E:\Programme\IP-SYMCON\scripts\.currentscript</b> on line <b>8</b><br />

Jens

Hallo Jens,

es ist wohl in der Tat so, das opendir() nicht im Netzwerk funktioniert, zumindest nicht ohne größere Klimmzüge.

Im lokalen Netz kein Problem. Das Netz ist voll mit Fragen, leider keine vernünftige Antwort. :frowning:

Nach einigem hin und her in diversen Foren habe ich jetzt probiert über ftp darauf zuzugreifen … und was soll ich sagen … es geht, opendir() läuft dann :smiley: :slight_smile:

ftp://192.168.3.1/USBDISK-Partition-0-1/avm_tam/rec

Jetzt muss ich nur noch schauen wie ich den Rest hinbekomme … (das Datum der jüngsten Datei anzeigen)

Das Zählen geht bereits, nur kann ich scheinbar die Zeit nicht korrekt abfragen, es kommt immer ein -1 zurück, was ja bedeutet, dass das Datum nicht in einen Unix Timestamp umgewandelt werden kann, was daran liegt, das filemtime() und auch ftp_mdtm() nicht für Remote Dateien geht … :frowning:

Ich hoffe jemand hat dazu ne Idee …

Gruß
Jens

Hallo,

ja das mit dem netzlaufwerk geht nicht. Hab ich voll vergessen zu sagen. Aber danke mit dem Tipp für ftp. Ich habe mir extra ein Programm installiert (NetDrive). Was mir aus einem Netzwerkpfad ein Laufwerksbuchstabe erstellt. Damit kann ich dann mit opendir drauf zugreifen. Aber wie gesagt, gut zu wissen, dass es auch einfacher geht.

Also ich frage meine Nachrichten auf der Fritzbox alle 2 minuten so ab;

(Skript - AB-Nachrichten)

$dir    = 'Z://';
$files1 = scandir($dir,0);
// print_r($files1);
$zaehler = count ($files1) -1;
echo "$zaehler"."
";
SetValueString("Ab_nummer", "$zaehler" );
IPS_Sleep(500);
if (GetValueString("Ab_nummer") > 0)
{
SetValueBoolean("vis_abnummer", True);
}
else
{
SetValueBoolean("vis_abnummer", False);
}

Somit weiß ich, ob neue Nachrichten auf dem Stick sind oder nicht.
Mit diesem Skript werde ich die Nachrichten nach und nach abhören und automatisch Archivieren.

(Skript - Anrufbeantworter)


$counter = GetValueInteger("AB_counter");


$dir    = 'Z://';
$files1 = scandir($dir,0);
// print_r($files1);
$zaehler = count ($files1) -1;
echo "$zaehler"."
";

if ($zaehler >0)
{
$File = $files1[1];
echo "$File"."
";


$filename = "Z://$File";

      if (file_exists($filename))
      {
      $nummer = substr("$File", 6, 3); // schreibt nummer raus
       echo "$nummer";
       IPS_Execute("C:\dec.exe", "$filename C:\Aktuell.wav", false, false);
      }
IPS_Sleep(3000);
            if (file_exists("C:\Aktuell.wav"))
            {

            copy ("C:\Aktuell.wav", "D://shares/ffentlich/Anrufbeantworter/$counter.wav");
            IPS_Sleep(1500);
            unlink("K://$filename");
            SetValueInteger("AB_counter", GetValueInteger("AB_counter") +1);
            }

$id=24488;
WAC_ClearPlaylist($id);
WAC_SetVolume($id, 150);
WAC_AddFile($id, "C:\Aktuell.wav");
WAC_Play($id);
}
IPS_Sleep(500);
IPS_RunScript("AB_nachrichten");

Danke für deinen Vorschlag, scheint mir aber recht aufwändig zu sein.
Das Abhören wollte ich weiterhin per Telefon machen und das Löschen mache ich dann auch darüber … Mein Zählscript ist dann etwas einfacher.

Schön wäre aber trotzdem irgendeine Möglichkeit das Datum der Dateien abzufragen … hmpf

<?
   $anzahl = 0;
	$dir="ftp://192.168.3.1/USBDISK-Partition-0-1/avm_tam/rec";

	$dirh=opendir($dir);
	while($filename=readdir($dirh))
	{
   $anzahl++;
	}
	closedir($dirh);
	echo $anzahl;

?>

Hallo,

Datum und Uhrzeit lese ich so aus.


$datei1 = "D://shares/öffentlich/Anrufbeantworter/$File1";
$zeit1 = filemtime ( $datei1 );
$string1 =  gmdate ( 'd M Y H:i:s', $zeit1 ) ."
";
SetValueString("AB_nachricht_date_1", "$string1");

Gruß

Ach so, danke!
Das ist dann aber nur auf Grund des zusätzlichen Tools möglich, richtig? Darauf wollte ich nach Möglichkeit verzichten. Bin aber an einer Lösung dran … werde mal schauen ob ich heute damit weiter komme.

Gruß
Jens

Hallo,

hä, welches Tool? Ist doch ein normaler PHP Befehl.

Gruß

Äh … das von dir hier erwähnt wurde?? :confused:

Irgendwie reden wir glaub ich aneinander vorbei.
Das zusätzliche Tool was ich bei mir drauf habe, ist nur dafür da, damit ich den Fritzboxpfad (USB Stick in Fritzbox) als Laufwerksbuchstabe in meinem Explorer habe und somit direkt darauf zugreifen kann. Somit funktioniert auch dann opendir.
Aber du hast ja schon oben gepostet, dass es auch mit dem -> „ftp://“ davor funktioniert.

Du suchtest ja jetzt nur einen php Befehl (wie ich das jetzt verstanden habe) um von einer Datei (jeglicher Art) das Datum auszulesen der letzten Änderung.
Dies mache ich mit dem von mir als letztes geschriebenen PHP Skript. Du kannst als Pfad ja jegliche Datei angeben;


$datei1 = "C://Musikordner/Madonna.mp3";
$zeit1 = filemtime ( $datei1 );
$string1 =  gmdate ( 'd M Y H:i:s', $zeit1 ) ."
";
echo ("$string1"); 

Mit diesem Skript wird von der Datei Madonna.mp3 das Datum und die Uhrzeit der letzen Änderung ausgegeben.

Gruß

Das ist mir schon klar wie die Funktion arbeitet bzw. was da passiert.
Allerdings funktioniert das nur, weil du lokal bzw. über den Laufwerkspfad arbeitest … da filemtime() nicht für remote Dateien funktioniert.
Die zu prüfende Datei muss über das Dateisystem des Servers verfügbar sein!!

Wenn du mit filemtime() arbeitest OHNE das gemappte Laufwerk, bzw. über einen Netzwerkpfad, dann geht das nicht!

Gruß
Jens

Achso,
jetzt versteh ich was du damit meinst :smiley:
wusste nicht, dass filemtime mit Netzwerkordnern nicht klar kommt. Wenn du dafür eine andere Lösung hast, kannst sie ja hier mal posten, damit ich auch von meinem Externen Programm wegkomme. Mag sowas eigentlich auch nicht so gerne wenn ich meinen Server mit zusätzlicher (unnötiger) Software zuhauen muss um was kleines zu realisieren.

Gruß

So, guten Abend :wink:

Ich habe jetzt das Script so weit das es läuft, wobei ich aber davon aus gehe, das im Normalfall keine Datei in dem Ordner ist, die kein aufgezeichneter Anruf ist. Außerdem gehe ich noch davon aus, das alle Dateien der Reihenfolge nach abgespeichert werden, da ich keinen Datums/Uhrzeitvergleich durchführe oder etwas nach Datum sortiere.
Ich werde wahrscheinlich noch eine Abfrage in Verbindung zu meiner Anrufdatenbank einbauen, so das ich zu der Sprachaufzeichnung auch den Namen oder die Rufnummer ausgeben kann.

Meine Ausgabe sieht jetzt so aus:

3 Aufnahmen 
letzte Datei: rec.0.002
Letzte Aufnahme am 06 October 2008 um 22:28 (Anruf Nr. 3)

und der passende Code dazu sieht so aus (ein Teil von dir geborgt :wink: ):

<?

// Dateien zählen

$dir    = 'ftp://192.168.3.1/USBDISK-Partition-0-1/avm_tam/rec';
$files1 = scandir($dir,0);
//print_r($files1);
$zaehler = count ($files1);
echo "$zaehler"." Aufnahmen 
";

// Name der letzten Datei

if ($zaehler >0)
{
$liste = ($zaehler -1);
$File = $files1[$liste];
echo "letzte Datei: $File"."
";

// Datum der letzten Datei

$c = ftp_connect('192.168.3.1');
ftp_login($c, ' ', ' ');
$dateiname = "USBDISK-Partition-0-1/avm_tam/rec/$File" ;
$buff = ftp_mdtm($c, $dateiname);
if ($buff != -1) {
echo "Letzte Aufnahme am " . date("d F Y", $buff) ." um " . date("H:i", $buff) ." (Anruf Nr. $zaehler)";
} else {
echo "mdtime fehlgeschlagen";
}
}

else {echo "Keine neuen Aufnahmen!";}

// to do: Anzeigen der Rufnummer oder Name vom Anrufer

?

Wahrscheinlich läßt sich der Code noch optimieren, aber zur Zeit funktioniert es so ganz gut.

Gruß
Jens

Hallo,

danke für deine info. Sieht ja schon mal ganz gut aus. Du speicherst deine Anrufe dann nicht irgendwie oder? Also einfach nur zur Visualisierung im Designer?!
Weil, die Fritzbox glaub ich nur bis 035 oder so zählt und dann fängt sie wieder von vorne an. Kann sein das man das irgendwo noch ändern kann, hab mich aber da noch nicht drüber schlau gemacht!

Gruß

P.s Werde dann mal die Tage mein Programm runterschmeißen und mir dann dein Skript borgen :slight_smile:

Meine aufgezeichneten Anrufe speichere ich nicht ab, nein … nur meine Anruflisten, die werden per SQL in einer Anruflisten-DB und Adress-DB gespeichert.
Die Aufzeichnungen vom AB benötige ich nicht (wozu auch), daher werden die abgehört und gelöscht. Dafür werde ich wohl auch noch ein Script basteln, damit man das nicht übers Telefonmenü machen muß. :wink:

Jens

Hallo Jens,
ich habe voller Neugier diesen Thread hier gelesen.
Speicherst du die Anruflisten nur in der SQL-DB ab oder visualisierst du aktuell eingegangene Anrufe auch im Designer oder anderswo.
Kannst du für das Auslesen und Speichern der Anruflisten eine Codebeispiel einstellen, da ich das demnächst auch vorhabe.

Ich möchte die Anrufliste aus der Fritzbox 7270 auslesen und die letzten 10 Anrufe anzeigen.
Ich würde mich sehr über ein Codebeispiel freuen.

Vielen Dank René

Hi Rene,

die Daten werden in einer SQL Datenbank abgelegt und auch aus der wieder abgefragt und über eine HTML Seite im Designer dargestellt.

Leider muß ich dich aber enttäuschen, denn ich hole die Daten nicht aus der Fritzbox, sondern fange die direkt über IPS ab. Dann lasse ich die Rufnummer in der Datenbank checken und falls diese da noch nicht vorhanden ist per Rückwärtssuche suchen und eintragen. Dazu dann in der Eintrag in der Anrufliste.

Die Daten der Fritzbox direkt auszulesen müßte über die interne Anrufliste gehen, die auch von der Fritzbox bei Bedarf über Push per Email versendet wird. Ich habe zwar nur eine 7170, aber dürfte vom Prinzip her das Gleiche sein! Die Liste ist eine Excelliste …

Wenn das Paßwort aktiv ist, muss man sich vorher zumindest 1x einloggen, dürfte aber auch über ein Script zu machen sein. Irgendwo habe ich im Forum schon etwas dazu geschrieben.

http://fritz.box/cgi-bin/webcm?getpage=../html/de/FRITZ!Box_Anrufliste.csv

Und damit die Daten aktuell sind, sollte man vorher diese Seite hier aufrufen:

http://fritz.box/cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=fon&var:razz:agename=foncalls

Gruß
Jens