Салыстыру қарапайым түрде ұйымдастырылады: "егер-онда-болмаса". Бұл үшін PHP-де келесі конструкция қолданылады:
if ( ) { } else { }
бұл оператордың түрлі синтаксисі бар, бірақ жоғарыда келтірілген синтаксис ең тиімді әрі дұрысм болып есептеледі. Мысал:
$a = 5;
$b = 9;
if ($a == $b) {echo $b - $a;} else {echo $b.$a;}
?>
Бағдарлама нәтижесі 95 - ті көрсетеді, себебі $a -ға $b тең емес, ал echo $b.$a; командасы айнымалыларды рет-рнетімен шығарады. Мұндағы нүкте айнымалыларды бір-бірімен жабыстыру үшін қолданылады.
Циклдер
Бағдарламалаудағы циклдер дегеніміз - бір операцияның бірнеше рет қайталануы. PHP-де циклдерді ұйымдастыру үшін келесі операторлар қолданылады: while, do…while, for және foreach. Циклге мысал ретінде бірнеше файлдарды көшіру қызметін көрсетуге болады. Оның алгоритмі төмендегідей болады:
файлдар санын беру
көшірілген файлдар есептегішінің мәнін нөлге қою
файлды көшіру
есептігіштің мәнін берілген файлдар санына теңдігін тексеру
егер тең болмаса, онда көшірілген файлдар есептегішінің мәнін арттыру және цикл басына
қайта келу
егер тең болса, онда циклды аяқтау
Циклдық әр қайталануы итерация деп аталады.
Енді PHP-де циклдерді ұйымдастыру мысалын қарастырайық:
$i = 0;
$n = 10;
while ($i <=$n):
echo $i. “
\n” ;
$i++;
endwhile;
?>
скрипттің мағынасы өте қарапайым. $i айнымалысына циклдың басындағы мәнді тағайындаймыз да, $n айнымалысына циклдың соңындағы мәнді тағайындаймыз. Ары қарай циклды while() операторы арқылы ашып, жақшаның ішіне берілетін шартты жазамыз. Ол шарт $i <=$n болғанша орындалады. Бұл цикл шарты бұлған заматта цикл аяқталады. еndwhile операторы циклдың аяқталғанын білдіреді. Скрипт, браузер экранына баған бойынша бірден онға дейінгі сандарды шығарады. Себебі echo операторының $i айнымалысынан кейін қатарды ауыстыратын
HTML-тегін қойдық.
Жоғарыдағы есепке тағы да басқа бір вариантын көрсетейік:
$i = 0;
while ($i<=10)
{
echo $i++. “
\n”;
}
?>
Бұл екі бағдарламаның нәтижесі бірдей болады.
Енді PHP-де do…while операторының құрылысын қарастырайық. Бұл да цикл болып саналады, оның while операторынан ерекшелігі “дейін” емес “кейін”, яғни цикл жұмысы оператордан кейін аяқталады. do...while циклі үшін тек бірақ синтаксис бар:
$i = 0;
do
{
echo $i. "
\n";
$i++;
}
while ($i <= 10);
?>
Енді for циклына мысал келтірейік, оның синтаксисі:
for (expr1; expr2; expr3) (операторлар тіізбегі)
(expr1) - өрнегі шартсыз болып есептелінеді және циклдың басында орындалады. Әр итерацияның басында (expr2) өрнегі орындалады. Егер ол ақиқат болса, онда цикл жалғасады да ішкі операторлар орындалады. Егер ол жалған болса, онда цикл аяқталады да әр итерацияның соңында (expr3) өрнегі орындалады. Бұл өрнектердің әрқайсысы бос болуы мүмкін. Егер (expr2) өрнегі бос болса, онда цикл шексіз орындалады. Шексіз орындалуды break операторы арқылы тоқтатуға болады. Мысалы:
$a = 0;
while ($a < 5)
{
if ($arr[$a] == "atop" )
{
break;
}
$a++;
}
?>
Егер continue операторы кездесетін болса, онда басқару келесі жақын циклге беріледі. Мысалы
while (list($key,$value)=each($arr))
{
if ($key 2)
{
continue;
}
}
Енді сандарды for операторы арқылы экранға шығару есебінің мүмкін жолдарын қарастырайық:
Мысал1:
for ($i = 1; $i <= 10; $i++)
{ print $i ; }
Мысал2:
for ($i = 1;; $i++)
{ if ($i >10)
{ break; }
print $i;
}
Мысал3:
$i = 1;
for (;;)
{ if ($i > 10) { break; }
print $i; $i++;
}
Уақытпенмерзім
PHP-де уақыт форматымен жұмыс істеу үшін көбінесе date функциясы қолданылады. Оның синтаксисі $date = date("параметр"); Параметрлер бірнеше болуы мүмкін және олар бір-бірінен үтір арқылы ажыратылады. Онда төмендегі параметрлерді қолдануға болады:
а - "am" немесе "pm" мәндерін қабылдайды;
А - "AM" немесе "PM";
d - ай күні, сандық, екі сан (бірінші орынға нөл қою керек), яғни 01-
i - минут, сандық, екі сан, яғни 00-ден 59-ға дейін;
j - ай күні, сандық, бастапқы нөлсіз;
l - апта күні, мәтіндік, мысалы: "Wednesday";
L-төрт жылда қайталанатын жылды көрсетеді, яғни "0" немесе "1";
m-ай, сандық, яғни "01"-ден "12"-ге дейін;
M-ай, мәтіндік, үш әріп, мысалы: "Feb";
n -ай, сандық, бір сан, яғни "1"-ден "12"-ге дейін;
О-Гринвич уақыты бойынша сағат аралығы, мысалы: "+0200";
s - секунд, сандық, екі сан, яғни 00-ден 59-ға дейін;
S- ағылшынша реттік жалғау, мәтіндік, екі символ, мысалы: "nd" және "th"
t - ағымдық айдағы күндер саны, яғни "28"-ден "31"-ге дейін;
U-Unix ғасырынан басталатын секунд, яғни 1970 жылдың 1 қаңтары;
Y-жыл, сандық, төрт сан;
w-апта күні, сандық, мысалы "0" саны жексенбіні білдіреді;
y -жыл, сандық, екі сан, мысалы: "99";
z -жыл күні, сандық, мысалы: "299";
Осы параметрлерді қолдану арқылы біз өзіміздің сайтымызда ағымдық уақытты пайдалана аламыз. Оның ішінде ең көп қолданылатыны ағымдық уақыт пен мерзімді шығару. Аптаны, айды, күнді шығару сайтта өте пайдалы болып есептеледі. Мысалы, сайтымызға кірушілерді тәулікке байланысты уақытпен қарсы алатын болсақ, онда бағдарлама коды төмендегідей болады:
$h = date("H")
if ($h >= 5 && $h <= 11) echo "Қайырлы таң !";
if ($h >= 12 && $h <= 18) echo "Саламатсызба !";
if ($h >= 19 && $h <= 24) echo "Қайырлы кеш !";
if ($h >= 1 && $h <= 4) echo "Қайырлы түн !";
?>
Бұл скриптте серверден date(“H”) функциясы арқылы ағымдық сағат уақытының мәнін аламызда, оған талдау жүргземз. Алынған мән қай аралықта орналасқанына байланысты сәйкес сөздерді экранға шығарамыз. Егер бағдарлама кодына назар аударатын болсақ, онда сағат белдеуінсіз және сәйкес уақыт аралығынсыз тек сервер уақыты ғана алынып тұрғанын көремз. Сондықтан уақыт аралығын бағдарламаға алдын-ала енгзуімізқажет. Оған мысал ретнде келес код бола алады:
$time = date(“H:i”);
$time1 = date(“H”);
$time2 = date(“i”);
$time_s = 7;
$time1 = $time1+ $time_s;
if ($time1 >= 24) { $time1 = $time1 – 24; }
$time = “$time1: $time2”;
Бірінші қатарда ағымдық уақытты алу сервердің сағат белдеуі бойынша іске асырылады. Ары қарай түрлі дұрыс уақыт белдеуі бойынша бағдарлама өзі есептейді. $time_s айнымалысындаөз уақыт аралығы сақталады.
Массивтер Массив дегеніміз – сандар немесе белгілерқатары және олардың басқа айнымалылар секілді өз аты мен мәндері болады. Бірақ одан да басқа олардың индекстері болады. PHP-де массив былайша өрнектеледі: $массив_аты[индекс]. Мысалы:
$a[0] = 1;
$a[1] = 12244;
$a[2]=0 “example”;
?>
Бұл мысалдың нәтижеснде $a массиві құрылып, оның 0,1 және 2 ұяшықтарына 1, 12244 және example мәндері тағайындалады. Енді echo $a[2] командасын берсек онда экранға example сөзі шығады.
Біз қарастырған массив бірөлшемді, одан басқа көп өлшемді массивтерде бар. Мысалы: $деканат[кафедра информатика] [кафедра автоматика];
Массив ұяшықтарымен кез-келген операциялар жасауға болады: арифметикалық, логикалық амалдар қолдану, салыстыру операциялары, арттыру, азайту және т.б.
PHP-дің басқа бағдарламалау тілдерінен ерекшелігі мұнда бүтіндей файлды массив ретінде алуға болады және бұл мүмкіншілік көптеген қызықты амалдар қолдануға жол ашады. Оның форматы:
$a = file(“файл_аты”);
?>
Бұл команданың нәтижесінде $a массивінде файл мазмұны болады.
Әр массивтің ағымдық элементі анықтайтын ішкі көрсеткіштері болады. Массивпен жұмыс басының кезінде ішкі массив көрсеткіші бірінші элементте орналасады. end(), next(), prev(), және reset() функциялары массивтің ішкі көрсеткішінің орнын ауыстырады.
end() функциясы массив ішкі көрсеткішін соңғы элементке орнатады. next() функциясы массив ішкі көрсеткішін бір элемент алға жылжытады. prev() функциясы массив ішкі көрсеткішін бір элемент артқа жылжытады. reset() функциясы массив ішкі көрсеткішін бірінші элементке орнатады. current() функциясы массив ішкі көрсеткіші тұрған массив элементін шығарады. sort() функциясы массивті өсу реті бойынша сұрыптайды. rsort() функциясы массивті кему реті бойынша сұрыптайды. Мұнан басқа PHP-де массивтермен жұмыс істеу үшін көптеген арнайы функция түрлері бар.
Қатарлармен жұмыс
Қатар дегеніміз – символдар тізбегі. Сондай-ақ сандарда әріптермен тең дәрежеде қатар ретінде теңесе алады. Қатар тек символдан немесе тіпті бос болуы мүмкін. Қатармен жұмыс әр уақытта оны енгізуден басталады. Ең қарапайымы қажет қатарды бір айнымалыға тағайындау. Оны жасаудың түрлері өте көп: файлдан оқу, массивтен немесе формадан таңдап алу, т.с.с. Бізге тек алынған қатармен не жұмыс жасауымыз керек, соны білсек оның жолы көп. Мысалы: Бірнеше қатарды жалғастыру қажет болсын:
$str = “сәлем”;
$sto = “хат”;
$qwer = “!”;
$mir = $str.” “.$sto;
echo $mir.$qwer;
?>
Скрипт жұмысының нәтижесінде бірнеше бөліктен құралған “сәлем хат!” сөзі экранға шығады. Қатарлармен арифметикалық амалдар қолдануға болмайды. Ол үшін айнымалыларды алдын-ала анықтап алу керек. Егер қатар файлдан оқылып немесе формадан оқылып жатса онда қатар өңделуге тиіс болады. Ол үшін алдымен орындалатын амал қайталанатын бос аралықтарды жою: chop(str);
Мысалы:
$str = chop($str);
нәтижеде $str қатарында қайталанатын бос аралықтар болмайды.
trim(str) функциясы қатардың басындағы және соңындағы бос аралықтарды жояды. Мысалы: $str = trim($str); ltrim(str) функциясы қатардың басындағы бос аралықтарды ғана жояды. Мысалы: $str =ltrim($str); ucfirst() функциясы қатардың басындағы символды бас әріп қылады. ucwords (str) функциясы қатардың ішіндегі барлық сөздің бірінші әрібін бас әріп қылады.
Кейде қатарларды бір шаблонмен салыстыру мәселесі жиі кездеседі. Соның ішінде қатардан іздеу болып табылады. Бірақ енгізілген қатар немесе файлдан алынған қатар дұрыс болмауы мүмкін, себебі, қатарда артық бос аралықтар сөздің арасында кездесуі мүмкін немесе кейбір әріптер бас әріппен (кіші әріппен) жазылуы мүмкін. Бұл мәселені шешу үшін strtolower (str) (қатарды кіші әріпке ауыстырады) және strtoupper (str); (қатарды үлкен әріпке ауыстырады) функциялары арқылы шешуге болады.
Қатарлармен жұмыс кезінде тағы да көп кездесетін қатарларды кесіп алу операциясы. Ол берілгенді енгізуде, форманы өңдегенде көп қолданылады. Формадағы енгізу ұяшығына енгізілетін қатар санын шектеу үшін форманың өзінде HTML код арқылы шектеу қою керек:
.
Бұл жерде формада енгізу ұяшығына тек 100 символ ғана сияды.
Бірақ бұл шектеу толыққанды емес, себебі оны айналып өту қиын емес. Сол үшін сайтқа кірушіге шектеу шегін көрсетіп қою керек. Мұндай айналып өтуді келесі жолдар арқылы іске асырады. Тура біздікіндей WEB бетін жасап 100 санын өзіне керек санға ауыстырады да өз компьютеріне HTML кеңейтілуімен сақтап оны өз компьютерінен жүктейді. Ал серверге ақпарат қайдан алынса да бәрібір болғандықтан мұндай ауыстыруды ол кәдімгідей қабылдайды да, алынған ақпаратты өңдейді. Мұндай жағдайды болдырмау үшін өңдеушіге енгізу амалы қай жерден жүріп жатқандығын және алынған ақпараттың өлшемін тексерту қажет. Ол үшін substring(string, start, length) PHP функциясын қолдану керек. Мысалы:
$form = substr($form, 0, 99);
Бұл арқылы біз 100 символдан асатын қатардың бір бөлігін ғана кесіп аламыз. Осылайша біздің сайтымызға кірушілер жалған ақпарат бере алмай қалады. Себебі біздің жазған скрипт кірушілерге ондай мүмкіндік бермейді.
substr функциясының қызметі start (бастапқы), length (ұзындығы) параметрлері арқылы string қатарының бөлігін береді. Егер start параметрі оң болса, онда шығатын қатар string қатарының start позициясында тұрған символдан басталады.
Мысалы:
$form = substr(“abcdef”, 1); // нәтижесі “bcdef”
$form = substr(“abcdef”, 1, 3); // нәтижесі “bcd”
Егер start параметрі теріс болса, онда шығатын қатар string қатарының start позициясының соңында тұрған символдан басталады.
Мысалы:
$rest = substr(“abcdef”, -1); // нәтижесі “f”
$rest = substr(“abcdef”, -2); // нәтижесі “ef”
$rest = substr(“abcdef”, -3, 1); // нәтижесі “d”
Егер length параметрі көрсетіліп және оң болса, онда шығатын қатар start – тан басталып, length символынан кейін аяқталады.
Мысалы:
$rest = substr(“abcdef”, -1, -1); // нәтижесі “bcde”
Бұдан басқа форманы өңдеуде қатарлардан керек немесе артық жерді кесіп алу қажеттілігі туады, ол үшін арнайы функция бар:
str_replace(needle, str, haystack) ;
Мысалы:
$str = str_replace(“”, “\n”, $str); // енгізілген символ кесіп алынады
$str = str_replace(“red”, “black”, $str); // red сөзінің орнына black сөзі орналасады
Егер ауыстыруда айрықша ережелер қолданылу керек болса, онда ereg_replace() функциясын қолдануға болады, бірақ бұл функция жақсы жұмыс істегенімен біраз уақыттың жоғалуына әкеліп соғады.
4 PHP тілінде құрылған бағдарлама мысалдары
4.1 Файлдарды құжаттарға салу
Интернет желісіне бір сайт істеген адам әйтеуір бір уақытта ішіндегі ақпаратты өзгертуі қажет болады. Әрине, егер сайт бірнеше беттен тұрса оны жасау қиын емес, егер сайт өте үлкен болса, онда кішкене өзгертуді жүздеген бетке жасау қиын тірлік болады. Бірақта ешқандай қорқудың қажеті жоқ, себебі PHP бұл мәселенің шешілу жолын қарастырып қойған, бір бетті екіншісіне салып қою мүмкіндігі. Бұл операция include() және require() операторлары арқылы жүзеге асырылады. Бұл операторлардан кейін жақшаның ішінде салынатын файлдың жолы тұру керек. Мысалы: include(“text.phtml”). Көрсетілген екі оператордың бір-бірінен ерекшелігі require() операторы көрсетілген файлдың мазмұнымен алмастырылып тек бір-ақ рет қолданылады, ал include() операторы көрсетілген файлдың мазмұнымен алмастырылып, мысалы циклдің ішінде бірнеше рет қолданылуы мүмкін.
Сілтеме келесі түрде болады:
http://аты/index.php?razdel=1
сілтеменің соңындағы бірлік index.phtml файлындағы бізідің параметр болып табылады. Мысалы: менің құрып жатқан WEB сайт бетінде мұндай файл Center.php ішінде кездеседі.
Егер if ($razdel == “”) {$url = “error.inc.php”;} кодына назар аударсақ бұл код сайтқа кірушінің түрлі себептермен қате параметр көрсеткен жағдайды қарастырады. Бұл жағдайда алдын-ала дайындалған қате туралы - error.phtml беті шығады. Егер параметр сайттың басқа файлына сәйкес болса, онда ол оны index.phtml кодына салып орындайды.
Осылайша кодтың басы мен аяғы бірдей болып тек ортасы ғана өзгереді. Және де глобальды өзгертулер оншалықты қиыншылық тудырмайды. Оны тек бір файлда ғана құрып істесек, ол барлық сайтта көрінетін болады. Егер одан да оңай жолын қарастыратын болсақ, онда:
Сайтқа кірушілердің санын есептейтін қарапайым есептегіш
Біздің сайтқа кірушілердің санын есептейтін қарапайым есептегіш жасаудың жолын қарастырып көрейік. Web – бетінің кез-келген керек жеріне келесі кодты жазамыз:
Сайтқа кірушілер
$filename = “counter.dat”;
$fp = @fopen($filename, “r”);
if ($fp)
{
$counter = fgets($fp,10);
fclose($fp);
}
else
{
$counter = 0;
}
$counter++;
echo $counter;
$fp = @fopen($filename, “w”);
if ($fp)
{
$counter = fputs($fp,$counter);
fclose($fp);
}
?>
Осы скрипт жұмыс істейтін бума ішіне counter.dat файлын құрып, оны серверге көшіріп оған жазу мүмкіндігін бермейтін атрибутты орнату керек. Енді жазған скриптімізге қатар бойынша анықтама берейік:
HTML-тегі арқылы “Сайтқа кірушілер” жазуын экранға шығарамыз.
7. Егер дұрыс болса, онда ашылған файлдан бірінші 10 символды $counter айнымалысына беріп оқимыз.
8. байланысты жабамыз
9. егер байланыс ашылмаса, онда есептегіш айнымалы мәнін 0-ге тағайындаймыз
14. есептегіш мәнін 1-ге арттырамыз
15. есептегіш мәнін экранға шығарамыз
16. байланысты жазу үшін файлдың ішін тазалаймыз
17-19. егер барлығы дұрыс болса, онда есептегіш айнымалы мәнін файлға жазамыз.
4.2 Формаларды өңдеу және почтаны жіберу
Әр кезде сайтқа кіргенде түрлі формалармен енгізу ұяшықтарына тап боламыз. Формадағы берілгендер қалайша өңделеді деген сұраққа PHP арқылы деп жауап береміз.
Ең бірінші алдымен кез-келген адреске хат жіберетін форма құрайық:
Бұл HTML кодты браузермен жүктегенде біз үш енгізу ұяшығы бар форманы көреміз.“Send” батырмасын басқаннан кейінгі өңдеу операциясы action.phtml файлына беріледі. “email” атты бірінші ұяшыққа, сайтқа кіруші хат жіберілетін адресті енгізеді. “name” атты екінші ұяшыққа сайтқа кіруші өз аты-жөнін енгізеді. Келесі “txt” атты енгізу ұяшығы хат жазу үшін арналған. Енді ең негізгі бөлікке өтеттін болсақ, ол action.phtml файлындағы форма өңдеушісін құру. Форманы өңдеудің PHP коды:
Көріп отырғанымыздай формадағы енгізу ұяшықтарына тағайындаған аттарымыз сол күйінше айнымалы ретінде PHP сриптіне өтіп кетті. Бұл айнымалылардың PHP-дегі мәндері енгізетін ұяшыққа сәйкес болады. Адрес $email айнымалысында, аты-жөні $name айнымалысында , мәтін $txt айнымалысында болады. PHP-де поштамен хат жіберудің амалдары өте көп, соның біреуін қарастырайық, ол mail функциясы. Оның синтаксисі:
mail( $mail, “хат енгізілді”,$str, “From: хат” );
Мысалыға, кейбір мақалаларға кірушілер жөнінде талдау жасау үшін сайттың бірнеше бетін бақылайтын жүйені қарастырайық. Ол үшін бізге сайтқа кіруші жөнінде ақпарат қажет болады, ол PHP-де автоматты түрде мүмкін. Бұл ақпаратты біз өзіміздің пошталық жәшігімізге жіберіп отырамыз:
HTML қабықшасы– беттiң тақырыбы (HEAD) және негiзгi дескрипторлардан тұратын денесi (BODY) орналасқан қарапайым дескриптор. Тақырыбы және денесi бар HTML дескриптордың жазылу үлгiсi: