"We are back" « oc.at

schon wieder php

jives 09.02.2002 - 16:14 1645 24
Posts

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Also, ich möchte userdaten aus einer stinknormalen textdatei auslesen die so aufgebaut ist:
user=ort usw.

Der Code ist jetzt nur für die 1. Zeile gedacht, mit 2 eintägen:
$fd=fopen("beisp.dat","r");
$line=fgets($fd);
$userdata=explode("=",$line);
echo "$line - $userdata[0] - $userdata[1]";

Nur ich bekomm weder was für $line, noch für $userdata zurück :(
Was stimmt da nicht? Thx im voraus

Nurmi

OC Addicted
Avatar
Registered: Jun 2000
Location: Linz (Hauptplatz..
Posts: 810
also i hob des einmal so gemacht:
die ganze datei in eine variable übergeben und dann einfach alle Werte zwischen den ENTER Zeichen (das Kasterl [])
als Zeile genommen...

Wennst den Code unbedingt brauchst such i dir erm außa..(PM)

MfG NuRmi

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Nichts anderes sollte das obere Script machen :)
Datei zum lesen öffnen, lesen bis zum Zeilenende, die Variable in ein Array aufsplitten und dann kann ich mit dem Array weitermachen. Nur leider funktioniert es nicht :(

Nurmi

OC Addicted
Avatar
Registered: Jun 2000
Location: Linz (Hauptplatz..
Posts: 810
$inhalt = file("dateiXYZ.txt");
$zahl = count($inhalt);
$z="1";
while($z < $zahl){
$nr =$inhalt[$z];
$z++;
$pic =$inhalt[$z];
$z++;
$datum = $inhalt[$z];
$z++
}

i hobs so gmocht....

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
thx, das script funktioniert :) Warum meins nicht geht würd mich aber wirklich interessieren.
Aber wenn ich das hier mache:
<?php
$inhalt = file("user1.usr");
$zahl = count($inhalt);
$z="0";
while($z < $zahl){
$user=$inhalt[$z];
$z++;
$ort=$inhalt[$z];
$z++;
}
echo "$user";
if ($user=="mueller" & $ort=="Wien"){
echo "<br>ok";}
?>
Kommt statt:
"mueller
ok"
nur
"mueller"
Obwohl die Daten stimmen, also in der Datei
"mueller
Wien" steht :confused:
Bearbeitet von jives am 09.02.2002, 22:01

Nurmi

OC Addicted
Avatar
Registered: Jun 2000
Location: Linz (Hauptplatz..
Posts: 810
string trim (string str)

löscht unsichtbare Zeichen..blablabla...

probier des amoi muaßt wahrscheinlich des ENTER zeichen weglöschen....

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Welches Enter-Zeichen meinst du? Die Kasterl bei $inhalt[]?
Das geht ja net, dann hab ich keinen Index mehr fürn Array.
Und wtf ist string trim?
Ich programmier erst seit 2 Tagen php, also nicht böse sein wenn ichs net check ;)

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
Zitat von KaZaa
Welches Enter-Zeichen meinst du? Die Kasterl bei $inhalt[]?
Das geht ja net, dann hab ich keinen Index mehr fürn Array.
Und wtf ist string trim?
Ich programmier erst seit 2 Tagen php, also nicht böse sein wenn ichs net check ;)

Er meint des '\n' am ende von der ersten Zeile!

BTW:

Code: PHP
function get_line ($file) {
	$read_again = true;
	$buffer_size = 4096;
	$full = "";
	while ((!feof ($file)) && ($read_again)) {
		$read_again = false;
		$line = fgets ($file, $buffer_size);
		$full .= $line;
		if (strlen($line) >= ($buffer_size - 1)) {
			if ($line[($buffer_size - 2)] != '\n') {
				$read_again = true;
			}
		}
	}
	return $full;
}

des is ne funktion von "mir" (mit hilfe von php.net)! Ließt genau eine Zeile immer aus! $file is einfach der pointer auf eine geöffnete Datei (also einfach die var die beim aufmachen def. wird)!

Vielleicht hilft des!

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Thx, ich werd das mal ausprobieren. :)
Nur lustigerweise macht fgets() nix anderes als die Daten einer Datei auszulesen bis eine vorgegebene Länge, das ZEILENENDE der das Ende der Datei erreicht ist. Also wieso machst du des so kompliziert in einer Funktion?
Und es zipft mich ärgstens an das mein Code net geht und i net den blassesten Schimmer hab warum :mad: Damnit
Bearbeitet von jives am 10.02.2002, 13:05

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
Zitat von KaZaa
Thx, ich werd das mal ausprobieren. :)
Nur lustigerweise macht fgets() nix anderes als die Daten einer Datei auszulesen bis eine vorgegebene Länge, das ZEILENENDE der das Ende der Datei erreicht ist. Also wieso machst du des so kompliziert in einer Funktion?
Und es zipft mich ärgstens an das mein Code net geht und i net den blassesten Schimmer hab warum :mad: Damnit

Klar könnt ich mit fgets auslesen, nur mit der funktion muss ich die Länge der Zeile vorher ned wissen, und ich bekomm den string gleich schön ohne '\n' am schluß :)

Könnt natürlich auch fgets($fp,999999999999999); machen - aber so is es schöner :)

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Ich muss aber ehrlich zugeben dass mir deine function zu hoch ist, bzw. dass ich nicht mit ihr umgehen kann :(
Irgendwie scheint auch nicht das Auslesen das Problem zu sein, weil das geht bei mir in der Zwischenzeit schon:

beisp.dat:
wert1,wert2
hallo,welt
1,2
ende,ende

code1:
<?php
$fd = fopen ("beisp.dat", "r");
while (!feof($fd)) {
$line = fgets($fd, 4096);
$userdata=explode(",",$line);
echo $userdata[0];
}
fclose ($fd);
?>

gibt: http://home.pages.at/kazaa/test/test.php

code2:
<?php
$fd = fopen ("beisp.dat", "r");
while (!feof($fd)) {
$line = fgets($fd, 4096);
$userdata=explode(",",$line);
echo $userdata[1];
}
fclose ($fd);
?>

gibt: http://home.pages.at/kazaa/test/test2.php

Aber wenn ich mit "if" Abfrage wirds intersessant:
<?php
$fd = fopen ("beisp.dat", "r");
while (!feof($fd)) {
$line = fgets($fd, 4096);
$userdata=explode(",",$line);
if ($userdata[0]=="1"){
echo "ok";
break;
}
}
fclose ($fd);
?>

funktioniert: http://home.pages.at/kazaa/test/test3.php

Aber die 2. Abfrage geht nicht mehr:
<?php
$fd = fopen ("beisp.dat", "r");
while (!feof($fd)) {
$line = fgets($fd, 4096);
$userdata=explode(",",$line);
if ($userdata[1]=="2"){
echo "ok";
break;
}
}
fclose ($fd);
?>

http://home.pages.at/kazaa/test/test4.php

Vielleicht versuchts ihr mir das eh die ganze Zeit zu erklären, aber ich überreiss net ganz was ihr mit dem "\n" meints :(
Bearbeitet von jives am 11.02.2002, 19:57

Philipp

Here to stay
Registered: Jul 2001
Location: Wien
Posts: 2004
Ersetzte: $line = fgets($fd, 4096);

durch: $line = rtrim(fgets($fd, 4096));

:)

Philipp

Here to stay
Registered: Jul 2001
Location: Wien
Posts: 2004
Und hier eine optimiertere Variante des Scripts:

Code: PHP
<?php
if (file_exists("beisp.dat")) { 
 $fd = file("beisp.dat");
    for($i=0;$i<count($fd);$i++) {
       $userdata = explode(",",rtrim($fd[$i]));
       if ($userdata[1]=="2") {
           echo "ok";
           exit;
       }
    }
 } else {
   echo "Kann Datei beisp.dat nicht öffnen";
   exit;
}
?>
beispiel_4770.zip (downloaded 60x)
Bearbeitet von Philipp am 11.02.2002, 22:00

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
BIG THX, es funktioniert! :) Muss gleich mal nachsehen was rtrim() ist ;)
EDIT: Was mich verwundert hat ist, dass er die Leerzeichen nicht ausgibt. Aber jetzt ist alles klar.
Bearbeitet von jives am 11.02.2002, 22:50

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Kaum ist ein Problem gelöst, komm ich schon wieder nicht weiter :D :(
Ich möchte mit include() eine .php / .shtml Datei einfügen, die auf einem anderen Server liegt. Die .php Datei wird vom Server geparst, aber das sollte nix machen, da php beim include-Befehl ja in html umschaltet. Nur leider funktioniert
include("http://www.beispiel.url/beispiel.php");
nicht, obwohl die Funktion enabled ist und es laut Referenz gehen müsste. Wenn ich die Datei auf den lokalen Server lege, ist das kein Problem. Aber als Übergangslösung muss ich das so machen :(
Hat jemand eine Idee was da los ist?
Bearbeitet von jives am 13.02.2002, 21:44
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz