2-bo‘lim
Muhitni sozlash va ishga tushirish
PHP ni o'rnatish, uni buyruq satri va veb-server orqali ishga tushirish, xatolarni ko'rinadigan qilish.
Ushbu bo‘lim mundarijasi
PHP ni ishga tushirishning uch yo'li bor va ular bir-biridan sezilarli farq qiladi. Bu bo'limda uchalasini ham sozlaymiz.
Nima o'rnatish kerak #
| Variant | Kimga mos | Ichida nima bor |
|---|---|---|
| XAMPP | Boshlovchilar | PHP + Apache + MySQL + phpMyAdmin |
| Laragon | Windows, yengilroq | PHP + Nginx/Apache + MySQL |
| Faqat PHP | Tajribalilar | Faqat interpretator |
| Docker | Jamoa ishi | Hammasi konteynerda |
Ushbu darslik uchun XAMPP yetarli: u bitta o'rnatishda PHP ni ham, veb-serverni ham, ma'lumotlar bazasini ham beradi. 16-bo'limda bazaga murojaat qilganimizda u kerak bo'ladi.
apachefriends.orgsaytidan XAMPP ni yuklab oling.- O'rnatishda kamida Apache, MySQL va PHP ni tanlang.
- XAMPP Control Panel da
ApachevaMySQLyonidagi Start ni bosing. - Brauzerda
http://localhostni oching - XAMPP sahifasi chiqishi kerak.
Standart papkalar:
| Tizim | Sayt fayllari |
|---|---|
| Windows | C:\xampp\htdocs\ |
| macOS | /Applications/XAMPP/htdocs/ |
| Linux | /opt/lampp/htdocs/ |
htdocs ichiga qo'ygan salom.php fayli brauzerda
http://localhost/salom.php manzilida ochiladi.
Uch xil ishga tushirish usuli #
Buyruq satrida #
Terminalni oching va versiyani tekshiring:
php -v
Agar php buyrug'i topilmasa, XAMPP ning PHP papkasini
PATH ga qo'shish kerak (Windows da odatda C:\xampp\php).
Bitta qatorni ishga tushirish uchun -r bayrog'i bor:
php -r "echo 2 + 2;"
Fayl ishga tushirish esa eng oddiy:
php salom.php
Muhitni dasturdan tekshirish #
// Har bir misol qat'iy turlar rejimida ishlaydi.
// Versiya - uch xil ko'rinishda
echo "Katta va kichik versiya: " . PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";
echo "Faqat katta raqam: " . PHP_MAJOR_VERSION . "\n";
// Versiyani solishtirish - shart uchun to'g'ri usul
$yetarli = version_compare(PHP_VERSION, "8.0", ">=");
echo "PHP 8.0 dan yangimi: " . ($yetarli ? "ha" : "yo'q") . "\n";
echo "\n";
echo "Qayerda ishlayapmiz: " . PHP_SAPI . "\n";
echo "Operatsion tizim oilasi: " . PHP_OS_FAMILY . "\n";
echo "Butun son necha bayt: " . PHP_INT_SIZE . "\n";
echo "Eng katta butun son: " . PHP_INT_MAX . "\n";
Katta va kichik versiya: 8.2
Faqat katta raqam: 8
PHP 8.0 dan yangimi: ha
Qayerda ishlayapmiz: cli
Operatsion tizim oilasi: Windows
Butun son necha bayt: 8
Eng katta butun son: 9223372036854775807
PHP_SAPI nima uchun muhimSAPI - Server API, ya'ni PHP qaysi muhitda ishlayotgani.
| Qiymat | Qayerda |
|---|---|
cli | Buyruq satri |
cli-server | php -S o'rnatilgan server |
apache2handler | Apache moduli |
fpm-fcgi | Nginx + PHP-FPM |
Bu qiymat ba'zan kerak bo'ladi. Masalan skript faqat buyruq satrida ishlashi kerak bo'lsa:
if (PHP_SAPI !== "cli") {
exit("Bu skript faqat terminalda ishlaydi.");
}
Zaxira nusxa oladigan yoki bazani tozalaydigan skriptlarni shu tarzda himoyalash keng tarqalgan amaliyot - aks holda kimdir uni brauzerdan ochib yuborishi mumkin.
Kerakli kengaytmalar #
$kerakli = ["pdo", "pdo_mysql", "mbstring", "json", "openssl", "curl"];
echo "KENGAYTMA HOLAT\n";
echo str_repeat("-", 28) . "\n";
$yetishmaydi = [];
foreach ($kerakli as $nom) {
$bor = extension_loaded($nom);
printf("%-16s %s\n", $nom, $bor ? "bor" : "YO'Q");
if (!$bor) {
$yetishmaydi[] = $nom;
}
}
echo "\n";
echo "Jami yuklangan kengaytmalar: " . (count(get_loaded_extensions()) > 20 ? "20 dan ko'p" : "kam") . "\n";
echo "Yetishmaydigani: " . (count($yetishmaydi) === 0 ? "yo'q" : implode(", ", $yetishmaydi)) . "\n";
KENGAYTMA HOLAT
----------------------------
pdo bor
pdo_mysql bor
mbstring bor
json bor
openssl bor
curl bor
Jami yuklangan kengaytmalar: 20 dan ko'p
Yetishmaydigani: yo'q
php.ini faylini oching va kerakli qatordan ; belgisini
olib tashlang:
;extension=pdo_mysql ← o'chirilgan
extension=pdo_mysql ← yoqilgan
php.ini qayerdaligini bilish uchun:
echo php_ini_loaded_file();
O'zgartirgandan keyin Apache ni qayta ishga tushiring - aks holda eski sozlama kuchda qoladi.
Eng ko'p uchraydigan chalkashlik shu yerda: dasturchi
php.ini ni tahrirlaydi, lekin serverni qayta ishga
tushirmaydi va "ishlamayapti" deb o'ylaydi.
Xatolarni ko'rinadigan qilish #
Bu - yangi muhitda birinchi qilinadigan ish.
// Ishlab chiqish mashinasida: hamma narsani ko'rsatish
error_reporting(E_ALL);
ini_set("display_errors", "1");
echo "display_errors: " . ini_get("display_errors") . "\n";
echo "error_reporting E_ALL ga tengmi: "
. (error_reporting() === E_ALL ? "ha" : "yo'q") . "\n";
echo "\n";
// Endi xato ko'rinadi - ogohlantirishni ataylab keltiramiz
$massiv = ["a" => 1];
$qiymat = $massiv["b"] ?? "standart";
echo "Mavjud bo'lmagan kalit xavfsiz olindi: {$qiymat}\n";
echo "\n";
echo "Ishlab chiqarishda (haqiqiy saytda) esa teskari:\n";
echo " display_errors = Off\n";
echo " log_errors = On\n";
echo "Xato foydalanuvchiga emas, JURNALGA yozilishi kerak.\n";
display_errors: 1
error_reporting E_ALL ga tengmi: ha
Mavjud bo'lmagan kalit xavfsiz olindi: standart
Ishlab chiqarishda (haqiqiy saytda) esa teskari:
display_errors = Off
log_errors = On
Xato foydalanuvchiga emas, JURNALGA yozilishi kerak.
PHP xato xabarida ko'pincha quyidagilar bo'ladi:
| Xabarda nima chiqadi | Nima uchun xavfli |
|---|---|
| To'liq fayl yo'li | Server tuzilishini ochib beradi |
| SQL so'rov matni | Jadval va ustun nomlarini beradi |
| Qator raqami | Kodni taxmin qilishga yordam beradi |
| Parol o'zgaruvchisi | To'g'ridan-to'g'ri sizib chiqishi mumkin |
Hujumchi uchun bu tayyor xarita.
To'g'ri sozlama:
| Sozlama | Ishlab chiqish | Ishlab chiqarish |
|---|---|---|
display_errors | On | Off |
log_errors | On | On |
error_reporting | E_ALL | E_ALL |
Ya'ni xatolarni yozib boring, lekin ko'rsatmang. Foydalanuvchi "Xatolik yuz berdi" degan umumiy xabarni ko'rsin, tafsilot esa jurnalga tushsin.
15-bo'limda xatolarni to'g'ri boshqarishni o'rganamiz.
Birinchi veb-sahifa #
Quyidagi faylni htdocs/salom.php sifatida saqlang:
<?php
declare(strict_types=1);
$ism = $_GET["ism"] ?? "mehmon";
$ism = htmlspecialchars($ism, ENT_QUOTES, "UTF-8");
?>
<!DOCTYPE html>
<html lang="uz">
<head>
<meta charset="UTF-8">
<title>Birinchi PHP sahifam</title>
</head>
<body>
<h1>Assalomu alaykum, <?= $ism ?>!</h1>
<p>Bu sahifa serverda yaratildi.</p>
</body>
</html>
Endi terminalda htdocs papkasiga o'ting va yozing:
php -S localhost:8000
Brauzerda oching:
| Manzil | Natija |
|---|---|
http://localhost:8000/salom.php | "Assalomu alaykum, mehmon!" |
http://localhost:8000/salom.php?ism=Malika | "Assalomu alaykum, Malika!" |
<?= nima degani<?= $ism ?> - bu <?php echo $ism; ?> ning qisqa shakli.
U faqat chiqarish uchun ishlatiladi va HTML ichida juda qulay:
| Uzun shakl | Qisqa shakl |
|---|---|
<?php echo $narx; ?> | <?= $narx ?> |
Ikki muhim qoida:
1. Fayl faqat PHP dan iborat bo'lsa, oxiriga ?>
qo'ymang. Undan keyingi bo'sh qator yoki probel
brauzerga yuboriladi va header() chaqiruvlarini buzadi.
2. htmlspecialchars ni unutmang. Yuqoridagi kodda u
bejiz turmagan: usiz kimdir ?ism=<script>... deb yozib,
sahifangizga o'z kodini kiritishi mumkin. Bu XSS hujumi
va biz uni 17-bo'limda batafsil ko'ramiz.
Muharrir tanlash #
| Muharrir | Afzalligi |
|---|---|
| VS Code | Bepul, PHP kengaytmalari ko'p |
| PhpStorm | Eng kuchli, lekin pullik |
| Sublime Text | Juda tez |
| Notepad++ | Yengil, Windows uchun |
VS Code uchun foydali kengaytmalar:
| Kengaytma | Nima qiladi |
|---|---|
| PHP Intelephense | Avtoto'ldirish va xatolarni ko'rsatish |
| PHP Debug | Xdebug bilan qadamba-qadam tuzatish |
| EditorConfig | Jamoada bir xil formatlash |
- XAMPP ni o'rnating va Apache ni ishga tushiring.
- Terminalda
php -vni bajarib versiyani ko'ring. php -r "echo 2 + 2;"ni sinab ko'ring.PHP_SAPIqiymatini buyruq satrida chop eting.- Xuddi shu kodni brauzer orqali ochib, qiymat o'zgarganini ko'ring.
extension_loaded("pdo")bilan kengaytmani tekshiring.php_ini_loaded_file()bilanphp.iniqayerdaligini toping.htdocsichidasalom.phpyarating va brauzerda oching.?ism=Malikaparametrini qo'shib natijani ko'ring.php -S localhost:8000bilan o'rnatilgan serverni ishga tushiring.
Xulosa #
- PHP ni ishga tushirishning uch yo'li bor: buyruq satri,
php -Sva Apache/Nginx. - Buyruq satri sinov uchun eng tez; unda
$_GETva$_POSTbo'lmaydi. php -S localhost:8000hech qanday sozlashsiz ishlaydigan server beradi.PHP_SAPIPHP qaysi muhitda ishlayotganini aytadi - skriptlarni himoyalash uchun foydali.- CLI va veb-server
php.inining boshqa nusxasini o'qishi mumkin. php.inini o'zgartirgandan keyin serverni qayta ishga tushiring.- Ishlab chiqishda
display_errors = On, ishlab chiqarishdaOff. - Xato xabarlari fayl yo'li va SQL so'rovlarini ochib beradi - ularni jurnalga yozing.
<?= $x ?>-<?php echo $x; ?>ning qisqa shakli.- Faqat PHP dan iborat fayl oxiriga
?>qo'ymang.
Keyingi bo'limda o'zgaruvchilar, ma'lumot turlari va qat'iy turlar rejimini batafsil ko'ramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.