php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 27-09-2006, 20:25
Phoenix666
 Newbie
Links : Onlinestatus : Phoenix666 ist offline
Registriert seit: Sep 2006
Beiträge: 25
Phoenix666 ist zur Zeit noch ein unbeschriebenes Blatt
Question Code Beschleunigen??

hi,

ich hab mal ne frage!

kann man diesen code so umschreiben das dies schneller ausgeführt wird?
Denn dieser Code funktioniert zwar aber er ist ziemlich langsam.

hier mal der Code:

PHP-Code:
$file="lib/php_list.php"# Datei mit den ganzen php befehlen
$phplistersatz1='<a href="http://de.php.net/manual/de/function.'
$phplistersatz2='.php" onclick="window.open(\\\'http://de.php.net/manual/de/function.';
$phplistersatz2a='.php\\\'); return false">';
$phplistersatz3='</a>';
$phplistsuche=array(); 


$phplistsuche=file($file);

$phplistsuche=array_reverse($phplistsuche); 
$count=count($phplistsuche)-1;


        while (list(
$val,$nex) = each($phplistsuche)) 
        {
        
$line=trim($nex); 
        
$BBCodes preg_replace('#(.*[^a-zA-Z0-9])'.$line.'(.*[^a-zA-Z0-9])#i',
'$1'.$phplistersatz1.strtolower($line).$phplistersatz2.strtolower($line).
$phplistersatz2a.$line.$phplistersatz3.'$2',$BBCodes,-1); 
        } 
in der Datei php_list.php stehen alle PHP Befehle.

Funktion:
Ich möchte aus einem Text der aus einer DB geladen wird alle
Wörter, die PHP Befehle sind (wie in der datei angegeben)´,
als Link darstellen.
Mit Zitat antworten
  #2 (permalink)  
Alt 27-09-2006, 20:36
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

was ist denn die bremse? die regulären ausdrücke vermutlich?
kann man da nicht einfache string-fkt. nutzen?
Mit Zitat antworten
  #3 (permalink)  
Alt 27-09-2006, 20:47
Phoenix666
 Newbie
Links : Onlinestatus : Phoenix666 ist offline
Registriert seit: Sep 2006
Beiträge: 25
Phoenix666 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

was da die bremse ist weiß ich nicht, weiß nur das die Seite anstatt 0,05 sec jetzt 2,5 sec brauch um generiert zu werden.

in der Datei stehen die befehle unter einander.
also so:

.....
chdir
checkdate
checkdnsrr
chgrp
chmod
chop
chown
chr
chroot
chunk_split
.....

will ja auch nicht das der mir andere Wörter zur hälfte als link erstellt
wie zb. das Wort "dieser" hier würde er wie ich es vorher hatte "die"
als link erstellen und "er" hinten dran hängen.

so hatte ich dies vorher:

hier als bsp. ohne ersatz aber auch in der while Schleife.

PHP-Code:
$BBCodes=str_replace($nexstrtolower($nex) , $BBCodes); 
Weiß nicht wie ich es anders lösen könnte.
über einen lösungsvorschlag würde ich mich freuen!
Mit Zitat antworten
  #4 (permalink)  
Alt 27-09-2006, 22:06
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Hää..
suchst du http://www.christian-seiler.de/proje...ode/index.html
oder(und) http://qbnz.com/highlighter/

Liege ich jetzt ganz daneben??

Geändert von combie (27-09-2006 um 22:12 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 28-09-2006, 00:30
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

hi Phoenix666
sei bitte nicht böse,
aber wenn du deine Code optimieren willst, dann lösche alles am bestens, und fange neu an.

ich kann nicht deine
array_reverse,
list($val,$nex) = each($phplistsuche),
preg_replace

nachvollziehen.
---------------------------------------
Vorschlag

1) du erstellst eine Tabelle in datenbank
id | func
und fühlst diese Tabelle mit den functionen

Tip: http://de2.php.net/manual/de/functio...-functions.php

2)du schaust in der Tabelle ob da die wörter gibt, die in deinem Text vorkommen.
Tip:
SELECT func FROM funktionen WHERE LOCATE(func, '$deintext')<>0
damit begrenzt du deine suche, und muss nicht das ganze durchlaufen

3)
jetzl liest du in einer schleife diese ergebnisse und
machst direckt in deiner schleife ein pregreplace
Tip:
$text=preg_replace('/(\b'.preg_quote($erg['func']).')\(/ie' , .....


4)wenn du dich doch für eine datei entscheidest, dann schreib deine functionen in ein Array und speichere ihn in serializiertem zustand.
Tip:
http://de2.php.net/manual/de/function.serialize.php
http://de2.php.net/manual/de/function.unserialize.php

-----------------------------------------------------------------------------------
ich will nicht sagen, dass mein Vorschlag einzig wahre lösung ist, aber ich glaube, dass die Richtung stimmt.
__________________
Slava
bituniverse.com

Geändert von Slava (28-09-2006 um 00:59 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 28-09-2006, 01:48
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

die aktuele liste von functionen, kannst du auch jetzt abfragen
PHP-Code:
$funk=file_get_contents('http://de2.php.net/manual/de/index.functions.php'); 
$pattern = '/(?:^>([^<\(]++)\(\)<)/m';
PHP-Code:
preg_match_all($pattern,$funk $array,PREG_PATTERN_ORDER);
print_r($array[1]); 
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #7 (permalink)  
Alt 30-09-2006, 12:10
Phoenix666
 Newbie
Links : Onlinestatus : Phoenix666 ist offline
Registriert seit: Sep 2006
Beiträge: 25
Phoenix666 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für eure antworten!

werde dies alles mal testen und schaue was am besten ist.
aber wenn ich fragen habe melde ich mich nochmal


mfg
Mit Zitat antworten
  #8 (permalink)  
Alt 30-09-2006, 13:15
Shurakai
 Master
Links : Onlinestatus : Shurakai ist offline
Registriert seit: May 2004
Ort: Bergisch Gladbach
Beiträge: 3.084
Shurakai ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Slava
die aktuele liste von functionen, kannst du auch jetzt abfragen
PHP-Code:
$funk=file_get_contents('http://de2.php.net/manual/de/index.functions.php');
$pattern '/(?:^>([^<\(]++)\(\)<)/m'
Denk bitte daran, dass hierfür allow_url_fopen aktiviert sein muss!
Mit Zitat antworten
  #9 (permalink)  
Alt 01-10-2006, 00:14
Phoenix666
 Newbie
Links : Onlinestatus : Phoenix666 ist offline
Registriert seit: Sep 2006
Beiträge: 25
Phoenix666 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für den tip Shurakai aber das war mir schon bewusst

Hab das gemacht wie Slava vorgeschlagen hat, alle befehle in ne DB laden und von dort auslesen. Funzt alles wie gewollt und schnell
Und bis jetzt keine Weiteren Fragen
Danke !!


mfg
Mit Zitat antworten
  #10 (permalink)  
Alt 01-10-2006, 00:40
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Phoenix666
Hab das gemacht wie Slava vorgeschlagen hat, alle befehle in ne DB laden und von dort auslesen. Funzt alles wie gewollt und schnell
ist die db tatsächlich so schnell?
find's irgendwie umständlich. ich hätte wahrscheinlich str_replace bzw. str_ireplace mit zwei arrays benutzt, denke mal ist schneller.

@Phoenix666 kannst du ja mal testen
Mit Zitat antworten
  #11 (permalink)  
Alt 01-10-2006, 00:54
Phoenix666
 Newbie
Links : Onlinestatus : Phoenix666 ist offline
Registriert seit: Sep 2006
Beiträge: 25
Phoenix666 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich muss ja auch irgendwo her die ganzen befehle bekommen.
vorher hatte ich die ja inner Datei, sind ja auch nicht wenig
und das war auch etwas langsam, ersetzt hab ich die dann mit preg_replace, str_replace hatte ich auch schon probiert aber hat nicht so hingehauen wie ich es haben wollte. Kann auch sein das ich dabei was falsch gemacht hab, aber so gehts ja.

zum vergleich mit viel text:

Befehle aus datei ausgelesen und im txt ersetzen: knapp 30 sec. Lade Zeit.
Befehle aus DB auslesen und im txt ersetzen: knapp 1 sec. Lade Zeit.

und das finde ich dann schon schneller.

aber ich bin immer für neue ideen offen

mfg
Mit Zitat antworten
  #12 (permalink)  
Alt 01-10-2006, 01:23
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
aber ich bin immer für neue ideen offen
ja, hatte ich dir doch schon genannt:
PHP-Code:
$functions=array('echo'=>'<a href="http://www.php.net/manual/de/function.echo.php">echo</a>');
$text='blub echo blub';
echo 
str_ireplace(array_keys($functions), $functions$text); 
also ein $functions-array anlegen. der key ist die funktion und das value die ersetzung.
ist mir auch klar, dass das ziemlich groß wird. aber ich kann mir nicht vorstellen, dass die db weniger ram verbraucht bzw. schneller ist.

und darum solltest du das mal testen, weil du möchtest eine schnelle lösung und ich würde gerne wissen, was effektiver ist.

auf alle fälle ist str_ireplace schneller als preg_replace, allerdings fällt dabei viel redundanz für die a-href's an - aber das könnte man auch noch ein wenig cleverer gestalten.
Mit Zitat antworten
  #13 (permalink)  
Alt 01-10-2006, 12:48
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

strreplace ist für diese aufgabe leider nicht ausreichend, da es noch mehrere bedingungen rein kommen.
damit es funktioniert, muss man kontrolieren, das vor der funktionsname[\.\s,\(] steht und (\s*\() am ende damit es nicht zur übersneidung kommt.

info:
Ausserdem funktioniert eine suche in Datenbank einwenig anderes als bei einem Array.
nehmen wir z.b.s in_array('was',$array) und
select etwas where etwas ='was'
zum fergleich.
im Array wird auf nativer Ebene jedereler Arrayelement in einer schleife verglichen (unser Array ist 3835 datensätze gross).
Bei einer indexierter Spalte in DB, springt der zeiger in die Mitte von Tabelle(biner-baum suche) und schaut was drin steht.
stimmt die erste Buchstabe nicht , und ihr wert grösser als gesuchter ist, dann springt der zeiger in die 1/4 von Tabelle, wenn wert kleiner als gesuchter, dann weiter in die Mitte zwischen 1/4 und 1/2.

z.b.s Suche von einem wert in dem Array (unser Fall 3835 Datensätze)
um 1 wert in Array zu finden können wir von 1 bis maximal 3835 mal unser zeiger bewegen.
Dasselbe könnte in DB von 1 bis maximal 13 zeigerbewegungen geschehen.
bei str_replace oder preg_replace mit Arrays, werden die genennte funktionen einfach dasselbe operazion 3835 mal durchführen.
Ausserdem wird zum Erschafung von 'such' und 'replace' arrays mindestens 150 kb von arbeitsspeicher reserviert.
Mit DB lösung, wird unser Text nur einmal untersucht, und schon werden der Untersuchung werden die Datensätze nach (biner-baum-suche) DB-prinzip zusammen gestellt und zum unserem REPLACE funktionen freigegeben.
meine Tests haben mir gezeigt, dass es in unserem fall funktioniert db etwa 2 mal schneller als includierte array.
damit die Andere auch testen könnten, und es ist nicht ausgeschlossen, das es bei bestimmten Bedingungen (überlastete DB-server) die Arraylösung doch schneller gehen kann, mache ich ein Anhang von funktionen als sql , als auch eine php datei zum includen.
Angehängte Dateien
Dateityp: zip funk.zip (37,5 KB, 62x aufgerufen)
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #14 (permalink)  
Alt 01-10-2006, 18:21
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Slava
damit es funktioniert, muss man kontrolieren, das vor der funktionsname[\.\s,\(] steht und (\s*\() am ende damit es nicht zur übersneidung kommt.
wobei am anfang auch noch "=" stehen kann, muss man mal sehen, wie man da einen guten regex hinbekommt.

aber du hast mich damit auf eine andere idee gebracht:

* preg_match_all mit o.g. regex, um alles herauszufischen, was wie eine php-funktion aussieht.

*in einer schleife, die potentiellen funktionen überprüfen (in_array oder besser isset - dazu muss das array noch umgebaut werden)
- alternative ohne array: function_exists() - obwohl, doch nicht so gut, wegen selbst definierten funktionen

* wenn funktion existiert, dann ein str_replace durchführen
am besten noch in einem tmp-array merken, welche ersetzung schon durchgeführt wurde

ich denke mal, das müsste schnell laufen und man muss nicht alle möglichen php-funktionen überprüfen.
Mit Zitat antworten
  #15 (permalink)  
Alt 01-10-2006, 18:52
Phoenix666
 Newbie
Links : Onlinestatus : Phoenix666 ist offline
Registriert seit: Sep 2006
Beiträge: 25
Phoenix666 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich hab hier mal meinen Code als anhang bereitgestellt.
einfach die Db die Slava bereitgestellt hat nehmen und danach in meiner Datei die daten(DB Name , pw usw) eingeben und schon kann man testen

Ist denke ich mal nicht die beste lösung aber sie funktioniert.
Ich habs ja nicht so mit den REGEX darum bin ich ja froh das ich es überhaubt hinbekommen hab
wenn einer noch ne bessere lösung hat immer her damit

Danke für eure Hilfe!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:02 Uhr.