Suchen mit php
Thomas D.
- php
0 Suchen mit PHP
Vinzenz Mai-1 Sci-Phy0 Thomas D.0 Vinzenz Mai0 Sci-Phy0 Thomas D.0 Vinzenz Mai0 Thomas D.0 Vinzenz Mai
Moin Moin
Bräuchte mal kurze Info mit welchem Befehl ich in einer Datei einen bestimmten Begriff suchen kann und den gesuchten Begriff dann in meine MySql Datenbank einfügen kann.
Gruss Thomas
Hallo
Bräuchte mal kurze Info mit welchem Befehl ich in einer Datei einen bestimmten Begriff suchen kann
Um in einer Datei etwas zu suchen, musst Du auf den Dateiinhalt zugreifen können. Dazu kannst Du z.B. file_get_contents() verwenden. Den Begriff suchst Du anschließend mit strpos().
und den gesuchten Begriff dann in meine MySql Datenbank einfügen kann.
dazu erstellst Du Dir mit Hilfe des MySQL-Handbuch, INSERT-Syntax, das SQL-Statement, zu dessen Ausführung Dir die MySQL-Funktionen von PHP dienen können.
Freundliche Grüße
Vinzenz
Moin Moin
Bräuchte mal kurze Info mit welchem Befehl ich in einer Datei einen bestimmten Begriff suchen kann und den gesuchten Begriff dann in meine MySql Datenbank einfügen kann.
Gruss Thomas
hoi..aus welcher art von datei? txt, php, html...
greez Sci
http://www.relaxed-gaming.com
Hey Sci
der Suchbegriff soll aus einer Textdatei gelesen werden.
Diese beinhaltet zum Beispiel :
From thomas@domäne.de Sat Dec 17 12:00:50 2005
Return-Path: <thomas@domäne.de>
Received: from domäne.de (domäne.de [127.0.0.1])
by domäne.de (8.13.5/8.13.5) with ESMTP id jBHB0UUx005666
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO)
for <root@domäne.de>; Sat, 17 Dec 2005 12:00:30 +0100
Received: (from nobody@localhost)
by domäne.de (8.13.5/8.13.5/Submit) id jBHB0UwO005665;
Sat, 17 Dec 2005 12:00:30 +0100
X-Authentication-Warning: domäne.de: nobody set sender to thomas@domäne.de using -f
Received: from 192.168.20.6
(SquirrelMail authenticated user thomas)
by webmail.domäne.de with HTTP;
Sat, 17 Dec 2005 12:00:30 +0100 (CET)
Message-ID: <1920.192.168.20.6.1134817230.squirrel@webmail.domäne.de>
Date: Sat, 17 Dec 2005 12:00:30 +0100 (CET)
Subject: online
From: "Thomas" <thomas@domäne.de>
Subject: online
From: "Thomas" <thomas@domäne.de>
To: root@domäne.de
User-Agent: SquirrelMail/1.4.5-1
MIME-Version: 1.0
Content-Type: text/plain;charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Priority: 3 (Normal)
Importance: Normal
X-www.domäne.de-MailScanner-Information: Please contact the ISP for more information
X-www.domäne.de-MailScanner: Found to be clean
X-www.domäne.de-MailScanner-From: thomas@domäne.de
ppp0 Protokoll:Ethernet Hardware Adresse 00:C1:26:0E:CE:FD
inet Adresse:84.84.23.34 Bcast:192.168.19.255
Maske:255.255.255.0
inet6 Adresse: fe80::2c1:26ff:fe0e:cefd/64
Gültigkeitsbereich:Verbindung
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5124398 errors:0 dropped:0 overruns:0 frame:0
TX packets:6445346 errors:0 dropped:0 overruns:10 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:3358319258 (3.1 GiB) TX bytes:1028168635 (980.5 MiB)
Interrupt:11 Basisadresse:0xc000
ist eine Maildatei.
Was ich ausfiltern möchte ist das Datum mit Uhrzeit 1. Zeile Sat Dec 17 12:00:50 2005 und die IP die gesendet wird inet Adresse:84.84.23.34. Die beiden Daten möchte ich dann in meine SQL Datenbank einfügen.
Gruss Thomas
Hallo Thomas,
From thomas@domäne.de Sat Dec 17 12:00:50 2005
[...]
ppp0 Protokoll:Ethernet Hardware Adresse 00:C1:26:0E:CE:FD
inet Adresse:84.84.23.34 Bcast:192.168.19.255
[...]
Was ich ausfiltern möchte ist das Datum mit Uhrzeit 1. Zeile Sat Dec 17 12:00:50 2005
Du möchtest also die Datei zeilenweise abarbeiten. Dann hilft Dir file() weiter.
Du weißt, dass die eine der beiden Dich interessierenden Informationen in der ersten Zeile steht, hier brauchst Du die Zeile nicht zu suchen. Die Zeile hat einen stets gleichen Aufbau, trenne die einzelnen Informationen mit explode() und extrahiere aus dem resultierenden Array die Information, die Dich interessiert. Verwende zum Zusammensetzen implode().
und die IP die gesendet wird inet Adresse:84.84.23.34. Die beiden Daten möchte ich dann in meine SQL Datenbank einfügen.
Durchsuche zeilenweise die Datei bis Du an die von Dir gewünschte Zeile kommst. Überlege Dir, wie Du diese erkennst. Gehe dort analog zur ersten Zeile vor.
Zum Abspeichern, siehe mein erstes Posting.
Freundliche Grüße
Vinzenz
--
Hey Sci
der Suchbegriff soll aus einer Textdatei gelesen werden.
Diese beinhaltet zum Beispiel :From thomas@domäne.de Sat Dec 17 12:00:50 2005
Return-Path: <thomas@domäne.de>
Received: from domäne.de (domäne.de [127.0.0.1])
by domäne.de (8.13.5/8.13.5) with ESMTP id jBHB0UUx005666
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO)
for <root@domäne.de>; Sat, 17 Dec 2005 12:00:30 +0100
Received: (from nobody@localhost)
by domäne.de (8.13.5/8.13.5/Submit) id jBHB0UwO005665;
Sat, 17 Dec 2005 12:00:30 +0100
X-Authentication-Warning: domäne.de: nobody set sender to thomas@domäne.de using -f
Received: from 192.168.20.6
(SquirrelMail authenticated user thomas)
by webmail.domäne.de with HTTP;
Sat, 17 Dec 2005 12:00:30 +0100 (CET)
Message-ID: <1920.192.168.20.6.1134817230.squirrel@webmail.domäne.de>
Date: Sat, 17 Dec 2005 12:00:30 +0100 (CET)
Subject: online
From: "Thomas" <thomas@domäne.de>
Subject: online
From: "Thomas" <thomas@domäne.de>
To: root@domäne.de
User-Agent: SquirrelMail/1.4.5-1
MIME-Version: 1.0
Content-Type: text/plain;charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Priority: 3 (Normal)
Importance: Normal
X-www.domäne.de-MailScanner-Information: Please contact the ISP for more information
X-www.domäne.de-MailScanner: Found to be clean
X-www.domäne.de-MailScanner-From: thomas@domäne.deppp0 Protokoll:Ethernet Hardware Adresse 00:C1:26:0E:CE:FD
inet Adresse:84.84.23.34 Bcast:192.168.19.255
Maske:255.255.255.0
inet6 Adresse: fe80::2c1:26ff:fe0e:cefd/64
Gültigkeitsbereich:Verbindung
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5124398 errors:0 dropped:0 overruns:0 frame:0
TX packets:6445346 errors:0 dropped:0 overruns:10 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:3358319258 (3.1 GiB) TX bytes:1028168635 (980.5 MiB)
Interrupt:11 Basisadresse:0xc000
ist eine Maildatei.Was ich ausfiltern möchte ist das Datum mit Uhrzeit 1. Zeile Sat Dec 17 12:00:50 2005 und die IP die gesendet wird inet Adresse:84.84.23.34. Die beiden Daten möchte ich dann in meine SQL Datenbank einfügen.
Gruss Thomas
--
Hallo Thomas
Also es geht um die Absender IP und das Sendedatum, wenn ich das richtig sehe.
Deswegen noch eine Frage: rennt es via Formmailer oder nicht?
Wenn ja, dann brauchst Du eigentlich nur bei der Bestätigungsseite, dass die Mail verschickt worden ist, die Daten in die DB schreiben lassen.
Du musst dann nur folgende Seiten mit Code ergänzen.
Eingabemaske:
<input type="hidden" value="<? echo $REMOTE_ADDR; ?>" name="ip">
<input type="hidden" value="<? echo date('d.m.Y H:m'); ?>" name="zeit">
Seite mit "Mail wurde verschickt":
<?
$sql = "INSERT INTO <TABELLENNAME> (id
,<NAME\_DES\_IP\_FELDES>
,<NAME\_DES\_ZEIT\_FELDES>
) VALUES ('$ip','$zeit');
?>
Ach ja, wichtig ist, dass der Datenbank Connect vorher natürlich nicht vergessen wird.
Vll. konnte ich Dir helfen.
LG
Hallo Thomas
Also es geht um die Absender IP und das Sendedatum, wenn ich das richtig sehe.
!! RICHTIG !!
Deswegen noch eine Frage: rennt es via Formmailer oder nicht?
Nein, ich bekomme von seinem System einfach nur die Mail mit den Daten die ich hier gepostet habe.
Ich möchte einfach nur das das Script was ich hier erstellen möchte, per crontab minütlich aufgerufen wird, sich die zwei Daten schnappt und diese in die MySql Datenbank einfügt.
Ich muss leider eingestehen das ich ewig nix mehr mit php gemacht habe. Die SQL Statements sind kein Problem unter php.
Gruesse Thomas
Hallo Thomas,
Nein, ich bekomme von seinem System einfach nur die Mail mit den Daten die ich hier gepostet habe.
Ich muss leider eingestehen das ich ewig nix mehr mit php gemacht habe. Die SQL Statements sind kein Problem unter php.
wo hakt es denn genau? Ich habe Dir doch detaillierte Tipps gegeben, wie Du Deine Aufgabenstellung angehen kannst. Was hast Du bisher hinbekommen? Wo bist Du hängen geblieben? Was hast Du nicht verstanden?
Freundliche Grüße
Vinzenz
Hey Vinzenz
Danke erstmal für deine Antwort, ich hab mir mal die Befehlssyntax mit explode angeschaut und auch getestet.
Ich bekomme auch eine Ausgabe aber nur inet Adresse und nicht die IP. Schau mal
<?php
// Liest eine Datei in ein Array. Hier gehen wir über HTTP, um die
// HTML Datei einer URL zu bekommen
$lines = file ('messagesbackup/testfile');
// Durchgehen des Arrays und Anzeigen des HTML Source inkl. Zeilennummern
foreach ($lines as $line_num => $line) {
echo "{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n";
}
?>
Ausgabe :
0 : From MAILER-DAEMON Sat Dec 17 13:21:06 2005
1 : Date: 17 Dec 2005 13:21:06 +0100
2 : From: Mail System Internal Data <MAILER-DAEMON@.de>
3 : Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
4 : Message-ID: <1134822066@.de>
5 : X-IMAP: 1108825610 0000009008 $MDNSent
6 : Status: RO
7 :
8 : This text is part of the internal format of your mail folder, and is not
9 : a real message. It is created automatically by the mail system software.
10 : If deleted, important folder data will be lost, and it will be re-created
11 : with the data reset to initial values.
12 :
13 : From thomas@microfun.de Sat Dec 17 13:21:04 2005
14 : Return-Path: <thomas@.de>
15 : Received: from .de (.de [127.0.0.1])
16 : by microfun.de (8.13.5/8.13.5) with ESMTP id jBHCKmTD011837
17 : (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO)
18 : for <thomas@.de>; Sat, 17 Dec 2005 13:20:49 +0100
19 : Received: (from nobody@localhost)
20 : by microfun.de (8.13.5/8.13.5/Submit) id jBHCKmM4011836;
21 : Sat, 17 Dec 2005 13:20:48 +0100
22 : X-Authentication-Warning: .de: nobody set sender to thomas@.de using -f
23 : Received: from 192.168.20.6
24 : (SquirrelMail authenticated user thomas)
25 : by webmail.de with HTTP;
26 : Sat, 17 Dec 2005 13:20:48 +0100 (CET)
27 : Message-ID: 2494.192.168.20.6.1134822048.squirrel@webmail.de
28 : Date: Sat, 17 Dec 2005 13:20:48 +0100 (CET)
29 : Subject: online
30 : From: "Thomas" <thomas@.de>
31 : To: thomas@.de
32 : User-Agent: SquirrelMail/1.4.5-1
33 : MIME-Version: 1.0
34 : Content-Type: text/plain;charset=iso-8859-1
35 : Content-Transfer-Encoding: 8bit
36 : X-Priority: 3 (Normal)
37 : Importance: Normal
38 : X-www.de-MailScanner-Information: Please contact the ISP for more information
39 : X-www.de-MailScanner: Found to be clean
40 : X-www.de-MailScanner-From: thomas@.de
41 : Status: O
42 : X-Status:
43 : X-Keywords:
44 : X-UID: 9008
45 : eth0 Protokoll:Ethernet Hardware Adresse 00:C1:26:0E:CE:FD
46 : inet Adresse:192.168.19.2 Bcast:192.168.19.255
47 : Maske:255.255.255.0
48 : inet6 Adresse: fe80::2c1:26ff:fe0e:cefd/64
49 : Gültigkeitsbereich:Verbindung
50 : UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
51 : RX packets:5146287 errors:0 dropped:0 overruns:0 frame:0
52 : TX packets:6460734 errors:0 dropped:0 overruns:10 carrier:0
53 : Kollisionen:0 Sendewarteschlangenlänge:1000
54 : RX bytes:3374497054 (3.1 GiB) TX bytes:1031786973 (983.9 MiB)
55 : Interrupt:11 Basisadresse:0xc000
56 :
57 :
58 : --
59 : Diese Nachricht wurde auf Viren und andere gefaehrliche Inhalte untersucht
60 : und ist - aktuelle Virenscanner vorausgesetzt - sauber.
61 : MailScanner dankt transtec Computer fuer die freundliche Unterstuetzung.
und wie bekomme ich nun die Inet Adresse und das Datum ausgefiltert ?
Datum denke ich mal wäre zu realisieren mit strtotime.
Gruss Thomas
Hallo Thomas,
Danke erstmal für deine Antwort, ich hab mir mal die Befehlssyntax mit explode angeschaut und auch getestet.
Ich bekomme auch eine Ausgabe aber nur inet Adresse und nicht die IP. Schau mal
> <?php
> // Liest eine Datei in ein Array. Hier gehen wir über HTTP, um die
> // HTML Datei einer URL zu bekommen
> $lines = file ('messagesbackup/testfile');
// initialisiere das assoziative Array, das das Ergebnis aufnehmen wird
$ergebnis['date'] = "";
$ergebnis['ip'] = "";
> // Durchgehen des Arrays und Anzeigen des HTML Source inkl. Zeilennummern
> foreach ($lines as $line_num => $line) {
> // echo "{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n";
// Zeilen nicht ausgeben, sondern verarbeiten :-)
// Zeile 0 enthält das Datum
> // 0 : From MAILER-DAEMON Sat Dec 17 13:21:06 2005
if ($line_num == 0) {
// From MAILER-DAEMON Sat Dec 17 13:21:06 2005
// Teile die Zeichenkette am Leerzeichen auf: Separator: " "
// Nach dem zweiten Leerzeichen interessiert der ganze Rest: Limit: 3
// Ergebnis: From $parts[0]
// MAILER-DAEMON $parts[1]
// Sat Dec 17 13:21:06 2005 $parts[2]
$parts = explode(" ", $line, 3);
$ergebnis['date'] = $parts[2]; // Datum erledigt
}
// Suche weiter nach der Zeile mit dem Inhalt inet Adresse
> // 46 : inet Adresse:192.168.19.2 Bcast:192.168.19.255
// Hier sollte Code folgen, der diese ermittelt
// unter anderem kannst Du die Funktion strpos() verwenden.
> }
> ?>
und wie bekomme ich nun die Inet Adresse und das Datum ausgefiltert ?
Datum denke ich mal wäre zu realisieren mit strtotime.
Nö, mit explode(), siehe oben, zur IP-Adresse:
// 46 : inet Adresse:192.168.19.2 Bcast:192.168.19.255
Gibt es nur eine Zeile, die den Text "inet Adresse" enthält. Wenn ja, wie in Deinem vorherigen Posting, dann brauchst Du nur nach diesem Text zu suchen. Wenn nein, wie kannst Du die Zeile von anderen, die ebenfalls den Text "inet Adresse" enthalten, unterscheiden.
Freundliche Grüße
Vinzenz
Nee Nee,
ich muss feststellen mit 52 Jahren, rattert das Hirn micht mehr so als mit 20 -)))
Danke schön für das erste Script mit dem Datum, nur brauche ich ein wenig länger um da wieder durch zu blicken.
Da hab ich doch schon die schönsten SQL Statement geschrieben und scheiter an diesem lächerlichen Script.
Wäre nett wenn du mir zur Veranschaulichung den Rest mit der IP auch noch posten könntest.
Ich muss mir mal wieder einige Abende zum auffrischen gönnen.
Gruss und Danke für deine Hilfe liebr Vincenz
Hallo Thomas,
ich muss feststellen mit 52 Jahren, rattert das Hirn micht mehr so als mit 20 -)))
ich will doch sehr hoffen, dass mit 52 mein Hirn noch ähnlich rattert wie jetzt - und der Abstand zu 52 ist bei mir kleiner als der zu 20 :-)
Ich muss mir mal wieder einige Abende zum auffrischen gönnen.
Das ist viel wichtiger. Es ist völlig normal, nach einer längeren Pause auch etwas Zeit und Übung zu benötigen, um wieder in eine Materie einzusteigen.
Danke schön für das erste Script mit dem Datum, nur brauche ich ein wenig länger um da wieder durch zu blicken.
Da hab ich doch schon die schönsten SQL Statement geschrieben
bitte zeigen!
Wäre nett wenn du mir zur Veranschaulichung den Rest mit der IP auch noch posten könntest.
Hmm, Thomas, eigentlich sind wir hier im SELFHTML-Forum, Du solltest es schon selbst hinkriegen. Aber Weihnachten, das Fest der Liebe naht, da muss ich Dich doch ein wenig unterstützen:
// Voraussetzung: Der Text "inet Adresse" kommt in der Datei nur einmal vor,
// und zwar in der Zeile, die die gesuchte IP-Adresse enthält.
// Überprüfe, ob in der aktuellen Zeile der Text enthalten ist:
// Verwende [link:http://www.php.net/manual/de/function.strpos.php@title=strpos()]
// int strpos ( string haystack, string needle [, int offset] )
// Nadel: "inet Adresse"
// Heuhaufen: $line (die aktuelle Zeile)
// Beachte: strpos() gibt die Position an, wo die Nadel gefunden
// wurde, das kann auch die Position 0 sein.
// Daher verwende ich den Vergleichsoperator !==
if(strpos($line, "inet Adresse") [link:http://www.php.net/manual/de/language.operators.comparison.php@title=!==] false) {
// Markertext gefunden, extrahiere den richtigen Anteil
// inet Adresse:84.84.23.34 Bcast:192.168.19.255
// Laut Deinem ersten Posting kann die Zeile führende Leerzeichen haben
// entferne diese mit [link:http://www.php.net/manual/de/function.trim.php@title=trim()]
// Im ersten Schritt wird am Leerzeichen aufgetrennt
$part = explode(" ", trim($line));
// $part[0]: inet
// $part[1]: Adresse:84.84.23.34
// $part[2]: Bcast:192.168.19.255
// Im zweiten Schritt ist $part[1] am Doppelpunkt zu trennen
$ip = explode(":", $part[1]);
// $ip[0]: Adresse
// $ip[1]: 84.84.23.34 - das gewünschte Ergebnis
$ergebnis['ip'] = $ip[1];
// Hier kannst Du Deinen Durchlauf beenden
[link:http://www.php.net/manual/de/control-structures.break.php@title=break];
}
Bitte kopiere diesen Quelltext nicht einfach, sondern lies bitte die verlinkten Seiten nach und versuche zu verstehen, was Du da machst. Außerdem ist der Code noch optimierbar und eine Fehlerbehandlung könnte auch nichts schaden.
Vorweihnachtliche Grüße
Vinzenz