PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

03-06-2005, 18:27
|
Sardine
Newbie
|
|
Registriert seit: Apr 2004
Ort: Pazifischer Ozean
Beiträge: 44
|
|
40000 Zeilen aus txt auslesen
Hallo,
ich hab mir ein Skript gebastelt, welches mir eine *.txt Datei ausliest und alle Zeilen der Reihe nach auflistet und noch geichzeitig durchnummereriert.
Wie ihr euch jetzt denken könnt, ist das ganze Teil jetzt recht lahm geworden und braucht etwa 20 Sec. bis die Seite komplett ausgelesen ist.
Zustzlich hab ich noch ne Suchfunktion, die ebenfalls alle Einträge der Datei durchsucht und die Treffer dann listet und ebenfalls nummerriert.
Dadurch ist das Skript nun so langsam, dass ich öfter timeout Fehler bekomme (php.ini timeout steht bei 30 sec.).
kann mir evtl. jemand helfen wie ich sowas schneller gestalten kann (also irgendwie alle Daten einfach in ein Array legen oder so welches ich dann gleichzeitig durchsuchen und komplett ausgeben kann oder so).
Steh etwas auf dem Schlauch gerade, hab auch schon einies getestet, was aber alles nicht zufriedenstellend arbeitet.
Hier mal der Link
und noch der Code:
PHP-Code:
<?php
#################################################################################
//Wandeln des eingegebenen Suchwortes in die "suchfreundliche" Variante
$suchwort=$_POST[suche];
function sonderzeichen($string)
{
$string = strtolower($string);
$string = str_replace("ä", "ae", $string);
$string = str_replace("ü", "ue", $string);
$string = str_replace("ö", "oe", $string);
$string = str_replace("ß", "ss", $string);
$string = str_replace("´", "", $string);
$string = preg_replace('/\s/', '', $string);
$string = preg_replace('/\!/', '', $string);
$string = preg_replace('/\-/', '', $string);
$string = preg_replace('/\./', '', $string);
return $string;
}
//$lines = file($datei);
if(!empty($suchwort)){
$len=strlen($suchwort);
if($len<=2){
echo'<blockquote>Das Suchwort muss mindestes 3 Zeichen haben!<br><br>
>> <a href="javascript:history.back()">zurück zur Sucheingabe</a> <<</blockquote>';
exit;
}
$string=$suchwort;
$suchwort= sonderzeichen($string);
###############################################################################
//Zähler für die Übersicht über die gefundenen Einträge
$zahl="1";
foreach($lines as $line) {
$arr2 = explode("-",$line);
$string=$arr2[0];
$text= sonderzeichen($string);
if(strstr($text, $suchwort)){
$zahl++;
}
}
$zahl=$zahl-1;
#########################################################################
//Ausgabe der gefundenen Einträge!!!
//$zahl=$zahl-1;
echo'<center>>><a href="#suche">zur Suche
springen</a><<</center><br><br><font color="#FFFFFF">
Es wurden <font color="#FF0000" size="3">'.$zahl.'</font>
Einträge gefunden, die den Begriff
<font color="#FF0000" size="3">'.$suche.'</font>
enthalten!</font><br><br>';
###################################################################################
//Die eigentliche Suche und anschliessende Ausgabe der Ergebnisse
$i=1;
foreach($lines as $line) {
$arr = explode("-",$line);
$string=$arr[0];
$text= sonderzeichen($string);
if(strstr($text, $suchwort)){
echo '<font color="#FFFFFF">#'.$i.' - '.$line.'</font><br>';
$i++;
}
}
}
########################################################################
//Suchfeld
echo'
<a name="suche"></a><br>
<form action="liste.php" method="post">
<table border="0" cellpadding="0" cellspacing="5" bgcolor="#333333">
<tr>
<td><b><font color="#FFFFFF">Nach Interpreten suchen:</font></b></td>
</tr>
<tr>
<td><input name="suche" type="text"> <input
name="suchen" type="submit" value="suchen"></td>
</tr>
</table><br>
</form>
';
######################################################################################
//Liste aller Einträge in der playlist.txt wird erstellt
if($liste==ja){
//$handle=fopen($datei, "r");
$i = 1;
while(!empty($array[$i])){
echo'# '.$i.'<b> - </b>'.$array[$i].'<br>';
$i++;
}
}
?>
EDIT: by TobiaZ: Auch du kannst wohl deinen Code umbrechen! 
__________________
Wer brauch schon ne Signatur?
Geändert von TobiaZ (03-06-2005 um 18:37 Uhr)
|

03-06-2005, 18:39
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
ansatz: du kannst schon beim auslesen die ergebnisse filtern.
Ne Textdatei mit 40.000 einträgen ist wohl ohnehin etwas krass, oder meinst du nicht? hast du nicht die möglichkeit auf eine andere DB umzusteigen?
|

03-06-2005, 18:44
|
Sardine
Newbie
|
|
Registriert seit: Apr 2004
Ort: Pazifischer Ozean
Beiträge: 44
|
|
Klar ich könnte schon vorher filtern, aber dann geht die Übersichtsliste verloren!
Und genau das will ich ja vermeiden.
Thema DB, daran hab ich auch schon gedacht, aber die txt in die DB einzulesen kann zum Problem werden bei 40000 Einträgen oder?
__________________
Wer brauch schon ne Signatur?
|

03-06-2005, 18:46
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Zitat:
Klar ich könnte schon vorher filtern, aber dann geht die Übersichtsliste verloren!
|
verstehe ich nicht? hab mir aber auch vertsändlicherweise nicht deinen ganzen code angesehen?
Zitat:
Thema DB, daran hab ich auch schon gedacht, aber die txt in die DB einzulesen kann zum Problem werden bei 40000 Einträgen oder?
|
Was ist das für ein schwachsinn? Wenn du der meinung bist, du könntest es dem user zumuten 40.000 einträge bei jedem aufruf(!) auszulesen, dann kannst du wohl locker mal eben 40.000 einträge auf eine andere db übertragen.
|

03-06-2005, 18:52
|
Sardine
Newbie
|
|
Registriert seit: Apr 2004
Ort: Pazifischer Ozean
Beiträge: 44
|
|
Ok, das ist natürlich ein Argument!
Bin auch schon dabei die Daten in ne DB zu schreiben, bin mal gespannt wie die das verkraftet!
Aber nochmal zum Auslesen: Das soll eben eine übersichtsliste über die Titel eines Radiomoderators werden, und da ist es nötig, dass sich die Gäste alle Titel anschauen können, und über die Suchfunktion sollen sie zusätzlich die Möglichkeit haben, nach einem bestimmten Interpreten zu suchen!
__________________
Wer brauch schon ne Signatur?
|

03-06-2005, 18:54
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Zitat:
Bin auch schon dabei die Daten in ne DB zu schreiben, bin mal gespannt wie die das verkraftet!
|
Wenn deine Text-DB das verkraftet, wird eine mysql-DB das 10 mal verkraften! Glaub mir!
Zitat:
Aber nochmal zum Auslesen: Das soll eben eine übersichtsliste über die Titel eines Radiomoderators werden, und da ist es nötig, dass sich die Gäste alle Titel anschauen können, und über die Suchfunktion sollen sie zusätzlich die Möglichkeit haben, nach einem bestimmten Interpreten zu suchen!
|
Hört sich gut an, und jetzt?
|

03-06-2005, 18:58
|
Sardine
Newbie
|
|
Registriert seit: Apr 2004
Ort: Pazifischer Ozean
Beiträge: 44
|
|
Ja,ja
ich bau mir gerade die Datei ja so um, dass ich sie in eine DB einlesen kann.
Dann komm ich schon klar damit!
muss eben testen, wie schnell die DB dann die Ausgabe und die Suche ausführt!
DANKE auf jeden Fall mal!
__________________
Wer brauch schon ne Signatur?
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|