WETWORK

Corlan Adnoddau Arlein Cymraeg


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.

ewch i php.net

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.