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 20-10-2008, 21:15
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard Regulärer Ausdruck: Speicherprobleme?

Hi,
ich hab den folgenden RegExpr

PHP-Code:
 preg_match("#(.*)nobr\((.*?)\);(.*)#is",$result['body'], $match); 
Der soll mir Text vom Typ

Code:
Header
nobr(
Body
);
Footer
Splitten, das klappt auch, aber ich habe festgestellt, dass es nicht immer klappt.

Bei einem String mit knapp 1000 Zeilen liefert der RegExpr kein gültiges Ergebnis mehr, jedoch auch keine Warnung (error_reporting (E_STRICT | E_ALL); ) die mich darauf hinweisen könnte.

Dies ist ein lästiges Problem. Ist es bekannt?
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #2 (permalink)  
Alt 20-10-2008, 22:05
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

afaik haben die älteren PHP-Versionen ein paar der Bugs bzgl. preg_* (zumindest hatte ich auch mal das Problem. Da kam dann nur eine weiße Seite und ein segfault).
Da hilft dann wohl nur auf eine aktuelle PHP-Version updaten.
Mit Zitat antworten
  #3 (permalink)  
Alt 20-10-2008, 22:05
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

5.2.5. Ist das zu alt?
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #4 (permalink)  
Alt 20-10-2008, 22:16
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wohl eher ausreichend...

Probier es mal mit ini_set_und einer/beiden dieser Einstellungen
http://de3.php.net/manual/en/pcre.configuration.php
Mit Zitat antworten
  #5 (permalink)  
Alt 20-10-2008, 22:28
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
 ini_set("pcre.backtrack_limit",100000000);
   
ini_set("pcre.recursion_limit",100000000);
   
   
       
preg_match("#(.*)nobr\((.*?)\);(.*)#is",$result['body'], $match); 

klappt net :/
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #6 (permalink)  
Alt 20-10-2008, 22:40
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du sollst es ja auch runter setzen.....................
Mit Zitat antworten
  #7 (permalink)  
Alt 20-10-2008, 22:44
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wieso dass? Limits sollte man doch herauf setzen, oder nicht?

Wie auch immer, ich habe es mit jeweils 100 getestet, kein Erfolg :/
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #8 (permalink)  
Alt 20-10-2008, 22:50
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dein Skript verreckt, weil es sich verrennt.
Wahrscheinlich am .*
Dementsprechend limits runter setzen.

Probier es mal mit 2-5.

Wenn es dann auch nicht geht probiert mal statt dem
.*
irgendwas wie
+{0,100}

Das wird in der aktuellen Version niemals so arbeiten wie du es dir gerade vorstellst. Es ist buggy. Es geht hier nur noch um Schadensbegrenzung.
Mit Zitat antworten
  #9 (permalink)  
Alt 20-10-2008, 22:52
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Klappt auch nicht.

Was davon ist denn buggy? Ich muss einen relativ großen Inhalt durch preg_match durchjagen und habe keinen Einfluss auf die größe dieses Texts
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #10 (permalink)  
Alt 20-10-2008, 22:55
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Mensch, weiß ich doch auch nicht, ich seh doch nicht mal was du da alles durch schubst...

Schreib dir halt ein einfaches Skript, welches nur den Text und den preg enthält, und dann spiel mal ein wenig mit der Länge vom Text rum.
Ggf. liegt es ja auch an einem Zeichen (Stichwort ISO vs. UTF8).

Was willst du überhaupt machen? Hilft nicht ggf. auch ein preg_split / explode?
Das (.*) vorne schiebt ja auch alles in den Ram ... das ist auch nicht unbedingt klasse.
Mit Zitat antworten
  #11 (permalink)  
Alt 20-10-2008, 22:57
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Naja es ist quasi ein Makro, dass in einem Vorverarbeitungsschritt dem restlichen Parser sagt: Der Teil des Codes, der in nobr(); gepackt worden ist, soll keine Linebreaks haben.
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #12 (permalink)  
Alt 20-10-2008, 22:59
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

nobrs können nicht verschachtelt werden?
Dann mach doch ein explode("nobr(", $text);
und das restliche Pattern dann in einer foreach-Schleife auf kleinere Text-Blöde - sofern überhaupt notwendig.
Mit Zitat antworten
  #13 (permalink)  
Alt 20-10-2008, 23:00
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das könnte eine Idee sein, danke
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #14 (permalink)  
Alt 20-10-2008, 23:29
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Ab einer Gewissen Textlänge greift .*? nicht mehr. Lösung: .+
Mit Zitat antworten
  #15 (permalink)  
Alt 21-10-2008, 01:24
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Was soll denn eigentlich das .*? da? Was willst du damit matchen?

. = ein beliebiges Zeichen
.* = beliebig viele beliebige Zeichen
a? = ein a oder kein a
.*? = beliebig viele beliebige Zeichen oder nicht beliebig viele beliebige Zeichen

Speziell der Teil "nicht beliebig viele beliebige Zeichen" ist immanent mehrdeutig, unverdauliches Zeug für die PCRE-Engine.
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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:58 Uhr.