Lokale Datei ohne Upload in Datenbank einbinden

IbinI

Grünschnabel
Hallo

Vielleicht kann mir einer von euch helfen - mein Problem ist folgendes:

Ich möchte eine auf der lokalen Festplatte lagernde Datei analysieren und den Inhalt in eine Datenbank auf meinem Server integrieren.

Beispiel:
Datei 'beispiel.txt'

Feldname1 *** Information1a *** Information1b
Feldname2 *** Information2a *** Information2b
Feldname3 *** Information3a *** Information3b
...

Die Analyse der Datei (also das Definieren der Variablen) ist kein Problem - nur wie sage ich php, dass er eine bestimmte Datei (will ich per Button auswählen können, also keine vordefinierten Dateinamen oder -endungen) zur Analyse heranziehen soll? Die betreffende Datei soll aber NICHT geuploadet werden.

Nach Button-Klick und anschliessender Dateiauswahl soll php also die Daten aus der Datei herausholen und in eine mysql-Datenbank einfügen.


Das momentane Script sieht etwa so aus:

PHP:
<form enctype="multipart/form-data" action="<? echo $PHP_SELF; ?>" method="post">
<input type="file" name="userfile" />
<input type="submit" value="send" />
</form>

<?
if ($userfile) {
	$fp = fopen($userfile,"r");
	$zeile = file($fp);
	foreach ($zeile as $element) {
		$spalte = explode("***",$element);
		echo "Feldname: ".$spalte[0];
		echo "Information a:".$spalte[1];
		echo "Information b:".$spalte[2];

/* hier werden die daten angezeigt; wird durch die mysql-befehle ersetzt */
	}
}


Lasse ich mir die Variable $userfile per echo ausgeben, habe ich nur den Wert der temporären Datei - etwa << userfile = /tmp/phpuvGfIm >> und das kann ich nicht weiterverarbeiten...

Vielen Dank im voraus!
 
Zuletzt bearbeitet:
garnicht....wäre ja noch schöner, wenn man lokale Dateien so einfach auslesen könnte.
Ohne Upload wird das definitiv nichts(zumindest nicht bei herkömmlicher Browserkonfiguration)
 
Also ich habs so gemacht, dass ich die Datei auswähle, aber dann die temporäre Datei auslese:
PHP:
$name = $_FILES['file']['tmp_name'];
$zeile = file($name);
Das funktioniert ohne Probleme und die Datei wird nur temporär auf dem Server abgelegt.
 
Moritz123 hat gesagt.:
Also ich habs so gemacht, dass ich die Datei auswähle, aber dann die temporäre Datei auslese:
PHP:
$name = $_FILES['file']['tmp_name'];
$zeile = file($name);
Das funktioniert ohne Probleme und die Datei wird nur temporär auf dem Server abgelegt.


funktioniert wie gewünscht; vielen Dank :o)
 
Hallo zusammen

Habe leider immernoch Probleme beim öffnen einer lokalen Datei... Ich habe praktisch die gleiche Anforderung wie Ibini.

Aber: Wenn ich per echo den Wert der Variabel 'userfile' ausgebe, bekomme ich den realen Pfad (c:\test.txt). Wie komme ich an den Pfad der temporären Datei auf dem Server? Wenn ich das File ja nicht lokal öffnen kann, weshalb soll dann eine temporäre Datei davon auf dem Server liegen?
 
Es liegt eine temporäre Kopie dieser Datei auf dem Server, weil man diese Datei geuploaded hat. Wie schon beschrieben, geht das auslesen einer Datei ohne Upload nicht.
 
Hi, ich habe nun auch dieses Problem, leider wurde ich aus den bisherigen Antworten nicht so richtig schlau.

Dies hier ist mein Quelltext:
PHP:
echo "<form enctype='multipart/form-data' action='<? echo $PHP_SELF; ?>' method='post'>";
echo "Datei auswählen:";
echo " <input name='datei' type='file' size='75' class='input'>";
echo "<br><input type='submit' name='save' value='Bestätigen' class='button'>";
echo "</form>";

if ($datei)
	{
	$handle = fopen ($datei, "r");
	$i = 0;
	while (!feof($handle))
		{
		$i++;
		$buffer = fgets($handle, 4096);
		$buffer = str_replace("\n", "", $buffer);
		$buffer = str_replace("\r", "", $buffer);
		$buffer = str_replace("\"", "", $buffer);
		list($nnm,$vnm,$gebdat,$semb,$grnr,$pjr,$fr,$iden)=explode(";",$buffer);
		mysql_query("INSERT INTO Teilnehmer (Name, Vorname, Gebdat, Sembez, Prjahr, Fachr, Ident, Gnr) VALUES ('$nnm', '$vnm', '$gebdat', '$semb', '$pjr', '$fr', '$iden', '$grnr')");
			
		}
	fclose ($handle);
	echo "$i Datensätze eingepflegt.";
	}

Die Datei die ich auslesen möchte enthält mehrere Zeilen die so aussehen:
"Abel";"Bianca";"1979-09-09";"Ostbayern";"N1";"2008";"Ernährung";"N16ca1522"
"Bonengel";"Thomas";"1974-06-25";"Ostbayern";"N1";"2008";"Ernährung";"N16as6602"
"Brabec";"Daniel";"1973-05-03";"Ostbayern";"N1";"2009";"Metalltechnik";"N16el4882"
"Brandlmeier";"Thomas";"1979-01-18";"Ostbayern";"N1";"2009";"Bautechnik";"N16as4342"
"Buchner";"Michael";"1973-05-02";"Ostbayern";"N1";"2009";"Bautechnik";"N17el4832"

Wie Ibinl, möchte auch ich gerne das ich die Datei nicht irgendwo fix hochladen müsste, sondern es reicht mir wenn er sie aus dem tmp ausliest.
Jetzt ist natürlich die Frage, wo finde ich den Pfad für die tmp-datei bzw. wie packe ich das in eine Variable?

Aktuell wenn ich es so wie es ist ausführe bekomme ich vom Browser folgende Meldung:
Code:
Not Found
The requested URL /slbs/< was not found on this server.

Kann mir jemand bei der Lösung meines Problems weiterhelfen?
  • Also das PHP Skript läuft auf einem Server irgendwo in Deutschland ;)
  • Ich würde gerne eine Datei von der lokalen Festplatte auslesen
  • Ich weiss das dies ohne Upload nicht geht, jedoch wird ja so wie ich das verstanden habe eine temporäre Kopie der Datei auf dem Server abgelegt
  • Wie finde ich die und wo finde ich die und wie kann ich sie dann verwenden?
Vielen Dank schonmal für die Hilfe.

Gruß Marc
 
Zuletzt bearbeitet:
Hallo!

du solltest Dir mal anschauen, wie der Datei-Upload funktioniert. Bevor du die Datei bearbeiten kannst, musst Du sie erst mal auf den Server kopieren.
Wie das geht, erfährst Du u.A. hier. Danach wirst Du auch verstehen, was ich oben geschrieben habe. Falls nicht, bitte nochmal fragen.

Schäöne Grüße
 
Okay, vielen Dank erstmal für den Hinweis.

Soweit so gut... nun hab ich auf meinem Server folgende Einstellung in der php.ini gefunden:
Code:
Directive	Local Value	Master Value
file_uploads	On	On
upload_tmp_dir	no value	no value
upload_max_filesize	8M	8M

Soweit so gut, sollte also alles funktionieren.

Wenn ich nun aber selbst völlig Stupide ein wenig herum probiere:
PHP:
echo "<form enctype='multipart/form-data' action='<? echo $PHP_SELF; ?>' method='post'>";
echo "Datei auswählen:";
echo " <input name='datei' type='file' size='75' class='input'>";
echo "<br><input type='submit' name='save' value='Bestätigen' class='button'>";
echo "</form>";

if (isset($_FILES['datei'])and ! $_FILES['datei']['error'])
	{
	move_uploaded_file($_FILES['datei']['tmp_name'], "data/ref.txt");
	printf("Die Datei %s steht jetzt als " .
          "ref.txt zur Verfügung.<br />\n",
      $_FILES['datei']['name']);
	printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",
      $_FILES['datei']['size'], $_FILES['datei']['type']);
     }

Bekomme ich immernoch vom Browser folgende Rückmeldung:
Code:
Not Found
The requested URL /slbs/< was not found on this server.

Die Rechte für das Verzeichnis "data" sind auf 776 gesetzt.

Was mache ich falsch? :(
Hab den Eindruck das er die Datei gar nicht erst temp copiert oder so... ?!
 
Zuletzt bearbeitet:
Zurück