Old but not bus­ted … – Die­ser Inhalt wur­de vor mehr als 12 Jah­ren publi­ziert. Die Kor­rekt­heit und Ver­füg­bar­keit von Links kön­nen lei­der nicht gewähr­leis­tet werden.

An die­ser Stel­le soll es heu­te mal kurz um ein Pro­blem­chen und des­sen ‘Lösung’ gehen, wel­ches mich ges­tern (fast) den gan­zen Tag beschäf­tigt hat.

Ich hat­te die Auf­ga­be zu lösen, mit­tels eines HTML-For­mu­lars und PHP ein Bild (als BLOB) in einer MyS­QL-Daten­bank abzu­le­gen. – Eigent­lich ja nicht all­zu schwie­rig, denn Anlei­tun­gen & Code-Schnip­sel dazu gibts im Netz wie “Sand am Meer”…

Am Ende ent­schied ich mich für die Vari­an­te, die hoch­ge­la­de­ne Datei ohne file hand­ler (fopen, fread, fclo­se) in die DB zu hexen. Denn man kann recht ein­fach mit­tels mit­tels der glo­ba­len PHP-Varia­ble “$_FILES” auf die (mit­tels POST) hoch­ge­la­de­ne Datei zugrei­fen.

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 Mel­dung bekam, dass ich einen Feh­ler in der SQL-Syn­tax 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 beschrie­ben) benutzt habe, habe ich letzt­lich die Funk­ti­on bin2hex() für das Spei­chern der binä­ren Daten (des Bil­des) in der MEDI­UM­B­LOB-Spal­te der DB verwendet. 

Nach ein paar Test-Uploads stell­te ich dann jedoch fest, dass grö­ße­re Bil­der nicht hoch­ge­la­den wer­den kön­nen – wg. der Begren­zung auf dem Ser­ver. Also habe ich etwas gesucht und die dafür zustän­di­gen PHP-Ein­stel­lun­gen bzw. ‑Varia­blen gefun­den. Die­se spuck­ten mir aller­dings aus, dass mei­ne max. Upload-Grö­ße 32MB beträgt, was bei einem Upload von einem ca. 1,5MB gro­ßen Bild jedoch nicht ’stimm­te’. Denn da kam dann dann die MyS­QL-Mel­dung “Got a packet big­ger than ‘max_allowed_packet’ bytes” und der Daten­satz wur­de nicht in die DB geschrieben.

‘Gut, dass die MyS­QL-Mel­dung so aus­sa­ge­kräf­tig ist’, dach­te ich mir und such­te erneut nach einer Lösung… – Und sie­he da, auch dazu gibt es Lösun­gen, wie bspw. die­se. Ärger­lich war nur, dass ich den gan­zen Tag der Mei­nung war, dass der MyS­QL-Para­me­ter “max_allowed_packet” dyna­misch zur Lauf­zeit des Ser­vers per PHP beein­fluss­bar ist. *gml*
Dies kam zum Bei­spiel auch daher, dass das Aus­le­sen des Para­me­ters (mit mysql_query("SHOW VARIABLES LIKE 'max_allowed_packet'")) und das Neu­set­zen des Wer­tes (mit­tels mysql_query("SET max_allowed_packet=16777216;")) zwar anstands­los funk­tio­nier­te, aber lei­der den Upload nicht ver­bes­ser­te. Trotz des neu gesetz­ten Wer­tes (auf 16MB), war die Upload­gren­ze in Wirk­lich­keit immer noch beim Stan­dard­wert 1MB.

Lan­ge Rede, kur­ze Erkenntnis:
Das Ändern des MyS­QL-Wer­tes “max_allowed_packet” zur Lauf­zeit per PHP funk­tio­niert (i.d.R.) nicht. (Man kann, wenn man MyS­QL-Root-Rech­te mit sei­nem Log­in hat, ver­su­chen, den glo­ba­len MyS­QL-Para­me­ter zu ver­än­dern.)
Man muss/sollte/kann die Ein­stel­lung ser­ver­sei­tig vor­neh­men und ent­we­der dau­er­haft den Ein­trag max_allowed_packet=16MB; in der my.cnf machen oder mit MyS­QL-Root-Rech­ten den Wert mit­tels SET max_allowed_packet=16777216; zur Lauf­zeit ändern (dann ist die­ser bei einem Neu­start aller­dings wie­der weg).

Außer­dem ist anzu­mer­ken, dass die BLOBs in der DB irgend­wie (ca.) dop­pelt so groß sind/werden, wie die Ori­gi­nal-Datei­en. – Aus einem Bild mit 991K wird bspw. (bei mir) ein BLOB mit 2.03MB. *strange&doof* (Bit­te jetzt kein Bas­hing, ob es über­haupt sinn­voll ist, Bil­der direkt in der DB zu spei­chern. – Es muss die­ses Mal so sein!)

Old but not bus­ted … – Die­ser Inhalt wur­de vor mehr als 13 Jah­ren publi­ziert. Die Kor­rekt­heit und Ver­füg­bar­keit von Links kön­nen lei­der nicht gewähr­leis­tet werden.

Schon seit einer Wei­le habe ich unter Ubun­tu auf mei­nem EeePC das “proposed”-Repository instal­liert. Doch gera­de nach mei­nem Upgrade zu Onei­ric habe ich eini­ge merk­wür­di­ge Erschei­nungen, als deren Ursa­che ich eben die­ses Repo in Ver­dacht habe. (Außer­dem ist das “proposed”-Repo für ein Pro­duk­tiv­sys­tem – auf dem also im All­tag alles funk­tio­nie­ren soll – wohl eh nicht gut)

Nun woll­te ich ein­fach das “proposed”-Repo deak­ti­vie­ren und mein Sys­tem sozu­sa­gen (wie­der auf den Stan­dard) “deak­tua­li­sie­ren”. Aber irgend­wie funk­tio­niert das nicht so einfach…

Nach eini­gem Suchen habe ich dann einen funk­tio­nie­ren­den Weg bei “Ask Ubun­tu” gefun­den, den ich hier mal (auch für mich zum Mer­ken) ver­lin­ke: “How can I revert back from an upgrade to the Pro­po­sed repo­si­to­ry?”.

Noch ein klei­ner Hin­weis zu obi­gem Vor­ge­hen: Bevor ihr die bei­den Skrip­te durch­lau­fen lasst, deak­ti­viert das “proposed”-Repo nicht. Erst nach­dem ihr euer Sys­tem deak­tua­li­siert habt, könnt ihr bspw. über die Soft­ware-Paket­quel­len-Ver­wal­tung auf dem Rei­ter “Aktua­li­sie­run­gen” den Haken beim Repo weg machen.

Viel Glück! 🙂

Old but not bus­ted … – Die­ser Inhalt wur­de vor mehr als 13 Jah­ren publi­ziert. Die Kor­rekt­heit und Ver­füg­bar­keit von Links kön­nen lei­der nicht gewähr­leis­tet werden.

Ich habe sie schon ein paar Tage an mei­ner Wand hän­gen und woll­te sie seit dem schon immer mal hier posten…

Die Regeln basie­ren auf dem Buch “Debug­ging” von David J. Agans. Wer noch ein paar Details zu den ein­zel­nen Regeln lesen möch­te, der kann hier mal schauen.

Doch nun (end­lich) die (Lebens)Weisheit:

  1. Under­stand the system
  2. Make it fail
  3. Quit thin­king and look
  4. Divi­de and conquer
  5. Chan­ge one thing at a time
  6. Keep an audit trail
  7. Check the plug
  8. Get a fresh view
  9. If you did­n’t fix it, it ain’t fixed

Old but not bus­ted … – Die­ser Inhalt wur­de vor mehr als 13 Jah­ren publi­ziert. Die Kor­rekt­heit und Ver­füg­bar­keit von Links kön­nen lei­der nicht gewähr­leis­tet werden.

Nach­dem ich mich ja neu­lich schon in Sachen XMPP von der Knecht­schaft eines Pro­vi­ders befreit habe, so habe ich heu­te noch einen Schritt in Rich­tung Unab­hän­gig­keit – bzgl. mei­ner Daten bei frem­den & nicht kon­trol­lier­ba­ren Pro­vi­dern – gewagt.

Heu­te habe ich – nach­dem ich erst im Febru­ar (IMO) von Deli­cious auf­grund der Ein­stel­lungs­plä­ne-/ge­rüch­te sei­tens Yahoo bzgl. ihres Book­mark­diens­tes – auch mei­nen Diigo-Account wie­der gelöscht. Aller­dings habe ich nicht ein­fach alle mei­ne Book­marks gelöscht, son­dern ordent­lich expor­tiert und dann in mei­ne neue Seman­ti­cS­cuttle-Instal­la­ti­on unter bm.sokai.name bm.sok.ai importiert.

So auf die Schnel­le kann ich echt nur sagen, dass ich erst­mal recht zufrie­den bin. Es hat zwar ein Weil­chen gedau­ert, bis die Instal­la­ti­on über­haupt funk­tio­niert hat und ich emp­fin­de es eher als unbe­frie­di­gend, dass unter Fast­C­GI die clean urls nicht funk­tio­nie­ren und auch die Instal­la­ti­on auf einem SSL-vhost nicht will, aber der Rest sieht doch schon mal recht nett und funk­tio­nal aus.

Hier noch ein paar Hin­wei­se und Vorschläge:
1. Expor­tiert bei Diigo in das Deli­cious-For­mat! – Bei allen ande­ren expor­tier­ten Datei­en sind die Erstel­lungs­da­ten der Book­marks nicht drin und auch die Tags fehl­ten teilweise…
2. Die fol­gen­den zusätz­li­chen Ein­stel­lun­gen für die Seman­ti­cS­cuttle-Instal­la­ti­on – wel­che ihr in eure data/config.php über­neh­men müsst, um die Ein­stel­lun­gen aus der data/config.default.php zu über­schrei­ben – schei­nen mir recht brauch­bar zu sein:


$menu2Tags = array();
$enableRegistration = false;
$useredir = true;
$url_redir = 'http://anonym.to/?';
$enableVoting = false;

In die­sem Sin­ne: Viel Spaß & n8i! 🙂

Old but not bus­ted … – Die­ser Inhalt wur­de vor mehr als 13 Jah­ren publi­ziert. Die Kor­rekt­heit und Ver­füg­bar­keit von Links kön­nen lei­der nicht gewähr­leis­tet werden.

Die letz­ten Tage habe ich mich – pro­kras­tinistato­risch inspi­riert – (mal) wie­der ein paar tech­ni­schen Spielerei­en hin­ge­ge­ben, über die ich mal schnell berich­ten möchte…

  1. neu­es Word­Press-The­me: Light­Word – Irgend­wie siehts nett aus und lässt (nach ein paar klei­nen Anpas­sun­gen des Plug­ins) auch den Lifestream ver­nünf­tig aussehen.
  2. neu­er RSS-Rea­der: rssLounge – Schon vor ner Wei­le hat­te ich mich für mei­nen Web-Feed-Rea­der unter rss.sokai.name nach einer Alter­na­ti­ve zum (lei­der!) nicht mehr wei­ter­ent­wi­ckel­ten Gre­ga­ri­us umge­schaut und auch rssLounge gefun­den. Damals stör­te mich, dass es ent­we­der nur mit Pass­wort oder kom­plett ohne (also auch die Ver­än­de­rung der Ein­stel­lun­gen) funk­tio­nier­te. Nach der heu­ti­gen Instal­la­ti­on von Ver­si­on 1.7 ist dies nicht mehr so. *supi* Ein paar ‘Klei­nig­kei­ten’ (bspw. pri­va­te Feeds, die nur mit Log­in sicht­bar sind, Feeds und ver­bes­ser­te Son­der­zei­chen­un­ter­stüt­zung) feh­len noch, aber da hab ich Hoff­nung. Aller­dings wer­de ich rssLounge erst­ein­mal nur zusätz­lich benut­zen, zum Aus­t­tes­ten halt…
  3. neu­es WP-Plug­in für deut­sche Umlau­te in den Slugs: wp-cle­an­um­lauts2 – Ich hat­te zwar das (seit WP 3.1 auch nicht mehr funk­tio­nie­ren­de) “Ger­man Permalinks”-Plugin instal­liert, aber nun is ja wie­der alles gut… *thx2cas­hy*
  4. neu­er Jab­ber-Account: me[at]sokai[dot]name (wie mei­ne E‑Mailadresse) – Sowas woll­te ich schon immer haben und der bast­la hats nun auf unse­rem Kom­mu­ne-Ser­ver­chen mal umge­setzt… *jubel&thx*
  5. kein Ohloh mehr im Roas­ter – Sehr scha­de, dass ohloh.net den Jab­ber-/XMPP-Sup­port an den Nagel gehängt hat, wie hier (offi­zi­ell) und hier (im Forum) zu lesen ist. .oO(Und ich hab mich schon gewun­dert, wes­halb der Bud­dy schon seit Mona­ten immer off is…)
  6. neu­es Git-Repo: Word­Press-Plug­in ID-Per­ma­lin­ker – Bas­tel­ver­si­on, um im Backend schnell auf eige­ne (alte) Bei­trä­ge dau­er­haft (denn es wird die post-id mit­tels Smart­code ver­linkt und nicht der Slug) ver­lin­ken zu können.
  7. neu­er Shell-Ein­zei­ler:
    $ find . -iname "*.txt" -exec sed -i "s/SUCHSTRING/ERSETZUNG/g" {} \;

    Die­ser fin­det alle Datei­en mit der Endung txt und ersetzt in die­sen den SUCHSTRING mit dem ERSETZUNG. Dabei wird mit dem sed-Schal­ter -i eine Siche­rungs­ko­pie vor dem Erset­zen gemacht, die bei Erfolg wie­der gelöscht wird. *sokann­nix­schief­ge­hen*

So viel also von der Bas­tel­front… .oO(Wozu man nicht so alles kommt, wenn die Frau mal aus dem Haus ist… ; ))

sofar|sokai