Defnyddio pHp - Iaith Ochr-Gweinyddwr
Cynnwys: cyflwyniad ac arsefydliad (installation) :: sgript cyntaf :: newidynnau :: gorchmynion
Beth yw pHp?
pHp (Hypertext preprocessor) yw iaith ochr-gweinyddwr (server-side language) ffynhonnell-agored sydd yn cael ei defnyddio gan filoedd ar ben filoedd o ddatblygwyr gwe dros y byd. Mae ganddi fantais dros ieithoedd/fframweithiau eraill megis ASP a Java oherwydd ei bod yn ffynhonnell-agored gyda llawer o gynhaliaeth. Mae cystrawen yr iaith yn eithaf hawdd i'w ddysgu hefyd a gallwch gynhyrchu sgriptiau pwerus iawn gydag ychdig iawn (tua 10) o wahanol orchmynion. Mae gwefan pHp yn cynnwys llawer o wybodaeth, gan gynnwys y llawlyfr.
Sut i arsefydlu pHp
Os ydych am ddefnyddio pHp, mae'n bwysig bod eich gwesteiwr yn cynnal pHp (a databasau MySQL). Dylech edrych am fersiwn 5 neu'n uwch o pHp a fersiwn 5 neu'n uwch o MySQL. Bydd y cyfrifon hyn ychydig yn ddrutach na rhai sylfaenol, ond nid llawer. Edrychwch ar streamline.net ac xcalibre.co.uk am syniad o brisiau.
Yn ogystal â hyn, bydd angen copi lleol o pHp, gweinyddwr gwe a databas MySQL arnoch. Y ffordd hawsaf yr wyf wedi gweld o gyflawni hyn yw defnyddio pecyn o'r enw XAMPP. Mae XAMPP ar gael ar gyfer Windows, Mac, Linux a Solaris. Mae arsefydlu XAMPP yn ofnadwy o hawdd, er mae angen talu sylw i'r adran "Security" cyn cychwyn.
Dull arall y gallwch drio yw easyPHP, gallwch ei lawrlwytho o fan hyn: sourceforge.net. Un peth da am easyPHP yw ei fod yn eich caniatáu i'w lwytho ar gofstic - defnyddiol os nac ydych am chwarae o gwmpas gyda'ch prif system.
Am wybodaeth bellach ynglŷn â phecynnau WAMP (Windows Apache-MySQL-pHp), edrychwch ar wikipedia.
Efallai eich bod yn gofyn, "Beth yw Apache?" Apache yw'r gweinyddwr gwe gorau i weithio gyda pHp/MySQL. Os ydych yn defnyddio Windows, mae gan hwnnw gweinyddwr gwe ei hun (IIS), er mae cael pHp i weithio'n llwyddiannus arno gallu bod yn boen. Yn fy marn i, dylech lwytho Apache beth bynnag oherwydd hon fydd y system a fydd gennych ar y we (system LAMP - linux-apache-mysql-php). Peidiwch â phoeni am y "Linux", ni wnaiff wahaniaeth i chi.
Eich sgript syml cyntaf
Crëwch dudalen newydd (e.e. mewn Notepad) gan osod y cod isod iddi a'i harbed fel 'prawf.php'. Gallwch agor y ffeil mewn porwr a ddylsech weld y neges yn unig.
Mae'n draddodiadol erbyn hyn i ddechrau codio gyda'r neges, "Helo Byd" - ac mae'n peth syml iawn i'w wneud:
<?php
echo "Helo Byd";
?>
Sylwch ar sawl peth. Yn gyntaf, mae'r cod wedi'i gympasu gyda thagiau php, sef "<?php" i agor a "?>" i gau.
Mae'r gorchymyn "echo" yn golygu "dangoswch y canlynol ar y sgrin".
Mae'r testun i'w ddangos tu fewn dyfynodau dwbl, er gallwch ddefnyddio dyfynodau sengl hefyd, fel hyn, 'Helo Byd'.
Mae angen gorffen pob llinell gyda ";" ('dyw hwn ddim yn hollol wir, mae rheolau arbennig ar gyfer rhai gorchmynion gyda brasys, {...} ynddynt). Yn aml os nac ydy darn o god yn gweithio, y broblem arferol yw eich bod wedi anghofio gosod ";" ar ddiwedd y llinell.
Mae'r sgript uchod yn iawn am brofi, ond na fyddech yn creu gwedaflen fel hon heb 'DTD' ac elfennau HTML eraill. Felly am y cod cyfan, dylech wneud rhywbeth fel y canlynol:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Prawf syml pHp</title>
</head>
<body>
<?php
echo "Helo Byd";
?>
</body>
</html>
Newidynnau a gwahanol fathau ohonynt
Beth yw newidyn? Wel, gall fod yn unrhyw beth! Mae hwn yn hyd yn oed yn fwy gwir mewn pHp nag ieithoedd eraill. Pam? Mewn y mwyafrif o ieithoedd mae'n rhai datgan pa fath newidyn rydych yn ceisio â'i greu cyn i chi ei ddefnyddio (e.e. rhif, string, dyddiad). Nid felly gyda pHp. Rydych yn rhoi enw iddo a gosod '$' o'i flaen, e.e. $fy_newidyn. Mae'n rhaid dweud yn syth, mae enwau newidyn yn sensitif i lythrennau bach/mawr ac ni ddylech osod bylchau ynddynt (e.e. $fy newidyn - bydd hwn yn creu'r newidyn $fy!). Hefyd, mae'n syniad i beidio â dechrau enw newidyn gyda rhif ac os oes modd, peidiwch â defnyddio symbolau ynddynt.
Mae newidynnau yn dal darn o wybodaeth. Mae darnau cod wedyn yn gwenud rhywbeth (neu penderfynu beth i'w wneud nesaf), dibynnu ar 'werth' y newidyn.
Newidynnau syml
$cyntaf = "3";
$ail = "5";
$ateb = $cyntaf + $ail + 2;
echo "Yr ateb yw " . $ateb;
Yn ôl yn disgwyl mae'r sgrin yn dangos Yr ateb yw 10.
Mae sawl peth i'w sylwi fan hyn:
- Mae pHp yn adnabod "string" (testun) sy'n cynnwys rhifau'n unig fel rhif ac yn fodlon ei drin felly. Gallwch wneud toreth o gyfrifiadau gyda'r canlynol: +, -, * (lluosi), / (rhannu), %, ayyb
- Gallwn gysylltu sawl string / newidyn gyda'i gilydd gan ddefnyddio'r atalnod llawn: '
.' y term swyddogol am hwn yw'r "cydgatenwr" (concatenator).
$ateb = "42";
echo "Yr ateb i bopeth yw {$ateb}";
echo 'Yr ateb i bopeth yw {$ateb}'; //hwn yn methu
echo "Yr ateb i bopeth yw " . $ateb;
echo 'Yr ateb i bopeth yw ' . $ateb;
Gallwch weld bod eich dewis i ddefnyddio " neu ' ar gyfer string yn bwysig. Gallwch gwmpasu newidyn tu fewn dyfynodau dwbl gan ddefnyddio brasys, {}, ond nid yw hyn yn wir gyda dyfynodau sengl. Mae pob un o'r uchod y dangos, Yr ateb i bopeth yw 42, heblaw'r ail un.
Beth os mae'ch testun yn cynnwys ' (collnod) neu " ynddo?
Dim problem - gallwn ddefnyddio ôlsleis (\) cyn y ' neu'r ", a bydd popeth yn iawn, e.e.
$dyfyniad = "\"Cer o 'ma gyda dy dwy go's bren.\"";
echo "Dywedodd Ben: {$dyfyniad}";
$dyfyniad2 = '"Cer o \'ma gyda dy dwy go\'s bren."';
echo 'Dywedodd Ben: ' . $dyfyniad2;
Bydd Dywedodd Ben: "Cer o 'ma gyda dy dwy go's bren." yn ymddangos dwywaith.
Yn bersonol, rwyf yn gosod testun mewn dyfynodau dwbl er mwyn cael defnyddio'r brasys i gynnwys newidynnau. Mae cadw trac ar gatenyddwyr yn real boen!
Cyn gorffen y darn cyntaf, hoffwn ddweud bod modd cynnwys tagiau html mewn testun a newidynnau hefyd:
$dyfyniad = "\"Cer o 'ma gyda dy dwy <em>go's bren</em> tithe 'ed.\"";
//mae EM yn cyfateb i destun italig mewn XHTML
echo "Dywedodd Jac: {$dyfyniad}";
Bydd yr uchod yn dangos, Dywedodd Jac: "Cer o 'ma gyda dy dwy go's bren tithe 'ed."
Mae sgôp newidynnau eich hunain yn cael ei gyfyngu i'r dudalen honno. Felly, sut ydym yn pasio gwybodaeth o un dudalen i'r nesaf? Gwelwch yr adran ganlynol.
Pasio gwybodaeth
Mae tua 5 prif ffordd o basio gwybodaeth o un dudalen i'r llall: $_GET, $_POST, $_SESSION, cwcis a databasau. Gwnewch edych ar y 3 cyntaf isod.
Newidynnau system: url a $_GET
Gall patrwm url fod fel yr isod:
http://www.wetwork.org.uk/index.php?id=3&lliw=red&iaith=cy
Mae'r url yn pasio 3 darn o wybodaeth i index.php:
id=3; lliw=red; iaith=cy
Er mwyn delio gyda'r data, mae'n rhaid bod index.php yn defnyddio newidynnau system $_GET:
$fy_lliw = $_GET['lliw'];
$iaith = $_GET['iaith'];
Edrychwch ar yr enghraifft syml am eglurhad.
Newidynnau system: ffurflen a $_POST
Erioed wedi meddwl i ble mae data ffurflen yn mynd? Sut mae'n cael ei brosesu?
Gall data o ffurflen naill ai ei anfon i dudalen newydd neu i'r un dudalen. Gall y data gael ei anfon gan GET (gweler uchod) neu POST. Beth yw'r gwahaniaeth? Yn syml, mae GET yn gosod holl wybodaeth y ffurflen mewn i'r url, nid yw POST. O ganlyniad, dylech pob amser ddefnyddio dull (method) POST gyda ffurflenni.
Mae meysydd ffurflenni yn derbyn enw (paramedr "name"), e.e. "cyfrinair" a'r newidyn $_POST['cyfrinair'] ar y dudalen nesaf bydd yn dal y data.
Ewch i'r enghraifft i weld sut mae'n gweithio.
Newidynnau system: cyfeirio a $_SERVER['...']
Mae nifer o newidynnau yn rhoi llawer o wybodaeth ar y gweinyddwr. Mae'n rhaid bod yn ofalus iawn sut caiff y wybodaeth hon ei defnyddio. Gall un ohonynt ($_SERVER['DOCUMENT_ROOT']), rhoi'r llwybr i hacwyr. Felly ni ddylai rhai ohonynt byth ddangos y data i'r cyhoedd:
Rhai defnyddiol yw:
$_SERVER['DOCUMENT_ROOT']: bydd yn cynnwys rhywbeth fel "/home/unix1201/w/cymru.org.cym/user/htdocs" - defnyddiol ar gyfer symud, llwytho a lleoli ffeiliau.
$_SERVER['HTTP_REFERER']: mae'n dangos y dudalen ddiwethaf roeddech yn pori!
$_SERVER['PHP_SELF']: yn dychwelyd y dudalen a'r llwybr, e.e. /yav/cy/index.php
Dyma eich $_SERVER['HTTP_REFERER'] chi:
Dyma $_SERVER['PHP_SELF'] y dudalen hon: /n_php.php
Newidynnau system: tracio a $_SESSION['...']
Mae newidynnau $_SESSION yn hyfryd! Maent yn ein galluogi i symud data o dudalen i dudalen heb orfod defnyddio url, ffurflen na cwcis. Wedi dweud hyn, nid yw'n ffordd arbennig o ddiogel i drosglwyddo data, felly dim ond ar gyfer pethau di-bwys (nid rhifau cardiau credyd!).
Ar ddechrau pob dudalen (cyn y DTD) - reit ar y dechrau, dylai'r datganiad canlynol ei osod:
<?php
start_session();
....
?>
Mae hwn yn dechrau sesiwn os nac oes un yn bodoli eisoes neu'n parhau gyda'r sesiwn gyfredol. Nawr gallwch ddefnyddio $_SESSION i drosglwyddo gwybodaeth, e.e.
//Ar dudalen index.php
$_SESSION['iaith'] = 'cy';
//Ar dudalen cysylltu.php
$iaith = $_SESSION['iaith'];
Newidynnau aräe
Rydych eisoes wedi cwrdd ag araeau yn yr enghreifftiau cynt - ond beth ydyn nhw? Aräe yw dull o storio data cysylltiedig, tebyg. E,e. dywedwch eich bod am storio enw pob talaith yr UDA, ni fyddech yn gosod newidyn unigol i bob un. Mae arä yn aml iawn yn cael ei ddefnyddio data gallech ei roi mewn rhestr. Nôl i'r enghraifft ar yr UDA:
$uda = array('Arkansas', 'Arizona', 'Wisconsin', 'Washington', 'Pennsylvania', ...)
echo $uda[3];
Mae'r uchod yn dychwelyd: Washington. Nid Wisconsin fel byddech yn meddwl. Mae hwn oherwydd mae araeau pob amser yn dechrau ar eitem 0, nid 1. Felly byddai $uda[8] yn dal y nawfed eitem!
Mae sawl ffordd o greu araeau: fel yr uchod, neu fel yr isod:
$iaith[] = 'cy';
$iaith[] = 'en';
$iaith[] = 'it';
//caiff eitemau eu hychwanegu i'r safle nesaf (cy= 0, en = 1, it =2)
echo $iaith[2];
Mae'r uchod yn rhoi it;
Newidynnau global a static
Mae'r newidynnau hyn yn cael eu defnyddio gyda swyddogaethau (functions). Mae newidynnau tu fewn swyddogaeth yn breifat - hynny yw, nid yw cod tu allan i'r swyddogaeth yn gallu ei ddarllen. Hefyd, nid yw swyddogaeth yn gallu darllen newidynnau y tu allan iddynt.
Mae newidynnau yn gallu cael eu penodi'n global tu fewn swyddogaeth er mwyn bod cod tu fewn a thu allan yn defnyddio'r un data.
Nid yw'r newidyn static yn cael ei ddefnyddio mor aml â hynny, ond gall fod yn ddefnyddiol fel rhifydd neu i wirio os ydy swyddogaeth eisoes wedi cael ei galw.
Dyma ddiwedd y cyflwyniad ar newidynnau.
Rhestr o'r gorchmynion mwyaf cyffredin a defnyddiol
Gwnes sôn bod dim ond angen rhyw 10 gorchymyn, wel dyma tua 10:
Allbwn i'r sgrin ac echo/print neu include/require Δ
Mae printio testun i'r sgrin yn hawdd iawn i'w wneud. Mae printio cynnwys ffeil hyd yn oed yn haws!
echo "Dangos <em>hwn</em> ar y sgrin";
print 'Dangos hwn ar y sgrin <em>hefyd</em>';
Mae'r uchod yn dangos: Dangos hwn ar y sgrinDangos hwn ar y sgrin hefyd
Sylwch gallwch osod tagiau HTML i mewn i'r testun a hefyd defnyddio " neu ' o gwmpas y testun (* gweler y rhan ar newidynnau i weld y brif wahaniaeth).
Mae print_f yn bodoli, sy'n caniatáu fformatio arbennig ar y testun.
include ("tudalen_cyntaf.htm");
Mae'r datganiad uchod yn meddwl gosodwch gynnwys y ffeil tudalen_cyntaf.htm i'r sgrin. Mae hwn yn ofnadwy o ddefnyddiol, gallwch gadw eich cynnwys a'ch adeiledd ar wahân, ond hefyd gallwch greu system godio modiwlol.
Yn hytrach na defnyddio include, gallech ddefnyddio require. Nid oes fawr o wahaniaeth rhyngddynt heb law: pan fydd include yn methu, bydd y ffeil cynnwys jyst ddim yn ymddangos, gyda require, ni fydd y dudalen gyfan yn ymddangos.
Hefyd mae shwd bethau â include_once a require_once. Mae'r rhain yn sicrhau taw unwaith yn unig caiff ffeil ei chynnwys, stim ots sawl gwaith caiff ei chynnwys mewn datganiad include_once neu require_once.
Os oes cod pHp yn y ffeil i'w chynnwys - mae'n rhaid sicrhau bod y ffeil honno â'r estyniad 'php', e.e. 'tudalen_cyntaf.inc.php'.
Dewis trwy amod ac if/switch Δ
Angen newid llif y rhaglen yn dibynnu ar werth newidynnau? Digon hawdd. Dyma'r un o ddarnau cod mwyaf defnyddiol mewn unrhyw iaith.
if($iaith == 'cy'){
echo "Shw mae {$enw}";{
}else{
echo "How the devil are you {$enw}";
}
Sylwch yr "==" wrth brofi gwerth $iaith. Mae hwn yn ofndawy o bwysig i gofio, ac nid eich bod yn defnyddio "=" yn unig (fel mae rhai ieithoedd eraill yn eich gadael. Os ydych yn defnyddio "=" yma, bydd $iaith yn cael ei osod i 'cy' a dim ond "Shw mae ..." bydd yn ymddangos, stim ots beth oedd gwerth $iaith yn wreiddiol. Mae'r "=" unigol dim ond am osod gwerthoedd. Os ydych am gymharu neu gwirio, defnyddiwch "==".
Gallwch ddefnyddio'r canlynol hefyd fel amodau a gwirwyr: != (NID), || (NEU), && (AC), < (llai na), > (mwy na), === (hafal i werth a theip)
if($iaith == 'cy' && $oed < '10'){
echo "Shw mae plentyn bach!";
}elseif($iaith == 'cy' && ($rhyw == 'b' && $oed > '40') || ($rhyw == 'm' && $oed > '60')){
echo "Shw mae hen berson";
}else{
echo "Ciao";
}
Er, yn enghraifft ffôl, mae'r uchod yn profi am (1) Cymro neu Gymraes dan 10, (2) Cymro dros 40 NEU Gymraes dros 60 (3) Unrhywun arall (Cymro/Cymraes ai beidio).
Gallwch weld bod modd creu llwyth o gymalau "elseif". Os yw'n cymhariaeth syml, yn yr achos hwn, mae'n well i ddefnyddio'r gorchymyn switch.
switch($canran){
case $canran > 90:
echo "Ardderchog, cawsoch A";
break;
case $canran > 80:
echo "Ardderchog, cawsoch B";
break;
case $canran > 70:
echo "Ardderchog, cawsoch C";
break;
case $canran > 60:
echo "Ardderchog, cawsoch D";
break;
case $canran > 50:
echo "Ardderchog, cawsoch E";
break;
default:
echo "Wps - methoch!";
break;
}
Mae'n bwysig bod pob achos yn gorffen gyda break, neu fydd pethau rhyfedd iawn yn digwydd!
Cylchu gyda while/for Δ
Dyma sut i 'lwpio'. Maent yn cael eu defnyddio'n aml gydag araeau a data o ddatabasau.
Mae while yn achosi cylch o orchmynion i ddigwydd tra bod amod yn wir (neu ddim).
$i = 0;
$fy_rhif_anhysbys = $_POST['rhif'];
while($i <= $fy_rhif_anhysbys){
echo $i . ", ";
$i = $i + 1;
}
Eto, mae'r enghraifft ucho yn un hurt, ond mae'n y broses yn iawn: Mae $fy_rhif_anhysbys wedi dod o ffurflen ac mae'r darn o god yn printio'r camau i'w hadnabod i'r sgrin, sef 1, 2, 3, 4 ...
Hefyd, os nac ydy $i = $i + 1 yn ymddangos, ni fydd $i yn mynd yn fwy a bydd y darn o god yn rhedeg am byth!
Gallwn ddefnyddio while i gylchu trwy set ddata:
while($data = mysql_fetch_array($canlyniad)){
echo "<p>{$data['id']}: {data['enw']}</p>";
}
Mae'r uchod yn tynnu data 'id' ac 'enw' allan o'r set ddata, cofnod ar y tro. Bydd while yn parhau i gylchu tan ddiwedd y set ddata, i ddangos rhywbeth fel y canlynol:
3: Arni 5: Dolff 6: Slei 9: Briws 14: Alji 17: Cwentin
for($rhifydd = 1; $rhifydd <=10; $rhifydd ++){
echo "<p>Fy enw i yw Bendro</p>";
}
Mae'r cod uchod yn creu 10 cylch. Mae'r cymal cyntaf yn dweud bod $rhifydd yn hafal i 1 i ddechrau. Mae'r ail gymal yn dweud dylid cylchu tra bod $rhifydd yn hafal i 10 neu'n llai. Mae'r trydydd cymal yn dweud gan faint dylai $rhifydd gynyddu pan tro (mae ++ yn meddwl cynyddu gan 1).
Ail-gyfeirio gyda header Δ
Mae'r dechneg hon yn sensitif iawn - mae'n rhaid ei rhoi cyn unrhyw allbwn HTML! Mae'r swyddogaeth header() yn gallu gwneud llawer o bethau - ond dim ond edrych ar ail-gyfeirio byddwn yn ei wneud fan hyn:
if($data == 'iawn'){
header(Location:"derbynneb.php");
}
Mae'r cod uchod yn ail-gyfeirio'r defnyddiwr i'r dudalen derbynneb.php, dim ond os ydy $data yn cynnwys y gwerth "iawn". Syml, hyfryd, defnyddiol.
E-bostio'n hawdd gyda mail Δ
Mae hwn dim ond yn gweithio arlein. Ni fydd yn gweithio o ffeiliau lleol.
Os ydych eisiau ffurflen adborth sydd yn anfon e-bost yn uniongyrchol i chi, gall hwn fod yn ddatrysiad da - er efallai nid yr un mwyaf diogel na soffistigedig. Dychmygwch fod ffurflen wedi cyrraedd gyda'r meysydd: 'testun', 'oddiwrth', 'cynnwys'.
$testun = $_POST['testun'];
$oddiwrth = $_POST['oddiwrth'];
$cynnwys = $_POST['cynnwys'];
$cynnwys = "Oddi wrth: {$oddiwrth} {$cynnwys}";
if(mail('yfi@wetwork.org.uk',$testun,$cynnwys)){
echo "Cafodd eich e-bost ei hanfon yn llwyddiannus!";
}else{
echo "Nid oedd modd anfon eich e-bost, ceisiwch eto!";
}
Mae'r uchod yn anfon data o ffurflen i yfi@wetwork.org.uk. Mae e-bost yr anfonnydd yn cael ei gynnwys yng nghorff y neges. Mae gwell ffyrdd na gwenud hyn, ond enghraifft syml yw hon wedi'r cyfan.