PHP Textfile: Get line & explode

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
Guten Tag zusammen,

ich würde gerne einige Daten in einem TXT File abspeichern. Dazu nehme ich den Hashwert von einer ID, damit jede Zeile eine eindeutig identifizierbar ist.

Mein Problem was ich nun habe ist:
Wenn ich jetzt ganz viele Zeilen habe, wo der Anfangszeit jeweils die Identifikationsnummer ist, wie suche ich mit PHP nach einer bestimmten Identifikationsnummer und lasse mir diese Zeile zurückgeben? - Damit ich mit dieser Zeile dann arbeiten kann.

Und eine weitere Frage wäre, was wäre ein sinnvolles Trennzeichen für zwischen den Werten. Weil ich Speicher URLs und Preise etc. Da geht weder ein -, noch ein /, :, usw...

Mit freundlichen Grüße und vielen Dank!
 
statt explode würde ich eher ein serialisiertes array in der datei speichern und es wieder desialisieren..

also
PHP:
$data = [
    ['url' => 'url 1', 'price' => 10], 
    ['url' => 'url 2', 'price' => 20]
];

$file = 'my-data.txt';

//speichern
file_put_contents($file, serialize($data)));

//auslesen $newData ist nun = $data
$newData = unserialize(file_get_contents($file));

echo $newData[0]['url']; // gibt url1 aus
 
Zuletzt bearbeitet von einem Moderator:
FrazeColder schrieb:
Guten Tag zusammen,

ich würde gerne einige Daten in einem TXT File abspeichern. Dazu nehme ich den Hashwert von einer ID, damit jede Zeile eine eindeutig identifizierbar ist.

Mein Problem was ich nun habe ist:
Wenn ich jetzt ganz viele Zeilen habe, wo der Anfangszeit jeweils die Identifikationsnummer ist, wie suche ich mit PHP nach einer bestimmten Identifikationsnummer und lasse mir diese Zeile zurückgeben? - Damit ich mit dieser Zeile dann arbeiten kann.

Und eine weitere Frage wäre, was wäre ein sinnvolles Trennzeichen für zwischen den Werten. Weil ich Speicher URLs und Preise etc. Da geht weder ein -, noch ein /, :, usw...

Mit freundlichen Grüße und vielen Dank!
Hastable nehmen mit der id als key. ALs Value eine Datenstruktur (struct / record / wie_immer_das_unter_PHP_heißt). Und zum speichern die Hashtable serialisieren.
 
Das ganze schreit doch förmlich nach Datenbank. Wie wärs mit MySQL/MariaDB? Ist wirklich nicht schwer php damit zu verbinden.
 
Das ist alles schwer zu sagen, ohne die Datenstruktur zu kennen.

Wieso speicherst du überhaupt einer TXT-Datei? Du könntest ein Array machen:
$data=array(
"meinKey1"=>array("url"=>"http://www....", "preis"=>12.00"),
"meinKey2"=>array("url"=>"http://www....", "preis"=>13.00"),
"meinKey2"=>array("url"=>"http://www....", "preis"=>13.00"),
);

Das speicherst du dann serialisiert in einer Textdatei ab, wie von kling1, beschrieben:
//speichern
file_put_contents($file, serialize($data)));
//auslesen $newData ist nun = $data
$data = unserialize(file_get_contents($file));

Zugriff auf die Daten dann via
$data["meinKey1"]["url"];

Oder via foreach:
foreach($data as $key=>$value)
echo "$key: URL ist {$value["url"]}, Preis ist {$value["preis"]}";
 
Ich hatte das mit der Datenbank echt nicht vor den Augen. Mach das jetzt mit einer DB :D

Weiß jemand, wieso ich keine Datenbankverbindung bekomme oder was an meinem Code falsch ist?
Habe als Engine InnoDB. Kann ich die Folgenden Funktionen wie "mysqli" nicht nutzen?

Code:
        $servername = "localhost:3306";
	$username = "secret";
	$password = "secret";
	$db = "secret";
	$database = new mysqli($servername, $username, $password, $db);

	if($database->connection_error){
		fwrite($myfile, "+++Couldn't connect to database!+++\n\n");
	}
	write($myfile, "Connected to database!\n\n");

	$return = $database->query("SELECT * FROM `wp_all_import_before`");

	if($return->num_rows > 0){
    	while($row = $return->fetch_assoc()) {
        	fwrite($myfile, "ID: ".$row["pid_hash"]." - Price: ".$row["price"]." - Price Old: ".$row["price_old"]." - Link: ".$row["link"]." - Shop: ".$row["shop"]."\n\n");
    	}
	}else{
		fwrite($myfile, "No Data Found!");
	}
 
Bekommst du eine Fehlermeldung? Ist mysqli nicht installiert/aktiv (->phpinfo)?
Übrigens solltest du das Script abbrechen lassen, wenn keine Datenbankverbindung da ist und nicht einfach weitermachen.
 
Habe es hinbekommen, Danke! :)
Hatte es vergessen zu Posten. lag an dem :3306 hinter localhost
 
Zurück
Oben