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.

🕑 12 daqiqa o‘qish 📄 932 so‘z 👁 1 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Nima o'rnatish kerak
  2. Uch xil ishga tushirish usuli
  3. Buyruq satrida
  4. Muhitni dasturdan tekshirish
  5. Kerakli kengaytmalar
  6. Xatolarni ko'rinadigan qilish
  7. Birinchi veb-sahifa
  8. Muharrir tanlash
  9. Xulosa

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 #

VariantKimga mosIchida nima bor
XAMPPBoshlovchilarPHP + Apache + MySQL + phpMyAdmin
LaragonWindows, yengilroqPHP + Nginx/Apache + MySQL
Faqat PHPTajribalilarFaqat interpretator
DockerJamoa ishiHammasi 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.

O'rnatish qadamlari
  1. apachefriends.org saytidan XAMPP ni yuklab oling.
  2. O'rnatishda kamida Apache, MySQL va PHP ni tanlang.
  3. XAMPP Control Panel da Apache va MySQL yonidagi Start ni bosing.
  4. Brauzerda http://localhost ni oching - XAMPP sahifasi chiqishi kerak.

Standart papkalar:

TizimSayt fayllari
WindowsC:\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 #

PHP ni qanday ishga tushirasiz 1. BUYRUQ SATRI php fayl.php • Veb-server kerak emas • Natija darhol terminalda • Skript va sinov uchun • $_POST, $_GET yo'q Bu darslikda shundan boshlaymiz 2. O'RNATILGAN SERVER php -S localhost:8000 • PHP bilan birga keladi • Sozlash umuman kerak emas • Formalar bilan ishlaydi • Bitta so'rov - bitta jarayon Ishlab chiqish uchun ideal 3. APACHE / NGINX htdocs/ ichiga qo'yish • Haqiqiy ishlab chiqarish • Ko'p so'rovni birga uddalaydi • .htaccess, HTTPS, keshlash • Sozlash talab qiladi Sayt chiqarilganda Muhim farq: sozlamalar har xil bo'lishi mumkin CLI va veb-server php.ini ning boshqa nusxasini o'qishi mumkin - buni tekshirib ko'ring. Bu darslikdagi misollar buyruq satrida ishga tushirilgan Shuning uchun ular HTML emas, oddiy matn chiqaradi - o'qish osonroq bo'lsin uchun.
Uchala usul ham bir xil PHP ni ishlatadi, farqi - atrofidagi muhitda

Buyruq satrida #

Terminalni oching va versiyani tekshiring:

Terminal
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:

Terminal
php -r "echo 2 + 2;"

Fayl ishga tushirish esa eng oddiy:

Terminal
php salom.php

Muhitni dasturdan tekshirish #

PHP
// Har bir misol qat'iy turlar rejimida ishlaydi.
PHP
// 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";
Natija
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 muhim

SAPI - Server API, ya'ni PHP qaysi muhitda ishlayotgani.

QiymatQayerda
cliBuyruq satri
cli-serverphp -S o'rnatilgan server
apache2handlerApache moduli
fpm-fcgiNginx + PHP-FPM

Bu qiymat ba'zan kerak bo'ladi. Masalan skript faqat buyruq satrida ishlashi kerak bo'lsa:

PHP
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 #

PHP
$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";
Natija
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
Kengaytma yo'q bo'lsa nima qilish kerak

php.ini faylini oching va kerakli qatordan ; belgisini olib tashlang:

KOD
;extension=pdo_mysql      ← o'chirilgan
extension=pdo_mysql       ← yoqilgan

php.ini qayerdaligini bilish uchun:

PHP
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.

PHP
// 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";
Natija
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.
Ishlab chiqarishda xatolarni hech qachon ko'rsatmang

PHP xato xabarida ko'pincha quyidagilar bo'ladi:

Xabarda nima chiqadiNima uchun xavfli
To'liq fayl yo'liServer tuzilishini ochib beradi
SQL so'rov matniJadval va ustun nomlarini beradi
Qator raqamiKodni taxmin qilishga yordam beradi
Parol o'zgaruvchisiTo'g'ridan-to'g'ri sizib chiqishi mumkin

Hujumchi uchun bu tayyor xarita.

To'g'ri sozlama:

SozlamaIshlab chiqishIshlab chiqarish
display_errorsOnOff
log_errorsOnOn
error_reportingE_ALLE_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
<?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:

Terminal
php -S localhost:8000

Brauzerda oching:

ManzilNatija
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 shaklQisqa 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 #

MuharrirAfzalligi
VS CodeBepul, PHP kengaytmalari ko'p
PhpStormEng kuchli, lekin pullik
Sublime TextJuda tez
Notepad++Yengil, Windows uchun

VS Code uchun foydali kengaytmalar:

KengaytmaNima qiladi
PHP IntelephenseAvtoto'ldirish va xatolarni ko'rsatish
PHP DebugXdebug bilan qadamba-qadam tuzatish
EditorConfigJamoada bir xil formatlash
Amaliy topshiriq
  1. XAMPP ni o'rnating va Apache ni ishga tushiring.
  2. Terminalda php -v ni bajarib versiyani ko'ring.
  3. php -r "echo 2 + 2;" ni sinab ko'ring.
  4. PHP_SAPI qiymatini buyruq satrida chop eting.
  5. Xuddi shu kodni brauzer orqali ochib, qiymat o'zgarganini ko'ring.
  6. extension_loaded("pdo") bilan kengaytmani tekshiring.
  7. php_ini_loaded_file() bilan php.ini qayerdaligini toping.
  8. htdocs ichida salom.php yarating va brauzerda oching.
  9. ?ism=Malika parametrini qo'shib natijani ko'ring.
  10. php -S localhost:8000 bilan o'rnatilgan serverni ishga tushiring.

Xulosa #

  • PHP ni ishga tushirishning uch yo'li bor: buyruq satri, php -S va Apache/Nginx.
  • Buyruq satri sinov uchun eng tez; unda $_GET va $_POST bo'lmaydi.
  • php -S localhost:8000 hech qanday sozlashsiz ishlaydigan server beradi.
  • PHP_SAPI PHP qaysi muhitda ishlayotganini aytadi - skriptlarni himoyalash uchun foydali.
  • CLI va veb-server php.ini ning boshqa nusxasini o'qishi mumkin.
  • php.ini ni o'zgartirgandan keyin serverni qayta ishga tushiring.
  • Ishlab chiqishda display_errors = On, ishlab chiqarishda Off.
  • 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.

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.