Als Webentwickler kennt denke ich jeder die Situation: Ein neues Projekt steht an, und irgendwann im laufe der Arbeiten kommt man an die Stelle, an der man Hand an die MySQL-Datenbank legen muss.
Da viele Shared-Hosting Pakete einen externen Zugriff auf die Datenbank aus Sicherheitsgründen nicht zulassen, und somit die Desktop-Datenbankclients (bis auf Proxyfile-Lösungen) ausfallen, kommt in den meisten Fällen PHPMyAdmin zur Datenbankverwaltung als Webapplikation zum Einsatz.
Gut ist es natürlich wenn die Applikation direkt im Adminbereich des Hosting-Providers integriert ist, falls nicht, so muss das dicke Paket erst einmal entpackt, hunderte von Dateien hochgeladen, und am Ende noch konfiguriert werden.
Wer schnell und einfach auf seine Datenbanken zugreifen will, ein etwas übersichtlicheres und schnelleres Interface bevorzugt und zudem keine Installationsorgie abhalten möchte, der kann auch zu Adminer greifen.
Adminer ist ebenfalls eine mächtige Datenbankverwaltung, hat allerdings den Vorteil das sie ohne Konfiguration auskommt und zudem nur aus einer einzigen PHP-Datei besteht. Somit entfällt die lästige und zeitraubende Installation einer horrenden Ordner und Dateistruktur, um am Ende evtl. nur ein einfaches Backup einer Tabelle durchzuführen.
Zum Start einfach die 160Kb große PHP-Datei in ein sicheres Verzeichnis auf dem Server laden, im Browser aufrufen und schon erscheint eine Maske zur Eingabe der Mysql-Zugangsdaten.
Das Interface ist Multilingual, arbeitet sowohl mit PHP 4.3+ und PHP 5.1 zusammen und kommt mit MySQL 4.1, 5.0 und 5.1 zurecht.
Eine komplette Feature-Liste findet sich auf der Startseite des Projekts.
Wordpress ist ja nun mit Abstand das beliebteste (warum auch immer) Blogsystem am Markt. Vermutlich greifen bald 90% der Neublogger direkt zu Wordpress. Immerhin gibts da ja die meisten Plugins, Widgets und natürlich auch die meisten Themes.
Also wird Wordpress schnell auf dem kleinem 2€ Webspace installiert auf dem auch schon die 10 anderen Webseiten liegen, dazu dann noch ein Theme installiert, 30 Plugins hinzugefügt und fertig ist das eigene Blog.
Für 95% der Blogger ist dieser Ablauf wahrscheinlich vollkommen Ok. Man schreibt nun 5, 10 oder vielleicht auch 20 Artikel, verliert dann die Lust am schreiben und verfasst vielleicht nochmal alle paar Wochen einen Artikel über das Leben seiner Wasserschildkröte um seinen Blog nicht als gänzlich gestorben anzusehen, denn für irgendwas muss die ganze “Arbeit” ja gut gewesen sein.
Für viele eventuell noch unbekannt, aber es gibt sie: Die Google Wetter-API.
Komischerweise scheint diese XML-Schnittstelle keine öffentliche API von Google zu sein, sondern eher sowas wie ein Nebenprodukt für die Personalisierte Startseite von Google.
Wie kann man diese API nun Ansprechen und wie genau funktioniert das?
Eigentlich sehr simpel: Es braucht im Prinzip nichts ausser einer URL, z.B. wie folgt: http://www.google.com/ig/api?weather=Magdeburg
Wie man sieht kann man in der URL den Namen einer Stadt hinterlegen. Leerzeichen im Stadtnamen können durch ein + ersetzt werden, also z.B. New+York. Alternativ kann man auch die Postleitzahl angeben, das kann dann so aussehen: 39120+Germany. Und was erhält man da nun?
Ganz simpel: Eine XML-Datei mit vielen Infos zum Wetter. Unter anderem aktuelle Temperaturen, Windgeschwindigkeiten, Luftfeuchtigkeit, Regenwahrscheinlichkeit, Bewölkung, etc. pp.
Zudem gibt es eine Vorhersage für die nächsten 3 Tage. Da das ganze als XML daher kommt können wir es natürlich auch vielseitig einsetzen und ausgeben. Egal ob nun als HTML, Grafik oder Flash.
Ich weiß noch, so Anfang diesen Jahrtausends, 2000/2001 ca. da wusste ich noch nicht sonderlich viel von PHP und selbst damals war PHP ja auch keine Selbstverständlichkeit auf dem heimischen Webspace.
Nun bietet PHP da eine praktische Funktion von der wir wohl auch immernoch oft gebrauch machen. include() kann externe Dateien nach belieben an der verankerten Stelle in die Datei einfügen und ausführen.
Das war damals schon praktisch wenn man z.B. einheitliche Kopf und Fußbereiche einer simplen Seite einbinden wollte um diese bei einer möglichen Änderung nicht für jede angelegte Seite erneut ändern zu müssen.
Jedenfalls gab es damals eine tolle Alternative zu include, und die nannte sich kurz SSI, Server Side Includes. Damit war es möglich (sofern im Apache das Modul mod_ssi aktiviert war, war es allerdings fast immer) solche statischen Bereiche einer Seite einheitlich in externe Dateien zu verschieben.
Das sah dann z.B. so aus:
<!--#include file="header.shtml" -->
Das war damals jedoch auch irgendwie alles wofür wir SSI benutzt haben. Heute arbeitet ich mal wieder auf dem Webspace eines Kunden der noch einen steinzeitlichen Vertrag bei 1&1 hat den ich aus unerfindlichen Gründen niemals auf ein PHP-fähiges-Level upgraden konnte.
Da kamen mir spontan wieder die Server Side Includes in den Sinn. Immerhin besser als alles 10x zu schreiben. Als ich den dazu passenden Wikipedia-Artikel aufrief sah ich aber, das SSI noch mehr bietet als das simple einbinden weiterer HTML-Schnipsel. Ja! In SSI gibt es sogar Variablen, Systemvariablen und if/else Abschnitte, selbst reguläre Ausdrücke werden verstanden. Wer mehr wissen möchte sollte sich mal die weiterführenden Links auf Wikipedia ansehen.
Nicht das wir jetzt aufhören sollten unsere CMSe zu nutzen oder so, ich wollte nur mal meine Verwunderung ausdrücken. Was hätte mir das doch nur damals bei meinen Frickelprojekten für arbeit erspart, wenn man z.B. den <title> mit einer Variable betanken hätte können.
War jedenfalls mal wieder schön eine kleine Exkursion in alten Codegefilde zu machen, allerdings ist man doch auch irgendwann wieder froh im jetzt und heute zu sein.
Ach nun habe ich schon mehrere male mich daran versucht einen ordentlichen Jahresrückblick für mein 2007 zu verfassen, leider bisher ohne Erfolg. Da kommt man vom hundertsten ins tausende und schweift einfach automatisch zu sehr ab. Eine simple Auflistung der Themen des Jahres wäre auch zu Stumpf, denn dafür gibt ja seit einigen Monaten das Archiv.
Also will ich mich nochmal daran versuchen das Jahr 2007 kurz und knapp Revue passieren zu lassen. Mal sehen obs diesmal was wird :)
Patrick meinte gerade ob ich mir schonmal Gedanken darüber gemacht hätte, das man mit Firebug im Prinzip ja auch jedes Formularfeld einer Seite beliebig manipulieren könnte. Ja, darüber hatte ich auch schon des öfteren Nachgedacht.
Die Frage ist nur, was kann man dagegen tun? Ich stelle mir gerade ein Praxisbeispiel vor: Ihr habt eine ein <select> dessen <option>-Werte aus einer Datenbank generiert werden. Relativ üblich oder? Wenn nun ein Bösewicht daher kommt und dem <select> z.B. via Firebug eine <option> unterjubelt die es so in der Datenbank nicht gibt, was macht in dem Fall das PHP-Script? Wird der Wert im Nachheinein nicht nochmal überprüft würde ich davon ausgehen das evtl. ein neuer Datenbank-Eintrag erzeugt wird der auf ein Feld verweist das es gar nicht gibt oder das nicht genutzt werden dürfte.
Ich bin mir sicher das ein Großteil der Programmierer gegen solche externen Eingriffe gar keine Mechanismen einbauen, also Validierungen die prüfen ob der eingegebene Wert evtl. manipuliert wurde. Bei einer kleinen Applikation mag das noch mit relativ wenig Aufwand möglich sein, indem man einfach überprüft ob der übermittelte Wert den überhaupt zu den Werten in der Datenbank passt, doch bei komplexeren Gebilden kann das doch sehr schnell in viel Arbeit ausufern oder was meint ihr?
Habt ihr euch darüber evtl. auch schon Gedanken gemacht bzw. Lösungen gefunden? Ich meine es gibt ja auch nützliche Manipulationen die durch DOMScripting erzeugt werden, doch wie unterscheiden?
Wir wissen gerade nicht wirklich woran es liegt, aber Patrick hatte gestern unseren VPS auf PHP 5.2.4 aktualisiert, seit dem kam es bei allen fast allen Seiten zu Problemen die wir aber irgendwie nicht genau lokalisieren konnten.
Wie ihr vielleicht mitbekommen habt wurde den ganzen Vormittag der Blog ohne CSS ausgegeben und auch die URLs mittels mod_rewrite liefen nicht mehr, und das obwohl Patrick den Apache gar nicht angefasst hatte. Auch einige CakePHP-Projekte die sich gerade in der Entwicklung befanden hatten keine Probleme, andere die jedoch gerade Produktiv arbeiten schon. Der Output war auch extrem seltsam. Mal erschien unter hackthenet.de das Textpattern-Fenster, mal wieder der Blog und umgekehrt, also seeeehr merkwürdig.
Wir haben nun hin und her überlegt wo der Fehler liegen könnte und haben dann Probehalber mal APC deaktiviert, und siehe da: Alle Seiten liefen wieder, und auch die mod_rewrite-Seiten kamen zurück.
Wir wissen gerade immer noch nicht woran es jetzt liegt, denn APC ist ebenfalls auf dem neusten Stand. Und warum laufen einige Seiten und andere nicht? Eine CakePHP 1.1 Version lief ohne Fehler, eine andere wieder nicht… sehr merkwürdig das ganze.
Solange wir den wirklichen Ursprung des Fehler nicht ausfindig machen können muss wohl erstmal APC deaktiviert bleiben. Da der Server aber derzeit nicht wirklich unter Last steht ist das kein großes Problem.
Mal sehen ob wir da nicht auch einfach auf einen bisher unbekannten Bug gestoßen sind.
Update:
Es scheint so als Wenn APC in der aktuellsten Version einige Fehler im Umgang mit mod_rewrite-URLs aufweist. Der Fehler scheint auch schon bekannt zu sein, wurde bisher aber anscheinend noch nicht gefixt. Seltsam ist, das der Fehler anscheinend nur in Verbindung mit PHP 5.2.4 auftritt, ein Downgrade auf PHP 5.2.3 “löste” unser Problem erstmal.
In einem früheren Technikwürze-Podcast der sich mit Content-Management-Systemen befasste hatte Sascha Postner ein für mich damals vollkommen unbekanntes CMS namens Sefrengo kurz vorgestellt.
Nun bin ich seit einiger Zeit bereits am Suchen nach dem CMS für kleinere Projekte. Bisher wurde ich bei meiner Suche in diesem Punkt meist enttäuscht. Entweder die Performance war einfach unter aller Sau (z.B. Typo3), oder ich kam mit der Funktionalität einfach nicht klar (z.B. Modx):
Bisher realisierte ich daher viele Seiten mit Textpattern, auch wenn diese gar keinen Blogstyle hatten. Das ging zwar, und die Resonanz der Kunden bezüglich der Seiten, des Systems und Textile war ebenfalls sehr positiv, doch für mich war es irgendwie immer Versklavung, denn Textpattern ist nun mal ein Weblogsystem und nicht unbedingt ein handelsübliches CMS.
Doch nun bin ich endlich bei Sefrengo gelandet, und was soll ich sagen, der erste Eindruck ist durchaus positiv. Die Struktur ist schnell begriffen, die Community immer hilfsbereit und sogar mal überwiegend in deutscher Sprache. Es gibt sogar schon halbwegs viele zusätzliche Erweiterungen (Module, Plugins) und absolut genial ist zudem das in einem Backend gleich mehrere Projekte bequem verwaltet werden können, sofern diese über einen Webspace laufen. Auch an die SEO-Freunde wurde mit gutem URL-Building und leicht definierbaren Meta-Tags gedacht. Der Output ist zudem weitestgehend anpassbar und bereits im Standard komplett XHTML-Konform.
Ich werde mich jedenfalls noch weiter mit diesem schmucken CMS beschäftigen und vielleicht auch ein wenig der Community unter die Arme greifen, denn ein paar Feinheiten müssen wohl noch behoben werden, z.B. das eingegebene Texte in der Textarea ordentlich in <p>Text</p> geschachtelt werden und nicht bei Absätzen hässliche <br /><br />s entstehen (hier sollte die nl2br-Funktion von PHP übrigens endlich mal automatisch dazu lernen).
Ansonsten bin ich mit meiner Wahl erstmal vollends zufrieden und werde wohl auch ab und an von meinen Fortschritten berichten.
Ein paar Wochen liegt der erste Technikwürze-Podcast zum Thema CakePHP nun schon zurück. Wie einige von euch im Podcast eventuell schon gehört haben, haben David und ich uns damals fest vorgenommen noch mindestens eine zweite Folge zum Thema zu produzieren.
Nun fing ich gerade mit dem Script zur Sendung an, dachte mir dann jedoch das es doch eigentlich Blödsinn wäre Themen vorzugeben die am Ende vielleicht gar keinen Interessieren.
Darum meine Frage:
Welche Themen rund um das PHP-Framework CakePHP brennen euch auf der Seele? Womit habt ihr Probleme? Was ist euch noch nicht verständlich oder wollt Ihr einfach ein praktisches Beispiel zu einem bestimmten Thema?
Generell soll die zweite Sendung schon etwas mehr ins Detail gehen und bestimmte Beispiele bzw. Themen aufgreifen. Die erste Sendung war ja eher dazu gedacht, den Hörern einen ersten Eindruck über das Framework zu vermitteln.
Also: Ich würde euch bitten eure Ideen und Fragen einfach als Kommentar an den Artikel anzuhängen. Keine Angst… es gibt keine dummen Fragen, nur dumme Antworten :)
Wie der Cakebaker berichtet hat die Mambo Foundation nun bekannt gegeben, dass die nächste Version der CMS-Software auf CakePHP aufbauen wird.
Mambo ist übrigens der Vorgänger des heutigen Joomla-CMS, was denke ich mittlerweile sehr vielen ein Begriff sein düfte. Mambo legte damals den Grundstein für die Entwicklung des CMS, leider trennten sich jedoch vor ca. 2 Jahren dann die Entwickler und Joomla wurde geboren.
Ich persönlich finde die Entscheidung ein Framework für die nächste Version zu verwenden sehr gut, denn umso leichter dürfte es Cake-Entwicklern später fallen eigene Funktionen und Anpassungen in Mambo zu implementieren.
Aus meiner Sicht sollten diesen Schritt noch viel mehr Projekte gehen. Bisher kocht ja jedes Projekt da mehr oder weniger sein eigenes Süppchen, für Außenstehende ist der Quelltext daher oft mehr als verwirrend. Gerade der MVC-Pattern könnte hier für mehr Ordnung und Struktur sorgen.
Ich für meinen Teil bin gespannt wie sich das Projekt weiter entwickelt.
Tja, Totgeglaubte leben bekanntlich länger…
In CakePHP stand ich bisher oft vor einem Problem wenn ich auf allen Seiten meiner Anwendung Daten aus einem bestimmten Controller brauchte.
Ein Anwendungsbeispiel: Ihr erstellt eine Eventdatenbank und wollt das in eurem Template z.B. in der Sidebar immer die nächsten 4 Events aus eurer Datenbank ausgegeben werden.
Das ist in sofern nicht ganz soooo easy, da CakePHP eigentlich immer nur das aktuelle Model ansprechen kann Wenn man sich also auf der Seite gerade die Userliste ( /users/ ) anschaut, und auf dieser Seite dann einen Aufruf zum Event-Model starten möchte würde es im Normalfall nicht so einfach funktionieren, da eben gerade nur das User-Model aktiv wäre.
Nun gibt es für dieses “Problem” viiiiele verschiedene Lösungen…
Komischerweise hat/hatte Textpattern bei mir auf manchen Servern die Angewohnheit, unter bestimmten Bedingungen das Adminmenü für die Kommentarfunktionen einfach nicht anzuzeigen. Das war natürlich nervig, da nun alle Einstellungen direkt in der Datenbank vorgenommen werden mussten.
Nun konnte ich bisher nicht rausfinden, wann dieser Fehler eigentlich genau entsteht. Manchmal lief ein Blog problemlos, und nach dem Umzug auf einen anderen Server trat das Problem plötzlich auf, doch auch andersrum hab ich es schon erlebt.
Doch egal, der Fehler scheint behoben, und ich werde den Fix jetzt erstmal in allen TXP-Installationen anwenden müssen.- Kann man nur hoffen, das dieser Fehler in Version 4.0.5 nun endlich behoben wurde…denn eigentlich pfusche ich ungern in Core-Dateien rum.
Update: Da war ich wohl etwas zu voreilig. Ich habe jetzt 3 Blogsysteme mit der Developer-Datei sogar überschrieben, und dennoch… der Fehler bleibt. Also bitte liebes TXP-Team, wenn ihr einen Bugfix raus bringt, dann auch einen der wirklich funktioniert. Mir würde es ja sogar reichen das Kommentarmenü hart einzuschalten, kann doch nicht so schwer sein!
Update 2: Dennis schrieb mir nun das der Bugfix bei ihm wohl einwandfrei funktioniert hätte. Probierts also am besten einfach aus, Erfahrungsberichte sind natürlich jederzeit willkommen.
Update 3: Ich schäme mich, der Bugfix funktioniert wirklich…man darf sich nur nicht dumm anstellen und sollte auch wirklich alles richtig machen, also nicht so wie ich :)
Beim Download der aktuellen CakePHP-Version stolpert man immer wieder über die Versionen CakePHP 1.1xxx (Stable) und CakePHP 1.2xxx (Developement). Nun denkt man ja eigentlich, je höher die Versionsnummer, umso besser.
Nun, das stimmt zum Teil auch, Cake 1.2 bringt eine größere Funktionsvielfalt mit als es Cake 1.1 tut. Das liegt daran, das die Entwickler eben irgendwann einen Schritt weiter gehen wollten, und alle neuen Features in eine neue, eigenständige Version eingebaut haben. Cake 1.1 wird zwar dennoch immer aktualisiert, der Funktionsumfang bleibt jedoch der selbe.
Eins vorweg: Cake 1.1 Applikationen sind mit Cake 1.2 nicht einfach so kompatibel, es spielt also bei der Wahl schon eine Rolle für was man sich bei der Entwicklung entscheidet.
Mein Tipp für Einsteiger: Nutzt für eure erste Applikation auf jeden Fall Cake 1.1, der Grund dafür ist denkbar einfach.
Cake 1.2 hat zwar tolle neue Funktionen, dafür jedoch keine wirkliche Dokumentation, gerade gefunden, eine Cake 1.2 Doku im Beta-Stadium , ist ja auch Alpha. Für Einsteiger wäre es daher ein Graus wen man endlich einen passenden Artikel in der Bakery oder im Manual gefunden hat, und dieser dann (noch) für Cake 1.1 geschrieben wurde.
Man darf auch nicht vergessen das es sich eben noch um eine Alpha-Version handelt. Alpha-Version ist bei mir im Kopf getagged mit “non-productive, buggy, test-only”.
Letztendlich kann einem aber keiner die Entscheidung abnehmen. Wer sich fit genug fühlt, der kann natürlich auch Cake 1.2 in produktiven Umgebungen nutzen, von groben Bugs habe ich zumindest bisher noch nichts gehört.
Nun habe ich in letzter Zeit auch ein wenig in Sachen CakePHP dazu gelernt. Einige meiner Erfahrungen und Kniffe möchte ich an dieser Stelle an euch weiter geben. Gedacht sind sie gerade für Einsteiger in die Thematik, für alte Hasen sind viele der Tipps sicherlich nichts neues.
Sollten euch vielleicht auch noch nützliche Tipps zu diesem Thema einfallen, so sind diese natürlich in den Kommentaren jederzeit willkommen.
Zwei Wochen ist es nun in etwa her, dass Martin Labuschin mich mit David Maciejewski vom Technikwürze-Podcast bekannt machte.
Kurz darauf kam David und mir die Idee eine Sendung zum Thema CakePHP zu machen, welche ich als “Semi-Experte” *hust* begleiten sollte.
Nun waren heute (13.06.2007) die Aufnahmen zur am Montag erscheinenden Sendung und es hat wirklich riesigen Spaß gemacht, nochmals einen großen Dank an David an dieser Stelle. Es war wirklich eine angenehme Atmosphäre und ich freue mich schon auf die nächste Sendung.
Sobald die Aufnahme den Schnitt überlebt hat und dann am 18.06. ins Netz gestellt wird gibt es an dieser Stelle natürlich auch den dazu passenden Link.
So, nun ist die Sendung endlich für die Öffentlichkeit zugänglich. Aber ich möchte keine Beschwerden über mein “Genau Genau” lesen ;)
Nun habe ich mich ja in letzter Zeit neben CakePHP auch mit dem jQuery-Framework beschäftigt, und in diesem Zusammenhang eine kleine “Probeanwendung” gebaut, nämlich eine Login-Seite mit Ajax-Funktionalität. Für den ein oder anderen stellt sich nun sicherlich die Frage, ob solch eine Funktion wirklich sinnvoll ist…doch für mich zählt hier eher die Erklärung als der Sinn des Ganzen :-).
Wie das Ganze später aussehen könnte seht ihr in dieser kurzen Demo (richtiger Login: gast:gast). Das ganze wurde grafisch natürlich ein wenig aufgepeppt. Um die jQuery-Animationen auf dem variablen Hintergrund hinzubekommen musste auf das PNG-Format zurückgegriffen werden, zudem wurde für die IE6-User ein PNG-Behaviour eingesetzt.
Puh, das war ein hartes Stück Arbeit. Für ein aktuelles Projekt, welches ich mit CakePHP umsetze, war es nötig aus einer Mitarbeiterdatenbank alle Geburtstagskinder der nächsten bzw. letzten 5 Tage auszulesen, und dazu auch gleich das Alter und die Tage bis zum Geburtstag zu berechnen.
Mit Hilfe des Tutorials-Forums kam ich auf den richtigen Weg, und habe nun einen MySQL-Query, der sowohl mit Schaltjahren, als auch Jahresübergängen einwandfrei zu funktionieren scheint. Da ich sicherlich nicht der letzte mit diesem Problem bin, wollte ich euch den Query nicht vorenthalten…








