Skip to main content

29 Tekniikkaa

29Tekniikka logo

PHP-kehityspalvelut yrityksille

PHP on kieli, jota monet pitävät vanhentuneena. Se on kielenä yli 25 vuotta vanha, ja sen maine on kärsinyt vuosien varrella huonoista käytännöistä ja huonosti kirjoitetusta koodista. Moni kehittäjä siirtyi pois PHP:stä kun vaihtoehtoja alkoi ilmestyä.
Silti PHP pyörittää edelleen suurinta osaa verkkosivustoista. WordPress, Drupal, Joomla, Magento, Laravel, Symfony. Nämä kaikki ovat PHP:tä. Ja ne ovat kaikki edelleen käytössä, koska ne toimivat.
Moderni PHP ei ole sama asia kuin PHP vuonna 2010. Kieli on kehittynyt merkittävästi. PHP 8 toi mukanaan JIT-kääntämisen, nimetyt argumentit, unionityypit ja lukuisia muita ominaisuuksia, jotka tekevät kielestä nopeamman ja miellyttävämmän käyttää. Kehittäjät, jotka kirjoittivat PHP:tä kymmenen vuotta sitten eivätkä ole sen jälkeen koskeneet siihen, eivät tunnistaisi nykyistä kieltä.
Teemme PHP-kehitystä. Tässä tekstissä kerromme, millaisia projekteja teemme, mitä teknologioita käytämme ja milloin PHP ei ole oikea valinta.

Milloin PHP on oikea valinta

➢ PHP on oikea valinta silloin kun rakennetaan verkkopalveluita, jotka pyörivät palvelimella ja tarjoilevat sisältöä selaimelle. Tämä on se alue, jota varten PHP on suunniteltu, ja tässä se on edelleen erittäin vahva.
➢ PHP on oikea valinta silloin kun halutaan hyödyntää olemassa olevaa ekosysteemiä. WordPress, WooCommerce, Laravel, Symfony. Näillä on valtavat käyttäjäyhteisöt, kattava dokumentaatio ja tuhansia valmiita kirjastoja. Jos jokin asia pitää tehdä, on hyvin todennäköistä että joku on jo tehnyt sen PHP:llä ja julkaissut sen avoimena lähdekoodina.
➢ PHP on oikea valinta silloin kun tiimillä on jo PHP-osaamista. Kielen vaihtaminen on kallista. Jos tiimi osaa PHP:tä ja projekti sopii PHP:lle, ei ole mitään syytä vaihtaa.

Milloin PHP ei ole oikea valinta

PHP ei ole oikea valinta reaaliaikaisiin sovelluksiin, joissa tarvitaan jatkuvaa yhteyttä palvelimen ja selaimen välillä. WebSocketit ja pitkäkestoiset yhteydet ovat mahdollisia PHP:llä, mutta muut kielet hoitavat ne paremmin.

PHP ei ole oikea valinta raskaaseen datankäsittelyyn tai koneoppimiseen. Python ja R ovat näihin parempia työkaluja, ja niillä on kypsemmät kirjastot.

PHP ei ole oikea valinta mobiilisovelluksiin. Vaikka PHP:tä voi käyttää backendinä, mobiilikehitys tapahtuu yleensä muilla kielillä.

PHP ei ole oikea valinta, jos projekti on pieni ja yksinkertainen. Staattinen verkkosivusto ei tarvitse PHP:tä. Se tarvitsee HTML:ää ja CSS:ää.

Mitä teemme

Teemme PHP-kehitystä viidellä eri alueella. Nämä eivät ole toisistaan erillisiä vaan limittyvät usein samassa projektissa.

Laravel-sovellukset

➢ Laravel on PHP:n suosituin ohjelmistokehys. Se tarjoaa valmiit ratkaisut yleisimpiin ongelmiin: tietokantakyselyt, autentikoinnin, reitityksen, jonot, välimuistin ja niin edelleen. Sen sijaan, että jokainen projekti keksisi pyörän uudelleen, Laravel tarjoaa yhteisen pohjan, jonka päälle rakennetaan.
➢ Olemme rakentaneet Laravelilla verkkopalveluita, hallintapaneeleja, rajapintoja ja taustajärjestelmiä. Tyypillinen projekti on palvelu, jossa on käyttäjähallinta, tietokanta ja muutama integraatio ulkopuolisiin järjestelmiin.
➢ Laravelin vahvuus on sen ekosysteemi. Sen ympärille on rakentunut laaja joukko työkaluja: Laravel Forge palvelinten hallintaan, Laravel Vapor serverless-julkaisuun, Laravel Nova hallintapaneelien rakentamiseen. Nämä eivät ole pakollisia, mutta ne nopeuttavat työtä merkittävästi.

Symfony-komponentit

Symfony on toinen merkittävä PHP-kehys. Se on teknisesti lähempänä “kirjastokokoelmaa” kuin yhtenäistä kehystä. Se tarjoaa komponentteja, joita voi käyttää erikseen tai yhdessä. Moni muu PHP-kirjasto, mukaan lukien Laravel, käyttää Symfony-komponentteja sisäisesti.
Käytämme Symfonyä silloin, kun projekti vaatii enemmän joustavuutta kuin Laravel tarjoaa. Tai silloin, kun halutaan käyttää vain tiettyjä komponentteja ilman koko kehyksen tuomaa rakennetta.

Olemassa olevan PHP-koodin ylläpito

Tämä on ehkä yleisin yksittäinen pyyntö, jonka saamme. Joku on joskus rakentanut PHP-sovelluksen. Se on toiminut vuosia. Nyt se alkaa hajota, tai se pitäisi saada nykyaikaistettua, tai kukaan ei enää ymmärrä mitä se tekee.

Vanhan PHP-koodin kanssa työskentely on oma taitonsa. Se vaatii kärsivällisyyttä ja kykyä lukea koodia, joka ei noudata mitään nykyaikaisia käytäntöjä. Usein koodi on kirjoitettu PHP 5:llä, se käyttää toimintoja, jotka on poistettu käytöstä vuosia sitten, ja siinä ei ole minkäänlaista testikattavuutta.

Tyypillinen eteneminen on tällainen: ensin selvitetään mitä koodi tekee ja miten se on rakennettu. Sen jälkeen lisätään testit kriittisimmille osille. Sen jälkeen päivitetään PHP-versio ja riippuvuudet. Sen jälkeen aletaan vähitellen korvaamaan vanhentuneita osia nykyaikaisemmilla.

Tämä ei ole nopea prosessi. Mutta se on usein halvempaa kuin koko sovelluksen uudelleenkirjoittaminen.

WordPress- ja WooCommerce-kehitys

WordPress on rakennettu PHP:llä, ja sen räätälöinti tarkoittaa PHP-kehitystä. Vaikka suurin osa WordPressin käytöstä tapahtuu käyttöliittymässä, kaikki se, mikä menee vakio-ominaisuuksien ulkopuolelle, vaatii koodia.
Olemme rakentaneet WordPress-lisäosia, räätälöityjä teemoja ja integraatioita ulkopuolisiin järjestelmiin. WooCommercen puolella olemme rakentaneet maksuratkaisuja, toimitustapoja ja räätälöityjä tuotetyyppejä.

Rajapinnat ja integraatiot

➢ PHP on yleinen kieli rajapintojen rakentamiseen. REST-rajapinnat, GraphQL-rajapinnat, SOAP-rajapinnat. Nämä kaikki ovat mahdollisia PHP:llä, ja niille on kypsät kirjastot.
➢ Olemme rakentaneet rajapintoja, jotka yhdistävät eri järjestelmiä toisiinsa. Toiminnanohjaus ja verkkokauppa. Asiakkuudenhallinta ja laskutus. Mobiilisovellus ja taustajärjestelmä.
➢ Rajapintojen rakentamisessa on kaksi asiaa, joihin kiinnitämme erityistä huomiota. Ensimmäinen on dokumentaatio. Rajapinta, jota ei ole dokumentoitu, on rajapinta, jota kukaan ei käytä. Toinen on virheiden käsittely. Rajapinnan pitää kertoa selkeästi, kun jokin menee pieleen, eikä palauttaa tyhjää vastausta.

Tekniset valinnat

PHP-projekteissa tehdään joukko teknisiä valintoja, jotka määrittelevät sen, millainen sovelluksesta tulee. Tässä on ne, joita itse suosimme.

PHP-versio

Käytämme PHP 8.2:ta tai uudempaa. PHP 8.1 ja sitä vanhemmat versiot ovat saavuttaneet elinkaarensa pään eivätkä saa enää tietoturvapäivityksiä.

Tietokanta

MySQL, PostgreSQL tai MariaDB. Valinta riippuu siitä, millaista dataa käsitellään ja miten sitä pitää hakea. PostgreSQL on monipuolisempi, MySQL on yleisempi.

Jonot

Redis, RabbitMQ tai Amazon SQS. Jonot mahdollistavat pitkäkestoisten tehtävien siirtämisen taustalle, jolloin käyttäjä ei odota.

Staattinen analyysi

PHPStan tai Psalm. Nämä työkalut löytävät virheitä koodista ennen kuin ne päätyvät tuotantoon.

Nämä eivät ole ainoat vaihtoehdot

Ne ovat ne, joita käytämme eniten, koska ne toimivat hyvin yhteen.

Kehys

Laravel tai Symfony. Valinta riippuu projektista. Laravel on nopeampi aloittaa ja sopii useimpiin projekteihin. Symfony on joustavampi ja sopii projekteihin, joissa on erityisvaatimuksia.

Välimuisti

Redis tai Memcached. Redis on monipuolisempi ja tukee useampia tietorakenteita. Memcached on yksinkertaisempi ja nopeampi tietyissä käyttötapauksissa.

Testaus

PHPUnit yksikkötesteille, Pest vaihtoehtoisena testauskehyksenä, Codeception hyväksymistesteille.

Koodin muotoilu

PHP-CS-Fixer tai Laravel Pint. Nämä työkalut pitävät koodin tyylin yhdenmukaisena.

Suorituskyky

PHP:n suorituskyky on parantunut merkittävästi viime vuosina. PHP 8 on huomattavasti nopeampi kuin PHP 7, ja PHP 8.3 on edelleen nopeampi kuin PHP 8.0.
Mutta suorituskyky ei ole pelkästään kielestä kiinni. Se on siitä, miten sovellus on rakennettu.
Tyypillisiä suorituskykyongelmia PHP-sovelluksissa:

N+1-kyselyt

Jokainen tietokantakysely tehdään erikseen silmukassa. Tämä on yleisin suorituskykyongelma, ja se on helppo korjata, kun se huomataan.

Ei välimuistia

Sama data haetaan tietokannasta joka kerta, vaikka se ei muutu. Välimuistin lisääminen vähentää tietokannan kuormitusta merkittävästi.

Liian suuri muistinkäyttö

Koko tietojoukko ladataan muistiin kerralla, vaikka se voitaisiin käsitellä paloina.

Puuttuvat indeksit

Tietokanta tekee täyden taulukkoläpikäynnin jokaisella kyselyllä. Indeksien lisääminen voi nopeuttaa kyselyitä kymmenkertaisesti.

Synkroniset operaatiot

Sähköpostin lähetys, tiedoston lataus, ulkoisen rajapinnan kutsu. Nämä kestävät sekunteja ja ne pitäisi siirtää taustalle.

Nämä ovat asioita, joita käymme läpi jokaisessa projektissa. Emme odota, että ongelmat ilmenevät tuotannossa. Etsimme ne etukäteen.

Turvallisuus

PHP on saanut maineen epäturvallisena kielenä. Tämä maine on osittain ansaittu, mutta se ei johdu kielestä vaan siitä, miten sitä on käytetty.
Tyypillisiä turvallisuusongelmia PHP-sovelluksissa:

SQL-injektio

Käyttäjän syöte liitetään suoraan SQL-kyselyyn. Ratkaisu on parametrisoidut kyselyt, jotka erottavat datan komennoista.

CSRF eli cross-site request forgery

Hyökkääjä saa käyttäjän selaimen tekemään toiminnon, jota käyttäjä ei tarkoittanut. Ratkaisu on CSRF-token, joka varmistaa, että pyyntö tulee oikeasta paikasta.

XSS eli cross-site scripting

Käyttäjän syöte tulostetaan sivulle ilman käsittelyä. Ratkaisu on syötteen escapetus, joka estää selaimen tulkitsemasta syötettä koodina.

Tiedostojen lataus

Käyttäjä voi ladata palvelimelle tiedoston, joka sisältää haitallista koodia. Ratkaisu on tiedostotyyppien rajoittaminen ja ladattujen tiedostojen tallentaminen paikkaan, josta niitä ei voi suorittaa.

Nämä ovat perusasioita, jotka jokainen PHP-kehittäjä tuntee. Silti niitä löytyy edelleen tuotantosovelluksista. Usein siksi, että koodi on kirjoitettu kiireessä tai siksi, että kehystä ei ole käytetty oikein.
Kun käytämme Laravelia tai Symfonyä, suurin osa näistä ongelmista on ratkaistu kehyksen tasolla. Tämä on yksi syy siihen, miksi suosimme kehyksiä sen sijaan, että kirjoittaisimme kaiken alusta.

Miten työ etenee

Aloitamme keskustelulla. Kerrot, mitä tarvitset ja mitä sinulla on jo. Tämä ei maksa mitään eikä sido sinua mihinkään.

Sen jälkeen teemme suunnitelman. Käymme läpi teknisen toteutuksen, aikataulun ja budjetin. Kerromme rehellisesti, jos jokin ei ole realistista tai jos jokin kannattaa tehdä eri tavalla kuin ajattelit.

Toteutus etenee vaiheittain. Jokaisen vaiheen jälkeen näet, mitä on tehty ja mitä seuraavaksi. Näin pysyt mukana koko ajan.

Kun työ on valmis, saat koodin ja dokumentaation itsellesi. Emme jää roikkumaan väliin.

Keitä me olemme

Teemme tätä työtä itse. Emme alihanki projekteja eteenpäin. Se kuka myy on se joka tekee.
Kerromme rehellisesti, jos jokin ei ole realistista. Jos PHP ei ole oikea ratkaisu, sanomme sen. Jos nykyinen sovellus on riittävä eikä sitä kannata uudistaa, sanomme sen.
Emme myy sinulle sitä mitä et tarvitse.

Ota yhteyttä

➢ Kerro projektistasi. Ei tarvitse olla valmista suunnitelmaa eikä tarkkaa budjettia. Riittää että kerrot mitä haluat saavuttaa.
➢ Vastaamme yleensä saman päivän aikana.