sokai.name Potsdam bloggt (wieder)

PHP und der BLOB

8. November 2011

An dieser Stelle soll es heute mal kurz um ein Problemchen und dessen ‚Lösung‘ gehen, welches mich gestern (fast) den ganzen Tag beschäftigt hat.

Ich hatte die Aufgabe zu lösen, mittels eines HTML-Formulars und PHP ein Bild (als BLOB) in einer MySQL-Datenbank abzulegen. – Eigentlich ja nicht allzu schwierig, denn Anleitungen & Code-Schnipsel dazu gibts im Netz wie „Sand am Meer“…

Am Ende entschied ich mich für die Variante, die hochgeladene Datei ohne file handler (fopen, fread, fclose) in die DB zu hexen. Denn man kann recht einfach mittels mittels der globalen PHP-Variable „$_FILES“ auf die (mittels POST) hochgeladene Datei zugreifen.

if (isset($_FILES[‘bild‘]) && is_uploaded_file($_FILES[‘bild‘][‘tmp_name‘]) && $_FILES[‘bild‘][’size‘] > 0) {
$mimetype = $_FILES[‘bild‘][‘type‘];
$blob = bin2hex(file_get_contents($_FILES[‘bild‘][‘tmp_name‘]));

Da ich beim Insert immer die Meldung bekam, dass ich einen Fehler in der SQL-Syntax habe, wenn ich für den BLOB mysql_real_escape_string(file_get_contents($_FILES['bild']['tmp_name'])) oder addslashes(file_get_contents($_FILES['bild']['tmp_name'])) (wie bspw. hier beschrieben) benutzt habe, habe ich letztlich die Funktion bin2hex() für das Speichern der binären Daten (des Bildes) in der MEDIUMBLOB-Spalte der DB verwendet.

Nach ein paar Test-Uploads stellte ich dann jedoch fest, dass größere Bilder nicht hochgeladen werden können – wg. der Begrenzung auf dem Server. Also habe ich etwas gesucht und die dafür zuständigen PHP-Einstellungen bzw. -Variablen gefunden. Diese spuckten mir allerdings aus, dass meine max. Upload-Größe 32MB beträgt, was bei einem Upload von einem ca. 1,5MB großen Bild jedoch nicht ’stimmte‘. Denn da kam dann dann die MySQL-Meldung „Got a packet bigger than ‚max_allowed_packet‘ bytes“ und der Datensatz wurde nicht in die DB geschrieben.

‚Gut, dass die MySQL-Meldung so aussagekräftig ist‘, dachte ich mir und suchte erneut nach einer Lösung… – Und siehe da, auch dazu gibt es Lösungen, wie bspw. diese. Ärgerlich war nur, dass ich den ganzen Tag der Meinung war, dass der MySQL-Parameter „max_allowed_packet“ dynamisch zur Laufzeit des Servers per PHP beeinflussbar ist. *gml*
Dies kam zum Beispiel auch daher, dass das Auslesen des Parameters (mit mysql_query("SHOW VARIABLES LIKE 'max_allowed_packet'")) und das Neusetzen des Wertes (mittels mysql_query("SET max_allowed_packet=16777216;")) zwar anstandslos funktionierte, aber leider den Upload nicht verbesserte. Trotz des neu gesetzten Wertes (auf 16MB), war die Uploadgrenze in Wirklichkeit immer noch beim Standardwert 1MB.

Lange Rede, kurze Erkenntnis:
Das Ändern des MySQL-Wertes „max_allowed_packet“ zur Laufzeit per PHP funktioniert (i.d.R.) nicht. (Man kann, wenn man MySQL-Root-Rechte mit seinem Login hat, versuchen, den globalen MySQL-Parameter zu verändern.)
Man muss/sollte/kann die Einstellung serverseitig vornehmen und entweder dauerhaft den Eintrag max_allowed_packet=16MB; in der my.cnf machen oder mit MySQL-Root-Rechten den Wert mittels SET max_allowed_packet=16777216; zur Laufzeit ändern (dann ist dieser bei einem Neustart allerdings wieder weg).

Außerdem ist anzumerken, dass die BLOBs in der DB irgendwie (ca.) doppelt so groß sind/werden, wie die Original-Dateien. – Aus einem Bild mit 991K wird bspw. (bei mir) ein BLOB mit 2.03MB. *strange&doof* (Bitte jetzt kein Bashing, ob es überhaupt sinnvoll ist, Bilder direkt in der DB zu speichern. – Es muss dieses Mal so sein!)

Die neun Debugging-Regeln

18. Oktober 2011

Ich habe sie schon ein paar Tage an meiner Wand hängen und wollte sie seit dem schon immer mal hier posten…

Die Regeln basieren auf dem Buch „Debugging“ von David J. Agans. Wer noch ein paar Details zu den einzelnen Regeln lesen möchte, der kann hier mal schauen.

Doch nun (endlich) die (Lebens)Weisheit:

  1. Understand the system
  2. Make it fail
  3. Quit thinking and look
  4. Divide and conquer
  5. Change one thing at a time
  6. Keep an audit trail
  7. Check the plug
  8. Get a fresh view
  9. If you didn’t fix it, it ain’t fixed

ausge-stargate-et

8. Juni 2011

…irgendwie echt komisch (aber nicht im Sinne von lustig!), dass es ab heute (für immer) mit Stargate vorbei sein soll. Gerade ist die letzte Doppelfolge von SG᛫U bei RTLII gelaufen, alle haben sich (in Stasiskapseln) verabschiedet und Eli hat nochmal (als einziger Zurückgelassener) ganz verträumt in die Kamera gelächeld. – Ende.

Ich finde es echt schade, dass damit die erfolgreichste SciFi-Serie (der Welt) nach über 200 Folgen (wg. schlechter[er] Einschaltquoten und somit einem versiegten Geldfluss) ihren Abschluss gefunden hat.

SG᛫U war zwar nicht so der Knaller, aber mittlerweile hatte ich mich sogar dran gewöhnt… *egal*

in sanctuam memoriam

Links: Mastergedanken & das B-Wort

21. Mai 2011

Diese Woche kam (nun endlich mal) eine E-Mail mit Informationen zu dem für mich (nun endlich mal) bei Gelegenheit – also im kommenden Wintersemester – anstehenden Abschluss. Es geht also so langsam ans Eingemachte…! (Lang, lang ists her, das ich aufbrach, um einen Hochschulabschluss zu erlangen. Über sehr viele Umwege und über die Möglichkeiten, zuerst ein Diplom (BA) zu bekommen und dann den Magistergrad zu erlangen, bin ich nun beim Bachelor of Arts angelangt. Naja, Hauptsache ist ja der Zettel überhaupt…!)

Zu diesen ganzen Gedanken, die eher ambivalente Gefühle bei mir hervor rufen & gerufen haben, hat mich diese Woche auch (wieder) das Thema Bildung allgemein und speziell in Deutschland und Potsdam beschäftigt. Und dazu habe ich ein paar (aktuelle) Links und Anmerkungen, die ich euch nicht vorenthalten möchte.

Abschließend möchte ich noch kurz ein paar (verschwurbelte und ganz persönliche) Gedanken zu Thema Master Informationswissenschaften formulieren. Mir bereitet vor allem folgende Rechnung (meiner M.A.-Zugangsmöglichkeit nach der oben erwähnten Auswahlsatzung) Bauchschmerzen, da sie nicht meinem Verständnis einer (sinnvollen) Bolognaumzetzung, dem seit Jahren inflationär postulierten Lippenbekenntnis aller EntscheiderInnen im Bildungsbereich zum Bildungsstandort Deutschland und meiner Vorstellung von Bildung für Alle! entspricht:

  • Ich schließe mein B.A.-Studium mit einer (realistischen) 2,7 ab und erhalte 15 Punkte nach §6 Abs. 3.
  • Meine nicht vorhandene Praxiserfahrung – da ich den M.A. direkt an den B.A. hängen möchte/muss – beschert mir satte 0 Punkte nach §6 Abs. 4.
  • Mit viel Gehirnschmalz erhalte ich die volle Höhe der zu erreichenden 3 Punkte (die aktuell veröffentlichte Auswahlsatzung ist leider nicht auf dem neuesten/aktuellsten Stand und spricht desh. noch von 4 Punkten). nach §6 Abs. 6
  • Summa summarum habe ich dann 18 von 22 notwendigen (nach §6 Abs. 7) Punkten erreicht. *jubel*

Das heißt also, dass ich die mir fehlenden vier Punkte entweder über 24 Monate Praxiserfahrung – auf einem Arbeitsmarkt, auf dem IMHO nur Wenige wissen, was der Abschluss „Information und Dokumentation (B.A.)“ bedeutet, auf dem dieser Abschluss in einem IMHO klaren Konkurrenzverhältnis zum erst im Oktober 2010 ausgelaufenen Diplom steht und auf dem es diesen Abschluss in naher Zukunft gar nicht mehr geben wird – holen oder halt meine Abschlussnote um 0,7 verbessern muss.
Ob ich nach zwei Jahren Praxis noch einmal zurück auf die Schulbank (an der FH Potsdam) möchte, bezweifle ich im Moment noch. Weshalb ich mit einer 2,7 rechne – also, welche Umstände zu diesem Ergebnis geführt haben – wird (außer von mir und meinen KommilitonInnen) von niemandem im FB hinterfragt, geschweige denn versucht zu verändern.

Fazit:
Alles Murks & perspektivisch – ohne ganz an meinen Fähigkeiten zu zweifeln! – gibt es (weiterhin) Zukunftsängste und große -unsicherheit(en)…
.oO(Und dass dies mittlerweile selbst Angehörigen der Bildungselite passiert, ist definitiv kein gutes Zeichen!)