Kategorijos ‘PHP’ Archyvas



PunBB atšaka – FluxBB

Parašė: Armandas, 2008-05-09 | Nėra komentarų
Kategorijose: Atviras kodas, Naujienos, PHP

Neperseniausiai, PunBB komana paskelbė, kad forumo svetainė persikelia į naują serverį. Tai buvo naujų sąvininkų atsiradimo pasekmė. Nemažai vartotojų išreiškė nepasitenkinimą tokiu žingsniu, nes manė jog naujų savininkų požiūris nesutampa su projekto idėja.

Šiandien programuotojai pranešė sukūrę atšaką pavadinimu FluxBB. Tai dar vienas pavyzdys rodantis, kad atviras kodas negali būti užgožtas. Aš tuo tarpu raginu visus naudojančius PunBB sekti naujienas FluxBB svetainėje ir visus atnaujinimus siųstis iš ten.

PHP Konferencija

Parašė: criminal, 2008-04-12 | Komentarų: 6
Kategorijose: PHP, Programavimas

Taigis, ką tik grįžau iš PHP konferencijos, kuri yra viena iš InfoSA organizuojamo renginių ciklo InfoShow, dalių. Konferencija šiemet vyko penktąjį kartą, bet, deja, tai buvo pirmasis kartas, kai joje lankiausi. :( Konferencijos metu buvo keturi pranešėjai, kalbėję šiomis temomis:

  • Pasiimam duomenis iš trečios šalies šaltinių (Sergej Kurakin)
  • Kodo interpretacija ir analizė (Emilis Dambauskas)
  • imCat – CSRF (Rimantas Liubertas)
  • Perfomance (Tomas Liubinas)

Penktasis dalyvis – Povilas Poderskis, turėjęs kalbėti, mano nuomone, gan įdomia tema “PHP saugumas: sudėtingos atakos”, deja, neatvyko. :(

Pirmasis kalbėjo Tomas. Lyginant su kalbėjusiais vėliau, jam kalbėti sakėsi šiek tiek prasčiau. Nepaisant to, klausyti buvo įdomu. Visgi, kai kurios vietos, susijusios su kodo optimizavimu, tarkim daugybos naudojimas vietoj dalybos (pvz. 6 * 0,5, vietoje 6 / 2), man pasirodė truputį perlenktos. Galbūt tai ir duoda truputį performance’o, bet kodas tampa kreivesnis. Asmeniškai man daug normaliau atrodytų užrašas $sk / 3, nei $sk * 0.333333333. :D Na, bet, žinoma, jei reikia maksimalios greitaveikos… Bet kodėl tuomet akcentavo, jog dvigubų ar viengubų kabučių naudojimas neturi skirtumo? Juk kintamųjų parse’inimas tarp dvigubų kabučių turėtų vykti ilgiau nei paprastos eilutės, parašytos tarp viengubų kabučių, kurioje neparse’inimi kintamieji, apdorojimas. Tad, jeigu bandoma išgauti performance’o net iš aritmetinių operacijų, manau, dėmesį reiktų, šiuo atveju, ir į kabutes atkreipti.

Po Tomo kalbėjo Emilis. Matėsi, kad jis čia dalyvauja nebe pirmą kartą: kalbėjo laisvai, aiškiai, pajuokaudamas. Sudomino jo paminėta dokumentacijos generavimo programa. Deja, nebeatsimenu pavadinimo :D Jei kas prisimenat, parašykit komentaruose.

Sergej pristatymas man asmeniškai buvo įdomiausias. Patiko ne tik tai, kaip jis kalbėjo ir pati tema buvo įdomi bei aktuali. Duoti patarimai manau tikrai pravers, nes neabejoju, kad tikrai dar teks daryti ir man sistemą, kurioje reikia duomenis paimti iš trečios šalies puslapių.

Paskutinysis buvo Rimantas. Pradžioje net neįsivaizdavau apie ką jis kalbės. Jo pranešimo pavadinime figūravusios raidės CSRF man nebuvo girdėtos, tad nieko nesakė. Kaip paaiškėjo, tai – puslapių pažeidžiamumo tipas. Beje, gana aktualus, nes nemanau, kad daugelyje puslapių yra įgyvendintos Rimanto minėtos apsaugos nuo šio pažeidžiamumo.

Pasibaigus konferencijai, kai kurie keliavo į after’į, na, o aš keliavau namo. Vakar dar truputį dvejojau ar eiti į šią konferenciją, bet dabar, jai pasibaigus, tikrai nesigailiu, kad buvau. Rytoj nusimato Ruby konferencija, kurioje, žinoma, jeigu niekas nepasikeis, taip pat apsilankysiu. Antradienį vyks ir IT konferencija , į kurią taip pat norėčiau nueiti. Deja, laikas labai nedėkingas – per paskaitas. Bet gal kaip nors…

Nuo HTML iki PHP (+MySql)

Parašė: Bad.F.Word, 2008-01-05 | Komentarų: 10
Kategorijose: PHP, Programavimas, Smagumynai

arba Kaip pradėti programuoti PHP

…. kad nereiktų kiekvienam rašyti atskirai …

Softas

Be užsispyrimo ir noro tobulėti, tai bene svarbiausias dalykas norinti pradėti dirbti su PHP ir MySql. Tai gali būti bet koks hostingas, teikiantis atitinkamus modulius (nerekomenduojama, nes darbas vyksta lėčiau) arba serveris tavo PC.
http://www.apachefriends.org/en/xampp.html atsisiunti basic package tavo OS ir įsirašai. Skype gali naudoti 80 portą (kam?), Išjungiam: nustatymai > sujungimas >nuimam varnelę nuo‚ naudoti 80 arba …..
Darbalaukyje randam XAMPP Control Panel, per jį paleidžiam apache ir mysql (filezila ir mercury nereikia).
Kartais būna kad windozė disable‘ina mūsų servisus, todel jei kas neveikia patikrinkit ar control panel> Administrative Tools > services prie mysql ir apache yra auto arba manual (ne disabled).
Jei http://localhost matot ką nors panašaus į xampp valdymo panelę valio!!
Per paiešką susirandant htdocs katalogą. Jis bus jūsų serverio pagrindinis katalogas, kur turi gyventi visi jūsų skriptai. Jį galima pakeisti kitu, bet čia jau vėlesnė užduotis ;)

Pagaliau galim pradėti mokytis

Aš asmeniškai rekomenduočiau nusipirkti knygą php4/5 vadovas. Bent jau php4 vadove yra tikrai daug gerų patarimų pradedančiajam.
php.pdf Daauug naudingos info apie php LIETUVIŠKAI ir laisvai :)
Taip pat būtina perskaityti bent daugumą straipsnių http://www.php.lt/render/Articles Ypatingai geriau lietuviškai nelabai ką ir rasit. Perskaityti ir suprati kas kaip ir kodėl taip pat pageidautina. +ten yra nemažai komentarų, kurie gal būt tau padės.
Kaip rasti reikiamą funkciją?
http://php.net/funkcijos_ar_komandos_pavadinimas
pvz. reikia rasti funkciją dirbančią su bylomis http://php.net/file arba reikia pakeisti paveiksliuko dydį http://php.net/resize ir antras rezultatas jau yra tai ko tau reikia. Tas pats yra ir su http://mysql.com/

Kas toliau

Kai jau mintinai moki bent tai kas yra http://www.php.lt/render/Articles, gali bandyti sukuri pvz. mini bloginimo sistemėlę ar naujienų skriptą. Tavo vaizduotės reikalas.
Gana gera praktika pradedančiajam yra jau sukurtų sistemų analizavimas. http://www.opensourcecms.com/index.php?option=com_content&task=view&id=2170 (čia tik pavyzdys, pat asmeniškai nebandžiau, bet kadangi tai Lite kategorijai priklausanti CMS, turėtų tikti) ar tą patį wordpress‘ą. Parsisiunti ir narplioji, narplioji, narplioji… Tai darydamas ne tik suprasi kas kaip veikia, bei ir kaip reikia tvarkingai rašyti kodą. Jei viską sukiši į vieną lapą, jau kitą rytą net pats nebesuprasi ką ten rašei.

Vis dar kažko nežinai? Pirmiausia pabandyk paklausti google, jei TIKRAI neradai (net ir ne lietuviškai) bandyk klausit forume. Tik „noriu super saito padarykit“ stiliaus temos NIEKADA nesulauks normalaus atsakymo!

Nori dar pakelti savo skilus? http://www.google.lt/search?q=php+tutorial imi ir skaitai viską (ok bent dalį) kad ir ne iš eilės, bet bent rimtesnius straipsnius ir tobulėji.

Sėkmės tobulėjant!!!
O LIA LIA :)

El-pašto siuntimas su PHP: pažvelkime giliau.

Parašė: Armandas, 2007-08-26 | Nėra komentarų
Kategorijose: Kodas, PHP

Šiame straipsnyje apžvelgsiu daugiaformačių laiškų, bei laiškų su priedais (attachments) siuntimą. Kad suprastumėt kaip tai daroma, jums iš pradžių reikės susipažinti su MIME formatu, ką vėliau ir padarysime. Dabar pažvelkime į paprasto laiško siuntimą, naudojant funkciją mail().

Pavizdys iš php.net:

$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\\r\\n" .
           'Reply-To: webmaster@example.com' . "\\r\\n" .
           'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

Bene svarbiausia dalis čia – header’iai. Headeriai yra plačiai naudojami ir kitų aplikacijų kūrime, bet čia jau kita tema. Pašto headeriuose nurodome siuntėją, atsakymo adresą, kliento tipą, dokumento (turinio) tipą ir t.t. Pradedantiesiems, tai bene sunkiausia dalis, todėl dėliojant headerius patartina pasitikslinti su kitais šaltiniais. Siunčiant daugiadales (multipart) žinutes taip pat nurodysime reikalingus headerius. Daugiadalio laiško sudėtis tokia (MIME formatas):

  1. laiško headeriai
  2. sienelė (boundary)
  3. konkrečios dalies headeriai, po jų, standartiškai – tuščia eilutė
  4. tos dalies turinys
  5. žr. 2
  6. žr. 3
  7. žr. 4
  8. žr. 2
  9. ir t.t.
  10. laiškas užbaigiamas sienele

Laiško headerius jau aptarėme, dabar išsiaiškinsime, kas tas boundary. Boundary – speciali eilutė, skirta atskirti turinio dalims (pvz.: paveiksliuką nuo teksto). Eilutė turi būti unikali ir nebūti kaip turinio dalis (akivaizdu). Sienelei sugeneruoti galima panaudoti tokį kodą:

//parašas. galite sienelę supersonalizuoti :)
$signature = 'p4i-rules-';
    //sugeneruojam simbolių eilutę, unikalumui užtikrinti
    $hash = md5(time());
    //sujungiame parašą ir eilutę
    $boundary = $signature.$hash;

Laiško dalies headeriuose reiktų nurodyti dalies turinio tipą (Content-type) ir turinio koduotę (Content-Transfer-Encoding). Papildomus headerius norodome pagal poreikį.

Kokio tipo laiškas bebūtų, jis sudarytas tik iš (surprise!) teksto/simbolių. Jei siunčiamas ne tekstas, duomenys užkoduojami base64 koduote. (Taip, base64 tam ir skirtas, o ne slaptažodžių “saugojimui” ar unFriendly urls gamybai). Failo užkodavimui galite naudoti tokį būdą:

$file = 'rozhes.gif';
//atsidarom failą (binary mode)
$f = fopen($file, 'rb');
//nuskaitom failą (didesniems failams geriau naudoti ciklą)
$c = fread($f, filesize($file));
//daliname koduotą eilutę į gabalus
$encoded = chunk_split(base64_encode($c));

Dalių pavyzdžiai:

Teksto dalis:
Atkreipkite dėmesį į du brūkšnelius prieš sieneles.

--p4i-rules-53a5ddb48feded5bec130878c979f778
Content-Type: text/plain; charset=UTF-8;
Content-Transfer-Encoding: 7bit

labas, maryte! šiandien 8 prie medžio! lauksiu!

Paveikslėlio (priedo) dalis:

--p4i-rules-53a5ddb48feded5bec130878c979f778
Content-type: image/gif; name="rozhes.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="rozhes.gif"

R0lGODlhAgACAIABAP8AAAAAACH5BAEKAAEALAAAAAACAAIAAAIChFEAOw==

O dabar galime viską sujungti:


$signature = 'p4i-rules-';
    $hash = md5(time());
    $boundary = $signature.$hash;

$to      = 'maryte@example.com';
$subject = 'meet\'as';
$headers = 'From: petriukas@example.com'."\\r\\n" .
           'Reply-To: petriukas@example.com'."\\r\\n" .
           'MIME-Version: 1.0'."\\r\\n".
           'Content-Type: multipart/mixed; boundary="'.$boundary.'"'; //čia dviejų brūkšnelių nededame
           //šioje vietoje tuščią eilutę paliks pati mail funkcija

$message = '--'.$boundary.'
Content-Type: text/plain; charset=UTF-8;
Content-Transfer-Encoding: 7bit

labas, maryte! šiandien 8 prie medžio! lauksiu!

--'.$boundary.'
Content-type: image/gif; name="rozhes.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="rozhes.gif"

R0lGODlhAgACAIABAP8AAAAAACH5BAEKAAEALAAAAAACAAIAAAIChFEAOw==
--'.$boundary.'';

mail($to, $subject, $message, $headers);

Išsisiuntę sau tokį laišką, gausime tekstą ir prikabintą paveiksliuką (2×2 px). Pasinaudojus vaizduote (ir headeriais), galima siųsti įvairiausius laiškus (pvz.: html su paveikslėliais ir stiliais (css)). Tik nepiktnaudžiaukit ;)

Jamam gravatar’us!

Parašė: Armandas, 2007-05-31 | 1 Komentaras
Kategorijose: Kodas, PHP, Python

Gravatar – Globally Recognized Avatars. Tai populiarėjantis avatarų naudojimo būdas. Viskas labai paprasta:

  • Užregistruoji savo e-paštą(-us)
  • Įsikeli norimus avatarus
  • džiaugiesi

Nuo šiol bloguose, forumuose ir visur kur tik palaikomi gravatarai galėsi matyti savo avatarą šalia savo pranešimo. How cool is that?!

Dabar metas išmokti įsidiegti gravatarus pas save. PHP programavimo kalboje funkcija atrodytų štai taip:

function gravatar($email)
{
    //nustatom default reiksmes
    //gravataro dydis
    $size     = '48';
    //paveiksliukas kuris bus rodomas, jei vartotojas neturi gravataro
    $default  = 'http://www.example.com/images/gravatar.gif';
    $template = 'http://www.gravatar.com/avatar.php?gravatar_id=%s&default=%s&size=%s';

    //gaunam e-mail hasha, kuris naudojamas kaip gravataro id
    $email = md5($email);

    //paruosiam nuoroda
    $default = urlencode($default);

    $link = sprintf($template, $email, $default, $size);
    return $link;
}

Ši funkcija jum grąžins nuorodą iki avataro, kurią galėsit naudoti img taguose.

Na o čia skriptas Python mylėtojams. Kadangi tokių (manau) nedaug, tai kodas bus “for fun” :)

from md5 import md5
from urllib import quote

def gravatar(email):
    size = '48'
    default = 'http://www.example.com/grafavar.gif'
    url = "http://www.gravatar.com/avatar.php?gravatar_id=%s&default=%s&size=%s"
    email = md5(email).hexdigest()
    default = quote(default, safe='')
    return url % (email, default, size)