On Fri, Jun 27, 2003 at 03:36:43PM +0200, Philipp Flesch wrote:
cool! so etwas suche ich schon immer! WIe machst du das genau???
Ich habe ein .procmailrc, in dem steht :0c * ^Mailing-List:.*suse-linux-help@suse.com |/home/kris/bin/insert_mail suse_linux :0 * ^Mailing-List:.*suse-linux-help@suse.com /home/kris/Mail/Lists/suse-linux Die erste Regel ist die interessante: Sie ist eine "c" Copy-Regel, die jede Mail von der Liste nach ~/bin/insert_mail drückt. insert_mail ist ein PHP-Script, und das macht #! /usr/bin/php -q <?php # Konfigurier mich $db_host = "localhost"; $db_user = "kris"; $db_pass = "geheim"; $db_data = "kris"; $db_table= $_SERVER["argv"][1]; # Sauge die Mail rein $b = file("php://stdin"); # Isoliere die Header der Mail in $header[] foreach ($b as $line) { # Trailing Newlines und Spaces weg $line = rtrim($line); # Headerende erkennen if ($line == "") break; # Continuations unfolden if (ctype_space(substr($line, 0, 1))) { $v .= " " . ltrim($line); continue; } else { # Alten Header merken if ($k != "") $header[$k] = $v; # Neuen Header lesen und normalisieren list($k, $v) = preg_split('/:\s*/', $line, 2); $k = strtolower($k); } } if ($k != "") $header[$k] = $v; # Gesamte Mail zum Speichern vorbereiten (mit Header) $body = implode("", $b); # Datenbank klarmachen $link = mysql_connect($db_host, $db_user, $db_pass); if ($link === false) die("Cannot connect."); if (!mysql_select_db($db_data)) die("Cannot select database $db_data: ". mysql_error($link)); # Interessante Felder vorbereiten if (!isset($header["from"])) $header["from"] = "unknown"; if (!isset($header["to"])) $header["to"] = "unknown"; if (!isset($header["date"])) $header["date"] = strftime("%a, %e %b %Y %H:%M:%S %Z"); $header["date"] = strtotime($header["date"]); if (!isset($header["subject"])) $header["subject"] = "no subject"; # Die Query $query = sprintf("insert into $db_table ( m_from, m_to, m_date, m_subject, m_body ) values ( '%s', '%s', '%s', '%s', '%s' )", addslashes($header["from"]), addslashes($header["to"]), addslashes($header["date"]), addslashes($header["subject"]), addslashes($body) ); $result = mysql_query($query, $link); if ($result === false) die("Cannot execute '$query': " . mysql_error($link)); mysql_close($link); ?> Danach habe ich eine Website gebaut, die mit einer Query a la $query = sprintf("select id, m_from, m_to, m_subject, m_body, match(m_body) against ('%s') as rank from $db_table having rank > 0 order by rank desc", addslashes($s) ); $result = mysql_db_query($db_data, $query, $link); die Abfrage macht. Die Tabellenstruktur darunter sieht so aus: -- MySQL dump 8.22 -- -- Host: localhost Database: kris --------------------------------------------------------- -- Server version 3.23.52 -- -- Table structure for table 'suse_linux' -- CREATE TABLE suse_linux ( id int(11) NOT NULL auto_increment, m_from varchar(255) default NULL, m_to varchar(255) default NULL, m_subject varchar(255) default NULL, m_date int(11) default NULL, m_body longtext, changed timestamp(14) NOT NULL, PRIMARY KEY (id), FULLTEXT KEY m_body (m_body), KEY m_from (m_from), KEY m_to (m_to), KEY m_subject (m_subject), KEY m_date (m_date) ) TYPE=MyISAM; Kristian