Tag: PHP

Typo3: PNG transparenter Hintergrund orange

Beim vergrößern bzw. verkleinern von PNG Grafiken kann es passieren, das der Hintergrund Orang ausgefüllt wird. Dies liegt an der verringerten Farbgrafik, welche in der Thumbs.php fälschlicherweise gesetzt wird.

Zur Behebung von diesem Bug einfach in der Zeile 237 von /t3lib/thumbs.php die entsprechende Zeile auskommentieren.
[php]
// Vorher
$colors = ($sizeMax>56)?’-colors 64′:’-colors 16′;
[/php]

[php]
// Nachher
// $colors = ($sizeMax>56)?’-colors 64′:’-colors 16′;
[/php]

Das wars schon. Jetzt sollten die Grafiken wieder normal angezeigt werden.

[random_content group_id=”211″ num_posts=”1″]

ve_guestbook 2.8.1 & cruser_id

Habe gerade festgestellt, das die Typo3 Extension ve_guestbook durchaus in der Lage ist, Daten der FE-User auszulesen und diese in die Felder Name und Vorname bzw. E-Mail einzufügen. Dabei wird jedoch, sollte der FE-User einen Namen gewählt haben, der nur aus einem Teil besteht z.B.: James oder Paul, der erste Buchstabe abgeschnitte. Dies stammt aus der Annahme, das jeder Benuter einen doppel Namen wie “James Bond” oder “Max Mustermann” eingibt und somit das Leerzeichen zwischen den Namen weggeschnitten werden muss. Aber das nur am Rande.

Wenn die Erweiterung jedoch schon so intelligent ist, warum liest sie nicht einfach die Uid des FE-Users aus? Diese bekommt man über

[php]
$GLOBALS[‘TSFE’]->fe_user->user[‘uid’];
[/php]

In der Datenbank ist auch bereits ein Feld dafür vorgesehen “cruser_id”, denke ich, jedoch wird dieses Feld immer mit “0” befüllt. Abhilfe schaffen kann man in der Datei pi1/class.tx_veguestbook_pi1.php in der Zeile 727 durch einfügen von folgendem Codeschnippsel

[php]
$saveData[‘cruser_id’] = $GLOBALS[‘TSFE’]->fe_user->user[‘uid’];
[/php]

Ab sofort werden die Kommentare mit der User-ID des FE-Users gespeichert. Wofür dies nützlich sein kann, wird in einem späteren Beitrag verraten.

[random_content group_id=”211″ num_posts=”1″]

Alternative zu Zend Studio

Das absolute Non Plus Ultra für PHP Entwickler ist das Zend Studio. Eine Entwicklungsumgebung die so gut wie keine Wünsche mehr offen lässt. Mit knapp 500€ kostet die Entwicklungsumgebung jedoch auch nicht wenig. In Firmen mag dies der gerechte Ausgleich zum Office sein. Während Sekretärinnen und Chef hauptsächlich Microsoft Produkte nutzen, ist für einen Entwickler ein kostenloses Linux Derivat viel angenehmer. Zudem es den IE auch für Linux gibt.

Für PHP Entwickler, die jeglich Lizenzkosten vermeiden wollen, gibt es jedoch eine kostenlose Alternative die nicht umsonst ist, Eclipse mit PDT. Eclipse ist eine kostenlose Entwicklungsumgebung, die ursprünglich auf Java ausgerichtet ist.

Mit nur einem Plugin hat man jedoch auch die Möglichkeit HTML, CSS, PHP und JavaScript zu implementieren. Ein paar Java Features gehen unterwegs verloren. So funktioniert das Shortcut STRG + 7 in der PHP Ansicht nicht. Hiermit ist es möglich, markierte Zeilen mit einzeiligen Kommentarzeichen zu versehen und wieder aufzuheben.

Syntaxfehler werden angezeigt aber nicht, wie in Java, automatisch korrigiert. F3 dagegen funktioniert insofern, das Eclipse alle Dateien auflistet in denen die Funktion vorkommt. Welche im konkreten Fall verwendet wird, kann es nicht entscheiden. Includes und Requieres werden also nicht interpretiert.

Hier liegt auch der Schwachpunkt. Ein direktes debugging wie im Zend Studio ist nicht möglich, da Eclipse den Code nur teilweise versteht. Variablen, Funktionen, Methoden und Klassen werden erkannt und vorgeschlagen. Code wird vervollständigt. Auf nicht geschlossene HTML-Attribute, Klammern und Anführungszeichen wird hingewiesen.

Kurz vor Jahresende kommt PDT in der Version 2. Wer es jetzt schon mal testen will findet es unter http://www.eclipse.org/pdt/ . PDT wird von IBM zusammen mit Zend entwickelt. Man kann also hoffen, das es in der nächsten Version eine Reihe von Verbesserungen gibt.

WordPress 2.6.5 is available! Please update now.

Gestern Nachmittag hatte ich bei Securityfocus erst die Anzahl von Vulnerabilities zwischen Typo3 und WordPress verglichen. Typo3 kam auf zwei Seite, WordPress auf drei. Wobei viele Meldungen auf Typo3 Extensions entfallen. WordPress hat diesen Bonus nicht.

Bevor ich jetzt jedoch die ganze Update Prozedur starte, habe ich mir die Unterschiede zwischen WordPress 2.6.3 und WordPress 2.6.5 angeschaut. Die WordPress Version 2.6.4 wurde übersprungen, da es wohl eine Fake Version gab.

Das Update würde insgesamt nur 5 Dateien betreffen. Dafür den Aufwand treiben, die Datenbank zu sichern, alles löschen, das ganze WordPress Paket einspielen, ist mir zu aufwendig. Ich werde es händisch machen und mir dabei gleich mal die Fehler anschauen.

In einer Datei wird bloß die Versionsnummer hochgezählt. Manche Blogs behaupten, das Technorati Blogs aus dem Index schmeißt, die eine ältere WordPressversion verwenden, wie alt diese jedoch sein muß konnte ich bisher nicht herausfinden. Prinzipiell ist dies jedoch für mich ein Schwachstelle, wenn man “von außen” herausfinden kann, auf welcher Version ein System läuft. Dadurch wird es dem Angreifer umso leichter gemacht, den richtigen Hebel auszuwählen um anzusetzen.

Schauen wir uns einen weiteren Fehler an. Dies soll keine Klugscheißerei werden, denn die kann keiner leiden, aber nur aus Fehlern lernt man.

[php]
// File: /wp-admin/users.php

129 129 $go_delete = false;
130 130 foreach ( (array) $userids as $id ) {
131 $id = (int) $id;
131 132 $user = new WP_User($id);
132 133 if ( $id == $current_user->ID ) {
[/php]

Zeile 5 bzw. 131 ist neu. Bevor die Variable $id an WP_User übergeben wird, wird sie nach int gecasted. Dies ist auch sinnvoll, denn ursprünglich kommt das Array direkt aus einem Formular und nicht etwa aus der Datenbank.
Was mir jedoch nicht ganz schlüssig ist, warum wird der Cast nicht direkt in der Methode gemacht? Die Methode wird bestimmt noch an mehreren Stellen aufgerufen und man sollte der Methode die Verantwortung übertragen, sicherzustellen, das nur die richtigen Werte übertragen werden.

Betrachten wir noch eine weitere Lücke, die verdeutlichen soll, warum PHP Anwendungen so anfällig sind. In Programmiersprachen wie Java oder JavaScript wäre der Fehler schon von Anfang an aufgefallen.
Sehen wir uns zuerst den alten Code an:
[php]
// File: /wp-includes/feed.php

498 echo ‘http’
499 . ( $_SERVER[‘https’] == ‘on’ ? ‘s’ : ” ) . ‘://’
500 . $_SERVER[‘HTTP_HOST’]
501 . wp_specialchars(stripslashes($_SERVER[‘REQUEST_URI’]), 1);
[/php]

Und nun die Neue:

[php]
// File: /wp-includes/feed.php

498 $host = @parse_url(get_option(‘home’));
499 $host = $host[‘host’];
500 echo clean_url(
501 ‘http’
502 . ( (isset($_SERVER[‘https’]) && $_SERVER[‘https’] == ‘on’) ? ‘s’ : ” ) . ‘://’
503 . $host
504 . stripslashes($_SERVER[‘REQUEST_URI’])
505 );
[/php]

Bevor jetzt also geprüft ob der $_SERVER[‘https’] == ‘on’ wird erstmal überprüft ob die Variable ob überhaupt gesetzt ist. Wenn die Variable nicht gesetzt ist, macht es auch keinen Sinn zu überprüfen ob sie on ist. Sollte die erste Bedingung bereits fehlschlagen wird sofort abgebrochen. Dafür sorgt das &&.

PHP Stylesheet CSS

Wie bereits in den 5 Tipps für eine schnellere Webseite beschrieben sollte man soviel Code wie möglich in die CSS Datei auslagern. CSS Dateien haben, genauso wie HTML nur einen Nachteil, man kann keine Logik implementieren. In PHP ist dies jedoch möglich. Außerdem kann PHP so tun als sei es CSS.

[php]

[/php]

In HTML wird es wie eine CSS Datei eingebunden.

[html] [/html]

Manche Kunden möchten gerne das jede Kategorie eine andere Farbe hat. Bevor man jetzt anfängt 10 verschiedene Stylesheet Dateien anzulegen, wäre es einfacher jedes Design in ein anderen Ordner zu legen und diesen per GET zu übergeben.

[html] [/html]

Um das Stylesheet übersichtlich zu gestalten, sollte man wirklich nur den Dynamischen Teil in eine PHP CSS Datei auslagern. Die untere CSS Datei würde wie folgt aussehen:

[css]

/* NUR FUER FARBEN UND HINTERGRUENDE */
/* DER REST ALLES IN STYLESHEET.CSS */

/* KOPF */

#kopf {
background-image:url(kopf/header_start.jpg);
background-repeat:no-repeat;
height: 220px;
}
[/css]

In der Codevorschau ist dieses Beispiel sehr bunt. Wer jedoch solche Dateien mit VI bzw. VIM erstellt, wird jedoch enttäuscht werden, weil der Editor das Syntaxhighliting aufgrund der Dateiendung entscheidet. Dies kann man jedoch manuell auf CSS umschalten. Danach ist der PHP Code zwar schwarz, aber die Datei sollte auch hauptsächlich aus CSS bestehen.

Wer in seinem VIM-Menü verzweifelt nach CSS sucht, wird unter Cascading Style Sheets fündig.