• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PhP:Datei auslesen

Domi

Neues Mitglied
hallo liebes PhPler,

ich habe folgendes Problem, welches schnell Hilfe erfordert.

Ich habe eine Datei im ordner /files welche nach dem aktuellen timestamp(z.b. "1299486783.entry") benannt wird. (also der zeitpunkt zu dem die datei erstellt wird)

die datei sieht im inhalt so aus:

8542,"layer",0,100,"localhost/newlayer.php"

diese daten entsprechen folgenden kriterien:

8542 = project subject id
layer = typ
0 = Rate
100 = code
localhost/newlayer.php = referrer

ich möchte nun diese daten in eine datenbank schreiben lassen und genau hier hab ich mein problem.

ich hab die datenbank so angelegt:

Code:
-- phpMyAdmin SQL Dump
-- version 2.11.4
-- http://www.phpmyadmin.net
--
-- Host: 10.25.240.100
-- Erstellungszeit: 07. März 2011 um 09:37
-- Server Version: 5.0.77
-- PHP-Version: 5.1.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Datenbank: `mpo`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `cr_history`
--

CREATE TABLE IF NOT EXISTS `cr_history` (
  `id` int(11) NOT NULL auto_increment,
  `projects_subject_id` int(11) NOT NULL,
  `date` date NOT NULL,
  `contact_rate` float NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19284 ;
-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `study_counts`
--

CREATE TABLE IF NOT EXISTS `study_counts` (
  `id` int(11) NOT NULL auto_increment,
  `type_id` int(11) NOT NULL,
  `projects_subject_id` int(11) NOT NULL,
  `date` date NOT NULL,
  `referrer` varchar(100) NOT NULL,
  `count` int(10) NOT NULL default '1',
  `code` int(3) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `type_id` (`type_id`,`projects_subject_id`,`date`,`referrer`,`code`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4766072 ;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `study_count_types`
--

CREATE TABLE IF NOT EXISTS `study_count_types` (
  `id` int(11) NOT NULL,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

die id soll pro eintrag von selbst hoch gezählt werden aber in allen 3 tabellen übereinstimmen. "type_id" in der "study counts" tabelle soll den wert des typs von der datei oben bekommen("layer"). "project_subject_id" wäre in diesem beispiel die "8542" auch von der datei ausgelesen. als date soll der dateiname welcher ja als timestamp formatiert ist umgewandelt werden und eingelesen werden (d:m:y). referrer soll dann das "localhost/newlayer.php" werden und als code die "100". Die restlichen Sachen sind erstmal unrelevant mir geht es gerade nur im diese grundlagen zum einlesen. Nachdem die Datei vollständig ausgelesen wurde soll diese im Ordner /files gelöscht werden.


Ich hoffe jmd kann mir ein wenig Helfen wie das zu bewerkstelligen ist.

Liebe Grüße

Domi
 
naja das problem ist einfach, dass ich nicht auf den trichter komme wie php die reihenfolge erkennt wie die anordnung in der datei ist und die anordnung in der datenbank. ich mein kann ich einfach so

Code:
[FONT=Arial]INSERT INTO [/FONT][FONT=Arial] study_counts (type_id,project_subject_id,date,referrer, count,code)VALUES(id,cr,type,code,referrer,timestamp)[/FONT]

schreiben? und vorallem wie kann ich php verständlich machen dass der dateiname ein timestamp ist

lg
 
Ein Ansatz zum Einlesen (ohne Fehlerbehandlung):

PHP:
<?php

function readData($filepath)
{
    $tmp = trim(file_get_contents($filepath));

    // Das hier könnte zu simpel sein, falls innerhalb von Strings auch Kommas
    // auftreten können. Dann bräuchte es einen clevereren Parser
    $tmp = explode(',', $tmp);

    $data = array(
        'project_subject_id' => $tmp[0],
        'typ'                => trim($tmp[1], '"'),
        'rate'               => $tmp[2],
        'code'               => $tmp[3],
        'referrer'           => trim($tmp[4], '"'),
        'timestamp'          => (int) pathinfo($filepath, PATHINFO_BASENAME)
    );

    return $data;
}

$filename = '1299486783.entry';

$data = readData($filename);

echo "Gelesene Daten:\n";
print_r($data);

echo "\nFormatierter Timestamp:\n";
echo date('Y-m-d H:i:s', $data['timestamp']) . "\n";

Ausgabe:

Code:
[noparse]Gelesene Daten:
Array
(
    [project_subject_id] => 8542
    [typ] => layer
    [rate] => 0
    [code] => 100
    [referrer] => localhost/newlayer.php
    [timestamp] => 1299486783
)

Formatierter Timestamp:
2011-03-07 09:33:03[/noparse]

Die Daten aus diesem Array kannst du dann in die Datenbank einfügen oder so.

Falls du grundlegende Anleitungen benötigst:

- http://www.html.de/wiki/Quellensammlung

Bei konkreteren Fragen helfen wir gerne weiter.
 

Neueste Beiträge

Zurück
Oben