WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » Script-Tuning » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Die letzten 5 Postings in diesem Thema » Alle anzeigen
von Ori
Der Code muss angepasst werden, um auch neue Einträge verarbeiten zu können, dazu ist es aber nötig, die API des $db-Objektes zu kennen.

Du musst also zuerst prüfen, ob ein Datensatz mit solch einer id bereits vorhanden ist (etwa mit SELECT COUNT(*)) und dann entscheiden, ob ein neuer Datensatz angelegt werden muss (INSERT, quasi der alte Ansatz), oder ob eine UPDATE-Anweisung ausreicht.
von raiserle
Hab jetzt nicht alles durchgelesen, nur den letzten Beitrag.

Aber mein Vorschlag...
Öffne die Datei, und lies einen Datensatz ein, ab letzter Position vom Filepointer. Wenn noch ein Datensatz vorhanden ist, weitermachen .. nächsten Datensatz holen und letze Position vom Dateiziger holen.
So wie ich das mitbekommen habe, willst den ja in eine DB haben.
Also schreib den Datensatz in die DB und speicher dir die Position des Filepointers.
schliesse die Datei.
Mach ein header() auf das selbige Script.
So sollte ein DS nach dem anderen in die DB wandern, ohne das du die komplette Datei in den Speicher haust.

Gruß raiserle
von corny
Die Datei selber(die größte) ist 11,39 mb groß.
offiziell stehen mir 9mb RAM zur Verfügung.
Das Script wird aber erst bei Überschreiten der 10 MB abgebrochen.

Ja, es gibt auch Einträge in der Datei, die komplett in die DB übernommen werden müssen, also nicht nur geupdated werden müssen.

ist es möglich, dass man die Datei splittet und bei jedem Scriptaufruf nur eine der Dateien eingelesen werden? Ist es dann möglich, dass sich das Script nach Durchlauf einfach erneut aufruft?
von Ori
chip schrieb am 08.08.2007 11:21
Ori schrieb am 08.08.2007 00:48
file_get_contents lädt die (nach corny überdimensional große) Datei in den RAM, was wohl die Providervorgabe sprengen dürfte, insofern ist zeilenweises Abarbeiten vermutlich nötig (und bei einer riesigen Datei wohl auch schneller als das Zerlegen eines gewaltigen Strings).


Ist es hier nicht das selbe? Dann wird eben Zeile für Zeile eingelesen und belastet trotzdem den RAM.

Via file_get_contents wird die gesamte Datei auf einmal in den RAM gelesen. Wenn die Datei zeilenweise gelesen wird, ist nicht alles gleichzeitig im RAM, sondern nur die gelesene Zeile (und ein bisschen für die Verwaltung des Dateizugriffs, das ist aber vernachlässigbar).

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11:
$filearray = fopen ($file, 'r');

while (!feof($filearray))
{
    $line = fgets($filearray);
    $arr = explode(',', $line);
    $sql = 'UPDATE ' . VILLAGE_TABLE . ' SET points = \'' . $arr[5] . '\', rank = \'' . $arr[6] . '\' WHERE id = \'' . $arr[0] . '\' LIMIT 1';
    $db->sql_query($sql);
}

fclose ($filearray);

Ein paar Kommentare dazu: Ich vertraue list() nicht, weil das wohl intern in einfache Variablenzuweisungen umgemünzt wird, wir aber nur drei der sieben Werte wissen wollen. Abspeichern der Variablen für einmalige Verwendung bringt auch keinen Geschwindigkeitszuwachs.

Stehen in der Textdatei eigentlich auch neue Einträge, die vorher nicht in der Datenbank standen? Und: Wie groß ist die Textdatei eigentlich?
von corny
chip schrieb am 08.08.2007 11:21

$id, $name,$x, $y und $player würde sich dabei, wenn alles richtig läuft nie verändern, nur $points und $rank.


Warum wird es dann in die Textdatei geschrieben und ausgelesen?


Zia, da kann ich leider gar nichts dran ändern.
Der Inhalt der Textdatei wird mir so geliefert wie er ist.
Mein Job ist es nur diese Textdatei möglichst, RAM, schonend in die DB zu befördern.

Nach oben