2016-04-11 2 views
1

Ich muss eine 20k bis 30k Datei registrieren mit einem einfachen Schlüssel: Wert pro Zeile. Ich muss es in einer Datei behalten, da andere Instanz es auch verwenden wird. Dann muss ich einen bestimmten Schlüssel finden, um seinen Wert zu erhalten und auch einen Schlüssel schreiben: Wert in der Datei. Ich habe mich gefragt, welche der folgenden Methoden sind schneller/besser oder als gute Praxis angesehen.Ist es gut, Systemaufrufe zum Schreiben und Lesen einer Datei in PHP zu verwenden?

Um eine Datei zu schreiben, weiß ich über drei Möglichkeiten, es zu tun: zuerst:

$fh = fopen('myfile.txt', 'a') or die("can't open file"); 
fwrite($fh, 'key:value'); 
fclose($fh); 

Sekunde oder mit file_put_contents

file_put_contents('myfile.txt','key:value',FILE_APPEND); 

und dritte ein Systemaufruf.

exec("echo key:value >> myfile.txt"); 

Und auch, um eine Datei zu lesen und eine Linie a finden können tun: Mit file_get_contents

$filename = 'info.txt'; 
$contents = file_get_contents($filename); 
foreach($contents as $line) { 
$pos = strpos($line, $key); 
} 

Datei Mit

$filename = 'info.txt'; 
$contents = file($filename); 
foreach($contents as $line) { 
$pos = strpos($line, $key); 
} 

Und mit einem Systemaufruf:

exec("grep $key | wc -l",$result); 
+3

Halten Sie sich an die PHP-Funktionen. Auf diese Weise wird Ihr Code auf andere Betriebssysteme portierbar sein. –

Antwort

1

Ich schätze, Sie haben bereits überlegt, eine Datenbank zu verwenden? Denn sonst erfindest du das Rad neu. Eine Datenbank bietet alle Vorteile beim schnellen Suchen und Sperren auf Zeilenebene.

Wenn Sie eine Datei verwenden, müssen Sie diese selbst erstellen.

Ich rate dringend zu einer Art von Datenbank zu wechseln.

BTW, Sie erwähnen nicht, wenn Sie Werte ersetzen oder nur an die Datei anhängen.

+0

auch seit seinem Schlüssel: Wert, können Sie grundsätzlich suchen und entfernen. Wenn Sie dann einen Export benötigen, kann der CSV-Export portabel sein. Sehen Sie sich die DB-Lösung an. Alle aktuellen Webapps (nodejs, ruby, etc ..) können DB lesen und lesen von db sind in ms ausgedrückt. – azngunit81

+1

Dies sollte ein Kommentar und keine Antwort sein, da es die gestellte Frage nicht beantwortet. – Veve

+0

Sehr geehrter Mark, vielen Dank für Ihren Kommentar. Erstens: Wenn der Schlüssel existiert, wird er durch einen neuen Zeitstempel ersetzt, andernfalls wird er angehängt. Zweitens: Meiner Meinung nach, wenn ich mit einer einzigen Tabelle db arbeiten werde ... ist es das gleiche, eine Datei zu verwenden, da ich relationale Abfragen nicht mache und auch schneller sein sollte. Bitte lassen Sie mich wissen, was Sie darüber denken. Gibt es einen guten/technischen Grund, eine db anstelle einer Datei zu verwenden? – user2977753

Verwandte Themen