Spletna stran uporablja piškotke za boljšo uporabniško izkušnjo in spremljanje statistike obiskov (Google Analytics).
Z nadaljno uporabo spletne strani ali klikom na "Strinjam se", se strinjate z uporabo piškotkov.
Piškotki in njihova uporaba

PHP in MySQL

Iz gole radovednosti, kako deluje PHP in kako se obnaša MySQL, sem se lotil predelave moje spletne strani iz CFML/MsSQL v PHP/MySQL. Naletel sem na nekaj zanimivih težav, ki pa sem jih uspešno obšel.

Dobra dva tedna nazaj sem začel razmišljati, kako bi svojo spletno stran predelal v PHP kodo. Pa ne, da bi bilo z ColdFusion kaj narobe (no, mogoče je to, da je plačljiv), temveč me je gnala gola radovednost, kako izgleda programiranje spletnih rešitev v PHP.

Poleg tega je bil dodatni moment tudi to, da je PHP že vgrajen v OS X in zanj ni potrebno plačevat nobene licence. In da ne bi bil polovičen, sem se odločil, da tudi bazo zamenjam iz MS SQL Express 2005 v MySQL v5.1.

Kot že rečeno, na OS X je PHP že naložen, aktiviramo ga zgolj z odkomentiranjem vrstice v /private/etc/apache2/httpd.conf konfiguracijski datoteki Apache web serverja:

LoadModule php5_module libexec/apache2/libphp5.so

Še največ težav je bilo sPHPjem na Windowsih. Na Win2k3 serverju sem imel težave, če je bil PHP poinstaliran v Program Files. Na enih mašinah je delalo, na enih ni. Tako, da sem na koncu pristal z instalacijo PHPja na rootu C: diska. Čudno.

V konfiguraciji PHP.INI sem spremenil naslednje:

output_buffering = On # oz. 8192, odvisno od mašine
default_charset = "utf-8"
date.timezone = CET

No, seveda je med razvojno in produkcijsko mašino še nekaj razlik, ki pa niso bistvene.

Če sem hotel na Macu uporabljat bazo, sem imel dve možnosti: Oracle Express ali pa MySQL. Seveda izbira ni bila težka. :) Že pred časom sem se poigraval z MySQLom, ki pa takrat ni imel uporabnih grafičnih orodij za ad-hoc opravila. V verziji 5.1 je to čisto drugače! Poleg tega obstaja na Windows okolju tudi t.i. Migration utility, ki prenese podatke iz (skoraj) katerekoli druge podatkovne baze v MySQL. In dela skoraj popolno. ;) Težave sem imel samo pri pretvarjanju tabel, ki vsebujejo DEFAULT vrednost. Ne vem zakaj, ampak v nekaterih primerih se orodje odloči in uporabi naslednjo sintakso:

imepolja INT NULL DEFAULT (0)

za katero pa se izkaže, da ne deluje. Pravilno je naslednje:

imepolja INT NULL DEFAULT 0

Ko je bilo to poštimano in sem prenesel podatke iz MsSQL Express 2005 serverja v MySQL, sem naletel na prvi resni problem.

Ko sem izpisoval tekstualne podatke, ki so vsebovali šumnike (ščž...), se Š in š nikakor nista hotela izpisovat. Namesto njiju je bil ? (vprašaj).

Malo Googlanja mi je dalo naslednjo rešitev:

SET NAMES 'utf8' COLLATE 'utf8_slovenian_ci';

To je prvi ukaz, ki ga iz PHPja pošljemo MySQLu, da pravilno interpretira UTF-8 kodirane znake v bazi. Čudno, ker vsa MySQL orodja niso kazala težav. Očitno je to povezano zgolj s PHP in MySQL.

Ko sem obšel te prve težave, je sledilo prekodiranje CFML v PHP. Zamudno in dolgočasno.

Lahko rečem, da večjih težav nisem imel. Še največ mi je sivih las naredila ReReplace iz CFMLja, ki v stringu zamenja substring z uporabo regular expression. Sintaksa, ki jo uporablja CFML je namreč drugačna od PHPjeve. Pa še v PHPju so se odločili, da starejšo opustijo in uporabljajo zgolj Perl kompatibilno v prihodnjih verzijah PHPja.

Za dostop do baze podatkov sem našel super knjižnico EZSQL Justina Vincenta, ki poenostavi dostop do baze do maksimuma. Za konekcijo uporabim zgolj:

require_once('inc/ezsql_core.php');
require_once('inc/ezsql_mysql.php');
$db = new ezSQL_mysql('user','pass','DB','host');

in nato za branje podatkov:

$recordset = $db->get_results('SQL query');

Za zdaj lahko rečem, da sem prezentacijski del aplikacije uspešno prekodiral v PHP ostane mi še servisni/administrativni del. Tam pa je kode krepko več in me čaka še precej neprespanih noči.

UPDATE: Kogar zanima lahko pogleda novonastalo stran na /~blaz na serverju. Deluje na PHP in MySQL, medtem, ko trenutna stran še vedno teče na CFML/MsSQL.