Domājot par to, kā paātrināt programmēšanu PHP, kā arī kodu padarīt pēc iespējas lasāmāku un vieglāk modificējamu biju sācis veidot pats savas klases dažādu uzdevumu veikšanai. Piemēram, mijiedarbībai ar datu bāzi viena klase, lietotāju autorizēšana un ar to saistītajām lietām cita klase utt. Tādā veidā varēju ieekonomēt laiku, ja vairākos Web projektos nepieciešama kāda daļa pamatfunkcionalitātes, kas atkārtojas. Turklāt, ja jāveic kādi labojumi vecajā kodā, man atliek tikai pamainīt attiecīgo klasi un nomainīt klases failu projektos, kuros tas ir iesaistīts. Bet tad es aizdomājos, ka klases kuras es varu uzrakstīt bieži vien ir stipri ierobežotas kādos apstākļos. Tāpēc vai nu tās būtu jāpapildina, kas prasa daudz laika un daudz testēšanas vai arī vajadzētu paskatīties uz kādu ietvaru pusi. Iepriekš biju pretinieks ietvariem, jo lai tos izmantotu, tie no sākuma ir jāapgūst, bet tas prasa laiku. Turklāt kāda cita taisītu ietvaru nevar tik labi pārzināt kā paša rakstītu ietvaru vai klašu kopumu. Bet tad aizdomājos, ka neesmu jau es eksperts programmēšanā un gan jau, ka tie ietvari kas ir uztaisīti ir tādas kvalitātes, kādu man nekad nesasniegt. Tāpēc esmu nolēmis, ka apgūšu vismaz vienu ietvaru. Un izvēle ir kritusi uz Zend ietvaru.

Paskatoties šo pamācību, secināju, ka pamācīties nāksies diezgan daudz. Bet viens ir skaidrs – ja kāda lapa tiks uztaisīta ar Zend ietvara palīdzību, tad kādam citam to kodu modificēt būs krietni ātrāk un vieglāk nekā ielauzties manā kodēšanas stilā (pieņemot, ka viņš būs zinošs par to kā Zend strādā). Turklāt, ja attiecīgā lieta būs apgūta labi, tad jaunu Web projektu taisīšana varētu notikt krietni ātrāk nekā tas man sanāk tagad. Tie ir pirmie iespaidi. Nezinu kā īsti būs. Bet skaidrs ir viens – nākamo projektu taisīšu ar Zend – vienīgi būs jāmeklē jaunu hostingu, jo tagadējais PHP5 nepiedāvā (pagaidām).

Varbūt kādam ir pieredze ar Zend ietvaru un var padalīties ar lielākajiem ieguvumiem, problēmām?

Kādu laiku iepriekš jau rakstīju par problēmām, kuras man bija radušās izmantojot PHP funkcijas date() un strtotime(). Nesen saskāros ar vēl vienu problēmu strtotime() izmantošanā. Pēc savas būtības šī funkcija ir neaizvietojama daudzās situācijās. Varbūt ir aizvietojama, bet tādā gadījumā es labprāt uzzinātu par alternatīvām ar līdzīgu funkcionalitāti. Ko tad šī funkcija dara? Viņa paņem datumu, kas pierakstīts teksta formātā un pārvērš to sekundēs. Savukārt sekundes mēs varam ar date() funkciju pārvērst par mums nepieciešamā formātā esošu datumu.

Parasti, ja funkcijai strtotime() padod datumu kādā formātā, kuru tā nespēj apstrādāt, atbildē būs sekundes, kuras neatbilst konkrētajam datuma. Nu lūk – problēma radās apstāklī, ka visi datumi, kurus Web lapā jāredz lietotājam un kurus viņš ievada nepieciešamajos laukos, ir reprezentēti formātā dd.mm.yyyy. Daudz nedomājot es šādu datumu ar strtotime() pārvērtu uz sekundēm un tālāk ar date() uz yyyy-mm-dd. Viss strādāja ideāli. Taču uzliekot skriptus uz cita servera, korektā strādāšana bija kaut kur pazudusi. Sāku meklēt kur ir kļūda. It kā strtotime() atbalsta gan PHP4, gan PHP5. Piebildīšu, ka uz gala servera stāv PHP4. Iemetot aci php.net uzreiz nekādas īpašās atšķirības nepamanīju. Iespējams ne tā skatījos. Tad uzrakstīju mazu skriptu, kurš ņēma dažādi formatētus datumus un pārtaisīja tos par sekundēm un tad atpakaļ par datumu. Skriptu palaidu gan uz PHP5, gan PHP4. Rezultāti sekojoši:

Ievads | PHP5 | PHP4
2007-09-26 | 2007-09-26 | 2007-09-26
26-09-2007 | 2007-09-26 | 2032-02-28
09-26-2007 | 1970-01-01 | 2016-07-30

2007.09.26 | 1970-01-01 | 1970-01-01
26.09.2007 | 2007-09-26 | 1970-01-01
09.26.2007 | 1970-01-01 | 1970-01-01

Kā redzams – PHP5 dd.mm.yyyy formātu labprāt konvertē tā kā vajag, bet PHP4 nē. Tāpēc mācieties no citu kļūdām un atcerieties, ka maģiskā funkcija strtotime() strādā dažādi uz dažādām PHP versijām.

Jau vakar Betanews bija pieejams PHP 5.2.4, bet tā arī nebija parādījusies oficiāla informācija php.net par šo versiju. Taču šodien uzmetot aci redzu, ka, lai gan ar mazu nokavēšanos, arī php.net ir informācija par jaunāko PHP versiju 5.2.4. Šī versija ir koncentrēta uz kļūdu labošanu un stabilitātes uzlabošanu. Pilns izmaiņu saraksts atrodams šeit. Kā redzams – labojumu ir visai daudz (virs 120) un būtu vēlams atjaunot savu PHP versiju.

Ik pa laikam forumos uzpeld jautājumi par to, kā ar PHP uztaisīt failu augšupielādi (upload). Ja jautājuma uzdevējs netiek nolamāts par to, ka nemāk pats sameklēt atbildi, visbiežāk viņš saņem saiti uz php.net attiecīgo sadaļu. Taču ar to ir par maz, lai varētu uztaisīt drošu failu augšupielādi. Lai attiecīgo lietu uzprogrammētu kvalitatīvi (nevis perfekti, bet kvalitatīvi) vajadzētu saprast kuros soļos kādi draudi pastāv. Līdz šim labākais apraksts kuru esmu atradis par attiecīgo tēmu (vismaz man tā šķiet) ir Scanit, kas ir IT drošības kompānija, sacerētais. Tas ir uz 20lpp garš un tajā ir piemēri tipiskiem failu augšupielādes skriptiem, kā arī pastāstīts kas šajos skriptos nav pareizi. Mūtu jāizlasa ikvienam PHP koderim, kurš šaubās par savām zināšanām šajā jautājumā.

Apraksta oriģināls, kā arī aprakstā izmantotie skripti pieejami šeit. Bet atļāvos aprakstu saglabāt un augšupielādēt tepat.

Izdomāju ka tā, kā GMetrix vēl nepiedāva vizuālos skaitītājus, tad izviedošu tādu pats. Tā arī izdarīju. Tagad lapas kreisajā malā (tur kur citi skaitītāji un logo) ir arī GMetrix skaitītājs. Tam ir divas iedaļas. Pirmā ir Rank, kura norāda uz vietu topā, bet otrā Hosts, kura norāda uz apmeklētājiem tekošājā nedēļā. Dati tiek ņemti reālajā laikā. Kešingus netaisīju, jo mans blogs nav no tiem apmeklētākajiem, tāpēc nekādu slodzi šim skriptam radīt nevajadzētu.

Man jau šķiet, ka interesantākais ir Rank parametrs. Tā varētu būt tāda kā sacensība starp blogeriem. Kuram augstāks Ranks pēc attiecīgās statistikas sistēmas datiem. Bet varbūt tā ir tikai tāda muļķīga iedoma. Katrā ziņā līdz neienāks protesti no GMetrix cilvēkiem tikmēr šito skaitītāju izmantošu. Vienīgi, ja viņiem ienāks prātā doma ļoti bieži mainīt lapas HTML kodu, tad gan skriptu, kurš ģenerē skaitītāju neatjaunošu.

Vizuāli viņš izskatās šādi: GMetrix counter

Labots: Tagad skaitītājs tiek kešots. Lai nebūtu lieka slodze GMetrix serverim – skaitītājs tiek atjaunots reizi pusstundā.