Schlagwort-Archive: PHP

Mysql Massen-String Replace

Ich stolpere immer wieder über die Aufgabe, einen kleinen Teilstring datenbankweit auszutauschen; Zum Beispiel wenn ein WordPress Blog von Domain A auf Domain B umziehen soll, und alle in den Artikeln hart verlinkten URLs automatisch mittels SQL Query geändert werden sollen.

Damit ich nicht jedes Mal auf’s Neue suchen muss lege ich den Lösungsweg hier ab:

Grundsätzlich bietet sich natürlich auch die Möglichkeit, den SQL Dump in einem Texteditor mit „Find and Replace“ durchzupflügen, allerdings kann das bei größeren Projekten schon zu massiven Speicherproblemen führen. Viel schneller und leichter geht das mit der MySQL REPLACE() Funktion von der Hand.

[sql]UPDATE table_name SET column_name = REPLACE(column_name,"original_string","replace_string")[/sql]

Für WordPress würde sich das also wie folgt lesen:

[sql]UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`,"liewcf.com/wp","liewcf.com/blog")[/sql]

Hoffentlich hilft das auch Anderen!

Probleme mit FCKEditor und PHPList

Die OpenSource Software PHPList eignet sich relativ gut zum schnellen Aussenden von kleinen Newslettern auf Servern mit PHP und MySQL.

Grundsätzlich geht die Installation und Einrichtung relativ zügig vonstatten, allerdings gibt es bei einzelnen Stellen diverse Konfigurationsschwierigkeiten – so sollte u.a. auf die Installations-Dokumentation gehört werden und die Installation von PHPList tatsächlich in das Verzeichnis www.deinedomain.de/lists/ gelegt werden, um Verlinkungsprobleme im Administrationsbereich zu umgehen.

Bei all denjenigen, bei denen unter dem Punk „Nachricht erstellen“ (in der englischen Variante unter „send a message“) kein Rich Text Editor (FCKEditor kommt hier zum Einsatz) erscheint, können die folgenden Schritte eine Lösung sein:

1. Im Unterverzeichnis „/admin“ in der Datei fckphplist.php die Zeile 589 mit dieser austauschen
[php]// FCKConfig.ProtectedSource.Add( /<s>/g ) ; // ASP style server side code[/php]

Evtl. erlaubt die installierte PHP Version „short ASP Tags“, und somit werden hier Fehler geworfen.

2. Im Unterverzeichnis „/admin/FCKEditor/editor“ die Datei fckeditor.html bearbeiten, und den Befehl zum Laden des Editor auswechseln, indem Zeile 120 auskommentiert und 119 wieder „einkommentiert“ wird:
[php]
// Base configuration file.
LoadScript( ‚../fckconfig.js‘ ) ;
// LoadScript( ‚../../?page=fckphplist&action=js4‘ ) ;
[/php]

Fehlermeldungen, die (schön zu Sehen unter Einsatz von Firebug) hervorgerufen werden, lauten zum Beispiel:

FCKConfig.CustomConfigurationsPath is undefined
A.PluginsPath is undefined
FCKConfig.ContextMenu is undefined
C is undefined

PHPList FCKEditor Fehler

via http://forums.phplist.com

Probleme mit Download von dynamisch generierten Dateien im Internet Explorer

Es gibt Dinge, die sich einem einfach regelmäßig wieder in den Weg stellen – so zum Beispiel Probleme mit Downloads von dynamisch generierten Dateien in PHP im Internet Explorer.

Das folgende Fehler PopUp der Internet Explorer 6, 7 oder 8 sind ein immer wiederkehrendes Ärgernis, wenn man versucht, einen Dateidownload mittels PHP zu realisieren:

Fehler beim Herunterladen eines dynamisch generierten Dokuments im IE

Hierbei handelt es sich um ein dynamisch im Memory des Webservers generierten PDF Dokuments, das eigentlich als PDF_Preview.pdf betitelte Datei im Browser ankommen soll (und im Firefox, Safari, Opera und Chrome auch tut).

Zur Erzeugung wird der PDFLib Personalization Server genutzt, und am Ende des ganzen Erzeugungsprozesses steht ein Buffer (hier beispielhaft $pdf_buffer) des kompletten Dokumentes als Variable zur Verfügung.

Was für den Browser jetzt noch passieren muss: Per PHP header() Funktion wird dem Browser mitgeteilt, dass es sich um einen bestimmten Mimetype (ein Tool, um den MIME Type bei Dateiuploads herauszufinden gibt es hier) bzw. Datenstrom handelt (in diesem Fall handelt es sich um ein PDF, dass mit Content-type: application/pdf beschrieben wird). Weiterhin wird definiert, dass es als Dateidownload zur Verfügung gestellt werden soll, und der gewünschte Dateiname wird vom Script übergeben).

Um diesen Dateidownload (auch mit dem Internet Explorer) hinzubekommen, müssen zusätzlich diese zwei weiteren Headerinformationen mit angegeben werden:

[source:php]
header(‚Content-type: application/pdf‘)
header(‚Content-Disposition: attachment; filename=“PDF_Preview.pdf“‚);

// Folgende zwei Zeilen sind für den IE wichtig,
// alle anderen Browser brauchen sie nicht
// (stören sich daran aber auch nicht)
header(„Pragma: public“);
header(„Cache-Control: max-age=0“);

echo $pdf_buffer;
[/source]

Im Vorfeld (auf jeden Fall bevor der Buffer mit echo ausgegeben wird) sollte allerdings in jedem Fall die zu erwartende Dateigröße mittels
[source:php]
$pdf_buffer = PDF_get_buffer($p);
$len = strlen($buf);
header(„Content-Length: $len“);
[/source]
berechnet und ebenfalls per Header ausgegeben werden.

Vielleicht hilft dieser schnelle Artikel mir selbst auch beim nächsten Auftreten solcher Probleme als Gedächtnisstütze… 🙂

1und1 + Cake = Sucks

Wer unbelehrbar bei 1und1 seinen shared Hosting Account hat, sollte besser nicht versuchen, dort mit dem wunderbaren Framework CakePHP rumzuspielen…. das nervt nämlich tierisch.

Großen Dank an das Blog Archiv vom DIEVOLUTION Blog, die dort detailliert die Einträge in den .htaccess Dateien fürs mod_rewrite aufgeschrieben haben, die für eine reibungslose Installation von CakePHP auf 1und1 Servern nötig sind.

Hat mir gerade mein Wochenende gerettet. Großer Dank auch an Arne, der mich darauf hingewiesen hat 🙂

PHP: Generierung von Passworten

Ein kleines Tool zwischendurch, wenn man vergesslichen Usern ein temporäres Passwort zukommen lassen möchte:


$password = "";
$length = 8;

// define possible characters
$possible = "0123456789bcdfghjkmnpqrstvwxyz";

// set up a counter
$i = 0;

// add random characters to $password until $length is reached
while ($i < $length) { // pick a random character from the possible ones $char = substr($possible, mt_rand(0, strlen($possible)-1), 1); // we don't want this character if it's already in the password if (!strstr($password, $char)) { $password .= $char; $i++; } }

Gefunden bei Jon Haworth - PHP: Generate random password

Updates der Woche

Nach einer sehr stressigen Woche (= nicht umsonst keine Blogbeiträge gegeben) hier einige Updates, was die Woche gebracht hat – es gibt einiges zu Lesen, viel Spaß.