Geschwindigkeitsproblem bei BBCode

split

Erfahrenes Mitglied
Hi, da ich nach längerem Suchen keine Antwort auf mein Problem gefunden habe, frag ich mal selbst nach. (Tut mir Leid, falls dieses Thema schon behandelt wurde!)
In der Kommentarfunktion meines Newsscripts verwende ich BBCodes, unter anderem einen BBCode, zum Einfügen von Bildern. Wenn ich diesen aktiviere, verlangsamt sich das Scripts ziemlich stark (mehr als doppelt so langsam als ohne dem BBCode für die Bilder :rolleyes: )
PHP:
<?php
//Ausschnitt der Funktion bbcode()
preg_match_all('=\\[ img\\](http_://.*)\\[ /img\\]=isU', $text, $url);
	$anzahl = count($url[1]);
	for($i=0; $i<$anzahl; $i++) {
		if(preg_match('=\\.(jpg)|(jpeg)|(gif)|(png)$=i', $url[1][$i])) {
			unset($img);
			$img = @getimagesize($url[1][$i]);
			if($img) {
				if($img AND $img[0] <= 425 AND $img[1] <= 320) {
					$text = str_replace('[ img]'.$url[1][$i].'[ /img]', '<img src="'.$url[1][$i].'" width="'.$img[0].'" height="'.$img[1].'" border="0">', $text);
				}
				else {
					$text = str_replace('[ img]'.$url[1][$i].'[ /img]', '<a href="'.$url[1][$i].'" target="_blank">**Image**</a>', $text);
				}
			}
			else {
				$text = str_replace('[ img]'.$url[1][$i].'[ /img]', '<a href="'.$url[1][$i].'" target="_blank">**Image**</a>', $text);
			}
		}
	}
?>
Wenn ein Bild breiter ist als 425px oder höher ist als 320px wird es durch einen Link (**Image**) ersetzt.
Da es mein erstes Script zum Einfügen von Bildern ist, weiß ich natürlich nicht, ob man das irgendwie schneller machen könnte...
Ich hoffe ihr könnt mir bei meinem Problem helfen!

mfg
split

PS: in Zeile 2 musste ich einen _ hinzufügen, damit dass Forum den Code nicht zerreißt
 
Das liegt höchstwarscheinlich am getimagesize

Ausserdem: Was machst du dir es so umständlich, mit preg_match_all?
Code:
function makeBBImage($a_sUrl)
{
    if (strtolower(substr($a_sUrl, 0, 7)) != "http://") {
        $a_sUrl = "http://".$a_sUrl;
    }

    $sRetVal = sprintf("<img src=\"%s\" border=\"0\" alt=\"Userimage\">", $a_sUrl);

    return $sRetVal;
}

$sText = preg_replace("/\[img\](.*?)\[\/img\]/ei", "makeBBImage('$1');", $sText);
 
Hi, sorry aber bei deinem Script bekomm ich folgende Fehlermeldung:

Fatal error: Cannot redeclare makebbimage() (previously declared in C:\XAMPP\...\config.php:131) in C:\XAMPP\...\config.php on line 131

Woran könnte das liegen?
 
Zuletzt bearbeitet:
Mensch, bin ich dumm. Hatte die Funktion inner Funktion ;-)

Aber leider zerreist die Größe mancher Bilder mein Design... Gibt es eine Alternative zu getimagesize oder kann ich irgendwie eine Maximalgröße für das Bild festlegen?
 
Ich weiß zwar nicht wiso sich Leute die Arbeit antun und selbst BBCode Parser schreiben...

http://pear.php.net/package/HTML_BBCodeParser

Sowas gibts schließlich fix fertig....

Alternativen zu getimagesize() seh ich keine, esseiden du willst die GD einsetzen,und das bild laden um die daten zu bekommen.... maximalgröße? hmmm ich glaub da gibt es ein stylesheed comando... einfach mal selfhtml konsultieren ;-)
 
Danke für eure Hilfe! Ich habe es jetzt so gelöst:

1. Der PHP-Code:
PHP:
<?php
function makeBBImage($a_sUrl)
{
    if (strtolower(substr($a_sUrl, 0, 7)) != "http://") {
        $a_sUrl = "http://".$a_sUrl;
    }

    $sRetVal = sprintf("<img src=\"%s\" border=\"0\" name=\"UserIMG\" alt=\"Userimage\">", $a_sUrl);

    return $sRetVal;
}

$sText = preg_replace("/\[img\](.*?)\[\/img\]/ei", "makeBBImage('$1');", $sText);
?>

2. Dann durch JavaScript das Bild bei Bedarf verkleinern:
PHP:
<script language="JavaScript" type="text/javascript">
<!--
function resizeImage() {
	for (i=0; i<window.document.getElementsByName("UserIMG").length; i++) {
		if(window.document.getElementsByName("UserIMG")[i].width > 425) {
    		window.document.getElementsByName("UserIMG")[i].style['width'] = "425px";
		}
	}
}
//-->
</script>

<body onLoad="resizeImage();">

Nochmals danke, an alle die mich dabei unterstützt haben!
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück