> For the complete documentation index, see [llms.txt](https://otabek-ismoilov.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://otabek-ismoilov.gitbook.io/blog/server-sozlamalari/ubuntu-20.04-da-linux-apache-mysql-php-lamp-stekini-qanday-ornatish-kerak.md).

# Ubuntu 20.04 da Linux, Apache, MySQL, PHP (LAMP) stekini qanday o'rnatish kerak

#### Kirish <a href="#introduction" id="introduction"></a>

"LAMP" stek - bu serverga PHP-da yozilgan dinamik veb-saytlar va veb-ilovalarni joylashtirish imkonini berish uchun odatda birgalikda o'rnatiladigan ochiq kodli dasturiy ta'minot guruhi. **Bu atama A** pache veb-serverli **L** inux operatsion tizimini ifodalovchi qisqartma hisoblanadi . **Sayt ma'lumotlari M** ySQL ma'lumotlar bazasida saqlanadi va dinamik tarkib **P** HP tomonidan qayta ishlanadi .

Ushbu qo'llanmada siz Ubuntu 20.04 serverida LAMP to'plamini o'rnatasiz.

### 1-qadam - Apache-ni o'rnatish va xavfsizlik devorini yangilash <a href="#step-1-installing-apache-and-updating-the-firewall" id="step-1-installing-apache-and-updating-the-firewall"></a>

Apache veb-serveri dunyodagi eng mashhur veb-serverlardan biridir. U yaxshi hujjatlashtirilgan, faol foydalanuvchilar hamjamiyatiga ega va Internet tarixining ko'p qismida keng qo'llanilgan, bu esa uni veb-saytni joylashtirish uchun ajoyib tanlov qiladi.

Paket menejeri keshini yangilash bilan boshlang. Agar siz `sudo`ushbu seansda birinchi marta foydalanayotgan bo'lsangiz, tizim paketlarini boshqarish uchun to'g'ri imtiyozlarga ega ekanligingizni tasdiqlash uchun sizdan foydalanuvchi parolini kiritish so'raladi `apt`.

```bash
$ sudo apt update
```

Keyin Apache-ni quyidagi bilan o'rnating:

```bash
$ sudo apt install apache2
```

Shuningdek, sizdan Apache-ning o'rnatilishini tasdiqlash so'raladi `Y`, so'ngra tugmasini bosing `ENTER`.

Oʻrnatish tugallangandan soʻng HTTP trafigiga ruxsat berish uchun xavfsizlik devori sozlamalarini oʻzgartirishingiz kerak boʻladi. UFWda turli xil dastur profillari mavjud bo'lib, siz buni amalga oshirish uchun foydalanishingiz mumkin. Hozirda mavjud bo'lgan barcha UFW ilovasi profillarini ro'yxatga olish uchun siz quyidagilarni bajarishingiz mumkin:

```bash
$ sudo ufw app list
```

Siz shunday chiqishni ko'rasiz:

> ```
> OutputAvailable applications:
>   Apache
>   Apache Full
>   Apache Secure
>   OpenSSH
> ```

Bu profillarning har biri nimani anglatadi:

* **Apache** : Bu profil faqat portni ochadi `80`(oddiy, shifrlanmagan veb-trafik).
* **Apache Full** : Bu profil 80-portni (oddiy, shifrlanmagan veb-trafik) va 443-portni (TLS/SSL shifrlangan trafik) ochadi.
* **Apache Secure** : Bu profil faqat portni ochadi `443`(TLS/SSL shifrlangan trafik).

Hozircha faqat port orqali ulanishga ruxsat bergan ma'qul `80`, chunki bu yangi Apache o'rnatilishi va sizda hali ham serveringizda HTTPS trafigiga ruxsat berish uchun sozlangan TLS/SSL sertifikati yo'q.

Faqat portdagi trafikka ruxsat berish `80`uchun `Apache`profildan foydalaning:

```bash
sudo ufw allow in "Apache"
```

O'zgartirishni quyidagi bilan tasdiqlashingiz mumkin:

```bash
$ sudo ufw status
```

> ```
> OutputStatus: active
>
> To                         Action      From
> --                         ------      ----
> OpenSSH                    ALLOW       Anywhere                                
> Apache                     ALLOW       Anywhere                  
> OpenSSH (v6)               ALLOW       Anywhere (v6)                    
> Apache (v6)                ALLOW       Anywhere (v6)     
> ```
>
> <br>

Portdagi trafik `80`endi xavfsizlik devori orqali ruxsat etiladi.

Veb-brauzeringizdagi serveringizning umumiy IP-manziliga tashrif buyurib, hamma narsa rejalashtirilganidek ketayotganini tekshirish uchun darhol joyni tekshirishingiz mumkin (agar sizda bu ma'lumot bo'lmasa, umumiy IP manzilingiz nima ekanligini bilish uchun keyingi sarlavha ostidagi eslatmaga qarang. allaqachon):

```http
http://your_server_ip
```

Siz standart Ubuntu 20.04 Apache veb-sahifasini ko'rasiz, u ma'lumot va sinov maqsadlarida mavjud. Bu shunday ko'rinishi kerak:

<figure><img src="/files/RQzFUYvESqCxtAnY64Se" alt=""><figcaption></figcaption></figure>

Agar siz ushbu sahifani ko'rsangiz, veb-serveringiz to'g'ri o'rnatilgan va xavfsizlik devori orqali kirish mumkin.

#### Serveringizning umumiy IP manzilini qanday topish mumkin <a href="#how-to-find-your-server-s-public-ip-address" id="how-to-find-your-server-s-public-ip-address"></a>

Agar serveringizning umumiy IP manzili nima ekanligini bilmasangiz, uni topishning bir qancha usullari mavjud. Odatda, bu SSH orqali serveringizga ulanish uchun foydalanadigan manzildir.

Buni buyruq satridan qilishning bir necha xil usullari mavjud. Birinchidan, siz `iproute2`IP manzilingizni olish uchun quyidagi vositalardan foydalanishingiz mumkin:

<pre class="language-bash"><code class="lang-bash"><strong>$ ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
</strong></code></pre>

Bu sizga ikki yoki uch qatorni qaytarib beradi. Ularning barchasi to'g'ri manzillar, lekin sizning kompyuteringiz ulardan faqat bittasini ishlatishi mumkin, shuning uchun har birini sinab ko'ring.

Muqobil usul bu `curl`yordam dasturidan tashqi tomon bilan bog'lanish uchun serveringizni qanday ko'rishini aytib *berishdir .* Bu ma'lum bir serverdan sizning IP manzilingizni so'rash orqali amalga oshiriladi:

```bash
$ curl http://icanhazip.com
```

IP manzilingizni olish uchun qanday usuldan qat'i nazar, standart Apache sahifasini ko'rish uchun uni veb-brauzeringizning manzil satriga kiriting.

### 2-qadam - MySQL-ni o'rnatish <a href="#step-2-installing-mysql" id="step-2-installing-mysql"></a>

Endi veb-serveringiz ishlayotgan bo'lsa, saytingiz uchun ma'lumotlarni saqlash va boshqarish imkoniyatiga ega bo'lish uchun ma'lumotlar bazasi tizimini o'rnatishingiz kerak. MySQL - bu PHP muhitida ishlatiladigan mashhur ma'lumotlar bazasini boshqarish tizimi.

Shunga qaramay, `apt`ushbu dasturni sotib olish va o'rnatish uchun foydalaning:

```bash
$ sudo apt install mysql-server
```

So'ralganda, yozish orqali o'rnatishni tasdiqlang `Y`va keyin `ENTER`.

O'rnatish tugagach, MySQL bilan oldindan o'rnatilgan xavfsizlik skriptini ishga tushirish tavsiya etiladi. Ushbu skript ba'zi xavfli standart sozlamalarni olib tashlaydi va ma'lumotlar bazasi tizimiga kirishni bloklaydi. Interaktiv skriptni ishga tushirish orqali boshlang:

```bash
$ sudo mysql_secure_installation
```

ni sozlashni xohlaysizmi, deb so'raydi `VALIDATE PASSWORD PLUGIN`.

{% hint style="info" %}
**Eslatma:** Ushbu xususiyatni yoqish - bu qaror qabul qilishdir. Agar yoqilgan bo'lsa, belgilangan mezonlarga mos kelmaydigan parollar MySQL tomonidan xatolik bilan rad etiladi. Tasdiqlashni o'chirib qo'yish xavfsiz, lekin ma'lumotlar bazasi hisob ma'lumotlari uchun har doim kuchli, noyob parollardan foydalanishingiz kerak.
{% endhint %}

Yoqmasdan `Y`davom etish uchun “Ha” yoki boshqa biror narsa deb javob bering.

> ```
> VALIDATE PASSWORD PLUGIN can be used to test passwords
> and improve security. It checks the strength of password
> and allows the users to set only those passwords which are
> secure enough. Would you like to setup VALIDATE PASSWORD plugin?
>
> Press y|Y for Yes, any other key for No:
> ```

Agar “ha” deb javob bersangiz, sizdan parolni tekshirish darajasini tanlashingiz soʻraladi. Shuni yodda tutingki, agar siz `2`eng kuchli darajaga kirsangiz, raqamlar, katta va kichik harflar va maxsus belgilardan iborat bo'lmagan yoki umumiy lug'at so'zlariga asoslangan har qanday parolni o'rnatishga urinishda xatoliklarga duch kelasiz

> ```
> There are three levels of password validation policy:
>
> LOW    Length >= 8
> MEDIUM Length >= 8, numeric, mixed case, and special characters
> STRONG Length >= 8, numeric, mixed case, special characters and dictionary              file
>
> Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
> ```

ni o'rnatishni tanlaganingizdan qat'i nazar, `VALIDATE PASSWORD PLUGIN`serveringiz sizdan MySQL **root** foydalanuvchisi uchun parolni tanlash va tasdiqlashingizni so'raydi. **Buni tizim root** bilan aralashtirib yubormaslik kerak . Ma'lumotlar **bazasining root** foydalanuvchisi ma'lumotlar bazasi tizimiga nisbatan to'liq imtiyozlarga ega bo'lgan ma'muriy foydalanuvchi. MySQL ildiz foydalanuvchisi uchun standart autentifikatsiya usuli paroldan foydalanishga ruxsat bersa ham, parol **o'rnatilgan bo'lsa ham** , qo'shimcha xavfsizlik chorasi sifatida bu yerda kuchli parolni belgilashingiz kerak. Bu haqda birozdan keyin gaplashamiz.

Agar siz parolni tekshirishni yoqsangiz, siz kiritgan asosiy parol uchun parol kuchi ko'rsatiladi va serveringiz ushbu parol bilan davom etishni xohlaysizmi, deb so'raydi. Agar joriy parolingizdan mamnun bo'lsangiz, so'rovda `Y`"ha" deb kiriting:

> ```
> Estimated strength of the password: 100 
> Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
> ```

Qolgan savollar uchun har bir taklifda tugmachani bosing `Y`va `ENTER`bosing. Bu ba'zi anonim foydalanuvchilar va test ma'lumotlar bazasini o'chiradi, masofaviy root loginlarini o'chiradi va MySQL siz kiritgan o'zgarishlarni darhol hurmat qilishi uchun ushbu yangi qoidalarni yuklaydi.

Tugatganingizdan so'ng, MySQL konsoliga kirish imkoningiz bor-yo'qligini tekshirib ko'ring:

```bash
$ sudo mysql
```

Bu MySQL serveriga ma'muriy ma'lumotlar bazasi foydalanuvchi **root**`sudo` sifatida ulanadi, bu buyruqni ishga tushirishda foydalanish natijasida paydo bo'ladi. Siz shunday chiqishni ko'rishingiz kerak:

> ```
> OutputWelcome to the MySQL monitor.  Commands end with ; or \g.
> Your MySQL connection id is 22
> Server version: 8.0.19-0ubuntu5 (Ubuntu)
>
> Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
>
> Oracle is a registered trademark of Oracle Corporation and/or its
> affiliates. Other names may be trademarks of their respective
> owners.
>
> Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
>
> mysql> 
> ```

MySQL konsolidan chiqish uchun quyidagilarni kiriting:

```sql
mysql> exit
```

E'tibor bering, skriptni ishga tushirishda parolni belgilagan bo'lsangiz ham , **root** foydalanuvchisi sifatida ulanish uchun parol kiritishingiz shart emas edi . `mysql_secure_installation`Buning sababi, ma'muriy MySQL foydalanuvchisi uchun standart autentifikatsiya usuli `unix_socket`o'rniga `password`. Avvaliga bu xavfsizlik muammosidek tuyulishi mumkin bo'lsa-da, bu ma'lumotlar bazasi serverini yanada xavfsizroq qiladi, chunki MySQL-ning **root** foydalanuvchisi sifatida tizimga kirishga ruxsat berilgan yagona foydalanuvchilar sudo imtiyozlariga ega bo'lgan tizim foydalanuvchilari konsoldan yoki dastur bilan ishlaydigan dastur orqali ulanadi. bir xil imtiyozlar. Amaliy ma'noda, bu sizning PHP ilovangizdan ulanish uchun ma'muriy ma'lumotlar bazasi **root foydalanuvchisidan foydalana olmaysiz. root** uchun parol o'rnatishMySQL hisob qaydnomasi, agar standart autentifikatsiya usuli dan `unix_socket`ga o'zgartirilgan bo'lsa, himoya vositasi sifatida ishlaydi `password`.

Xavfsizlikni oshirish uchun har bir ma'lumotlar bazasi uchun kamroq keng imtiyozlarga ega maxsus foydalanuvchi hisoblariga ega bo'lish yaxshiroqdir, ayniqsa siz serveringizda bir nechta ma'lumotlar bazalariga ega bo'lishni rejalashtirmoqchi bo'lsangiz.

{% hint style="info" %}
**Eslatma:** Ushbu yozish vaqtida mahalliy MySQL PHP kutubxonasi MySQL 8 uchun standart autentifikatsiya usulini `mysqlnd` [qo'llab-quvvatlamaydi](https://www.php.net/manual/en/ref.pdo-mysql.php) `caching_sha2_authentication` . Shu sababli, MySQL 8 da PHP ilovalari uchun ma'lumotlar bazasi foydalanuvchilarini yaratishda siz ularning mavjudligiga ishonch hosil qilishingiz kerak. `mysql_native_password`o'rniga foydalanish uchun tuzilgan . Buni qanday qilishni 6-bosqichda  ko'rsatamiz .
{% endhint %}

Sizning MySQL serveringiz endi o'rnatilgan va himoyalangan. Keyinchalik, LAMP stekidagi yakuniy komponent bo'lgan PHP ni o'rnatamiz.

### 3-qadam - PHP o'rnatish <a href="#step-3-installing-php" id="step-3-installing-php"></a>

Sizda kontentingizga xizmat ko'rsatish uchun Apache o'rnatilgan va ma'lumotlarni saqlash va boshqarish uchun MySQL o'rnatilgan. PHP oxirgi foydalanuvchiga dinamik tarkibni ko'rsatish uchun kodni qayta ishlovchi o'rnatishimizning komponentidir. Paketga qo'shimcha ravishda `php`sizga `php-mysql`PHP ning MySQL-ga asoslangan ma'lumotlar bazalari bilan bog'lanishiga imkon beruvchi PHP moduli kerak bo'ladi. `libapache2-mod-php`Bundan tashqari , PHP fayllarini boshqarish uchun Apache-ni yoqishingiz kerak . Asosiy PHP paketlari avtomatik ravishda bog'liqlik sifatida o'rnatiladi.

Ushbu paketlarni o'rnatish uchun quyidagilarni bajaring:

```bash
$ sudo apt install php libapache2-mod-php php-mysql
```

O'rnatish tugallangach, PHP versiyasini tasdiqlash uchun quyidagi buyruqni ishga tushirishingiz mumkin:

```bash
$ php -v
```

> ```
> OutputPHP 7.4.3 (cli) (built: Jul  5 2021 15:13:35) ( NTS )
> Copyright (c) The PHP Group
> Zend Engine v3.4.0, Copyright (c) Zend Technologies
>     with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
> ```

Ayni paytda sizning LAMP stekingiz to‘liq ishlayapti, lekin PHP skripti bilan sozlashni sinab ko‘rishdan oldin veb-saytingiz fayl va papkalarini saqlash uchun to‘g‘ri [Apache virtual xostini o‘rnatgan ma’qul. ](https://httpd.apache.org/docs/current/vhosts/)Buni keyingi bosqichda qilamiz.

### 4-qadam — Veb-saytingiz uchun virtual xost yaratish <a href="#step-4-creating-a-virtual-host-for-your-website" id="step-4-creating-a-virtual-host-for-your-website"></a>

Apache veb-serveridan foydalanganda, konfiguratsiya tafsilotlarini inkapsulyatsiya qilish va bitta serverdan bir nechta domenlarni joylashtirish uchun *virtual xostlar (Nginx-dagi server bloklariga o'xshash) yaratishingiz mumkin.* **Ushbu qo'llanmada biz your\_domain** nomli domenni o'rnatamiz , lekin siz uni **o'zingizning domen nomingiz bilan almashtirishingiz** kerak&#x20;

Ubuntu 20.04-dagi Apache-da sukut bo'yicha yoqilgan bitta server bloki mavjud bo'lib, u `/var/www/html`katalogdagi hujjatlarga xizmat ko'rsatish uchun sozlangan. Bu bitta sayt uchun yaxshi ishlayotgan bo'lsa-da, agar siz bir nechta saytlarni joylashtirsangiz, u noqulay bo'lishi mumkin. ni oʻzgartirish oʻrniga, agar mijoz soʻrovi boshqa saytlarga toʻgʻri kelmasa, xizmat koʻrsatish uchun birlamchi katalog sifatida oʻrnida qoldirib , **your\_domain** sayti uchun `/var/www/html`katalog tuzilmasini yaratamiz .`/var/www/var/www/html`

**Domeningiz** uchun quyidagi tarzda katalog yarating :

<pre class="language-bash"><code class="lang-bash"><strong>$ sudo mkdir /var/www/your_domain
</strong></code></pre>

`$USER`Keyinchalik, joriy tizim foydalanuvchisiga havola qiladigan muhit o'zgaruvchisi bilan katalog egaligini tayinlang :

```bash
$ sudo chown -R $USER:$USER /var/www/your_domain
```

`sites-available`Keyin, afzal ko'rgan buyruq qatori muharriridan foydalanib, Apache katalogida yangi konfiguratsiya faylini oching . Bu erda biz foydalanamiz `nano`:

```bash
$ sudo nano /etc/apache2/sites-available/your_domain.conf
```

Bu yangi bo'sh faylni yaratadi. Quyidagi yalang suyak konfiguratsiyasida joylashtiring:

> ```apacheconf
> <VirtualHost *:80>
>     ServerName your_domain
>     ServerAlias www.your_domain 
>     ServerAdmin webmaster@localhost
>     DocumentRoot /var/www/your_domain
>     ErrorLog ${APACHE_LOG_DIR}/error.log
>     CustomLog ${APACHE_LOG_DIR}/access.log combined
> </VirtualHost>
> ```

Ishingiz tugagach, faylni saqlang va yoping. Agar siz dan foydalanayotgan bo'lsangiz , buni , keyin va `nano`tugmalarini bosib qilishingiz mumkin .`CTRL+XYENTER`

Ushbu `VirtualHost`konfiguratsiya bilan biz Apache-ga veb-ildiz katalogi sifatida `your_domain`foydalanishni aytamiz. Agar siz Apache-ni domen nomisiz sinab ko'rmoqchi bo'lsangiz, variantlarni o'chirishingiz yoki sharhlashingiz va har bir parametr satrining boshiga belgi qo'shishingiz mumkin.`/var/www/``your_domain``ServerNameServerAlias#`

Endi siz `a2ensite`yangi virtual xostni yoqish uchun foydalanishingiz mumkin:

```bash
$ sudo a2ensite your_domain
```

Siz Apache bilan o'rnatilgan standart veb-saytni o'chirib qo'yishingiz mumkin. Agar siz maxsus domen nomidan foydalanmasangiz, bu talab qilinadi, chunki bu holda Apache-ning standart konfiguratsiyasi virtual xostingizni qayta yozadi. Apache standart veb-saytini o'chirish uchun quyidagilarni kiriting:

```bash
$ sudo a2dissite 000-default
```

Konfiguratsiya faylida sintaksis xatosi yo'qligiga ishonch hosil qilish uchun quyidagilarni bajaring:

```bash
$ sudo apache2ctl configtest
```

Nihoyat, ushbu o'zgarishlar kuchga kirishi uchun Apache-ni qayta yuklang:

```bash
$ sudo systemctl reload apache2
```

Yangi veb-saytingiz hozir faol, lekin veb-ildiz hali ham bo'sh. Virtual xost kutilganidek ishlashini tekshirishimiz uchun ushbu joyda fayl yarating :`/var/www/``your_domain``index.html`

```bash
$ nano /var/www/your_domain/index.html
```

Ushbu faylga quyidagi tarkibni qo'shing:

```html
<html>
  <head>
    <title>your_domain website</title>
  </head>
  <body>
    <h1>Hello World!</h1>

    <p>This is the landing page of <strong>your_domain</strong>.</p>
  </body>
</html>
```

Endi brauzeringizga o'ting va serveringizning domen nomi yoki IP manziliga yana bir bor kiring:

```http
http://server_domain_or_IP
```

Siz shunday sahifani ko'rasiz:

<figure><img src="/files/aFHCb80C4yKEg13vrZ9Z" alt=""><figcaption></figcaption></figure>

Agar siz ushbu sahifani ko'rsangiz, bu sizning Apache virtual xostingiz kutilganidek ishlayotganini anglatadi.

Siz uni almashtirish uchun faylni sozlamaguningizcha ushbu faylni ilovangiz uchun vaqtinchalik ochilish sahifasi sifatida qoldirishingiz mumkin `index.php`. Buni qilganingizdan so'ng, `index.html`faylni hujjat ildizidan olib tashlashni yoki nomini o'zgartirishni unutmang, chunki u `index.php`sukut bo'yicha fayldan ustun bo'ladi.

#### `DirectoryIndex`Apache haqida eslatma <a href="#a-note-about-directoryindex-on-apache" id="a-note-about-directoryindex-on-apache"></a>

Apache'dagi standart `DirectoryIndex`sozlamalar bilan nomlangan fayl `index.html`har doim fayldan ustun turadi `index.php`. `index.html`Bu tashrif buyuruvchilar uchun ma'lumot beruvchi xabarni o'z ichiga olgan vaqtinchalik fayl yaratish orqali PHP ilovalarida texnik xizmat ko'rsatish sahifalarini o'rnatish uchun foydalidir . Ushbu sahifa sahifadan ustun bo'lganligi sababli `index.php`, u ilovaning ochilish sahifasiga aylanadi. Texnik xizmat ko'rsatish tugagach, `index.html`fayl nomi o'zgartiriladi yoki hujjat ildizidan o'chiriladi va odatiy dastur sahifasini qaytaradi.

Agar siz ushbu xatti-harakatni o'zgartirmoqchi bo'lsangiz, faylni tahrirlashingiz va faylning direktivada `/etc/apache2/mods-enabled/dir.conf`ko'rsatilgan tartibini o'zgartirishingiz kerak bo'ladi:`index.phpDirectoryIndex`

<pre class="language-bash"><code class="lang-bash"><strong>$ sudo nano /etc/apache2/mods-enabled/dir.conf
</strong></code></pre>

> ```apacheconf
> <IfModule mod_dir.c>
>         DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
> </IfModule>
> ```

Faylni saqlash va yopgandan so'ng, o'zgarishlar kuchga kirishi uchun Apache-ni qayta yuklashingiz kerak bo'ladi:

```bash
$ sudo systemctl reload apache2
```

Keyingi bosqichda PHP serveringizda toʻgʻri oʻrnatilgan va sozlanganligini tekshirish uchun PHP skriptini yaratamiz.

### 5-qadam — Veb-serveringizda PHP ishlov berishni sinab ko'rish <a href="#step-5-testing-php-processing-on-your-web-server" id="step-5-testing-php-processing-on-your-web-server"></a>

Endi veb-saytingiz fayl va papkalarini joylashtirish uchun maxsus joylashuvingiz bor, biz Apache PHP fayllari uchun so‘rovlarni boshqarish va qayta ishlashga qodirligini tasdiqlash uchun PHP test skriptini yaratamiz.

`info.php`Shaxsiy veb-ildiz papkangiz ichida yangi fayl yarating :

<pre class="language-bash"><code class="lang-bash"><strong>$ nano /var/www/your_domain/info.php
</strong></code></pre>

Bu bo'sh faylni ochadi. Fayl ichiga to'g'ri keladigan PHP kodi bo'lgan quyidagi matnni qo'shing:

> ```php
> <?php
> phpinfo();
> ```

Ishingiz tugagach, faylni saqlang va yoping.

Ushbu skriptni sinab ko'rish uchun veb-brauzeringizga o'ting va serveringizning domen nomi yoki IP manziliga kiring, keyin skript nomi, bu holda `info.php`:

```http
http://server_domain_or_IP/info.php
```

Siz shunga o'xshash sahifani ko'rasiz:

<figure><img src="/files/L9FYp3zAL5BFblUdchqn" alt=""><figcaption></figcaption></figure>

Ushbu sahifa PHP nuqtai nazaridan serveringiz haqida ma'lumot beradi. Bu nosozliklarni tuzatish va sozlamalaringiz to'g'ri qo'llanilishini ta'minlash uchun foydalidir.

Agar siz ushbu sahifani brauzeringizda ko'rsangiz, PHP o'rnatishingiz kutilganidek ishlayapti.

Ushbu sahifa orqali PHP serveringiz haqidagi tegishli ma'lumotlarni tekshirgandan so'ng, siz yaratgan faylni o'chirib tashlaganingiz ma'qul, chunki unda PHP muhitingiz va Ubuntu serveringiz haqida nozik ma'lumotlar mavjud. Buning uchun foydalanishingiz mumkin `rm`:

<pre class="language-bash"><code class="lang-bash"><strong>$ sudo rm /var/www/your_domain/info.php
</strong></code></pre>

Agar maʼlumotlarga keyinroq yana kirish kerak boʻlsa, har doim bu sahifani qayta yaratishingiz mumkin.

### 6-qadam - PHP dan ma'lumotlar bazasi ulanishini sinab ko'rish (ixtiyoriy) <a href="#step-6-testing-database-connection-from-php-optional" id="step-6-testing-database-connection-from-php-optional"></a>

Agar siz PHP MySQL-ga ulanishi va ma'lumotlar bazasi so'rovlarini bajara olishini sinab ko'rmoqchi bo'lsangiz, PHP skriptidan so'nggi ma'lumotlar va uning mazmuni uchun so'rovlar bilan test jadvalini yaratishingiz mumkin. Buni amalga oshirishdan oldin test ma'lumotlar bazasini va unga kirish uchun to'g'ri sozlangan yangi MySQL foydalanuvchisini yaratishimiz kerak.

Ushbu yozish vaqtida mahalliy MySQL PHP kutubxonasi MySQL 8 uchun standart autentifikatsiya usulini `mysqlnd` [qo'llab-quvvatlamaydi](https://www.php.net/manual/en/ref.pdo-mysql.php) . MySQL ma'lumotlar bazasiga ulanish imkoniyatiga ega bo'lish uchun autentifikatsiya usuli bilan yangi foydalanuvchi yaratishimiz kerak. PHP.`caching_sha2_authenticationmysql_native_password`

Biz example\_database nomli ma'lumotlar bazasini va **example\_user** nomli foydalanuvchini **yaratamiz** , lekin siz bu nomlarni turli qiymatlar bilan almashtirishingiz mumkin.

**Birinchidan, root** hisob qaydnomasi yordamida MySQL konsoliga ulaning :

```bash
$ sudo mysql
```

Yangi ma'lumotlar bazasini yaratish uchun MySQL konsolingizdan quyidagi buyruqni bajaring:

```sql
mysql> CREATE DATABASE example_database;
```

Endi siz yangi foydalanuvchi yaratishingiz va ularga o'zingiz yaratgan maxsus ma'lumotlar bazasida to'liq imtiyozlar berishingiz mumkin.

Quyidagi buyruq standart autentifikatsiya usuli sifatida `example_user`ismli yangi foydalanuvchi yaratadi . `mysql_native_password`Biz ushbu foydalanuvchi parolini sifatida belgilayapmiz `password`, lekin siz bu qiymatni oʻzingiz tanlagan xavfsiz parol bilan almashtirishingiz kerak.

```sql
mysql> CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
```

`example_database`Endi biz ushbu foydalanuvchiga ma'lumotlar bazasiga ruxsat berishimiz kerak

```sql
mysql> GRANT ALL ON example_database.* TO 'example_user'@'%';
```

Bu **example\_user foydalanuvchisiga example\_ma'lumotlar** bazasi ma'lumotlar bazasiga nisbatan to'liq imtiyozlar beradi , shu bilan birga bu foydalanuvchi serveringizda boshqa ma'lumotlar bazalarini yaratish yoki o'zgartirishga yo'l qo'ymaydi.

Endi MySQL qobig'idan chiqing:

```sql
mysql> exit
```

Yangi foydalanuvchi tegishli ruxsatlarga ega yoki yoʻqligini MySQL konsoliga qayta kirish orqali tekshirishingiz mumkin, bu safar maxsus foydalanuvchi hisob maʼlumotlari yordamida:

```bash
$ mysql -u example_user -p
```

Ushbu buyruqdagi bayroqqa e'tibor bering , u sizdan **example\_user**`-p` foydalanuvchisini yaratishda ishlatiladigan parolni so'raydi . MySQL konsoliga kirganingizdan so'ng, **example\_ma'lumotlar** bazasi ma'lumotlar bazasiga kirish huquqiga ega ekanligingizni tasdiqlang:

```sql
mysql> SHOW DATABASES;
```

Bu sizga quyidagi chiqishni beradi:

> ```sql
> Output+--------------------+
> | Database           |
> +--------------------+
> | example_database   |
> | information_schema |
> +--------------------+
> 2 rows in set (0.000 sec)
> ```
>
> <br>

**Keyinchalik, biz todo\_list** nomli test jadvalini yaratamiz . MySQL konsolidan quyidagi bayonotni ishga tushiring:

```sql
mysql> CREATE TABLE example_database.todo_list (
mysql>         item_id INT AUTO_INCREMENT,
mysql>         content VARCHAR(255),
mysql>         PRIMARY KEY(item_id)
mysql> );
```

Sinov jadvaliga bir necha qator tarkibni kiriting. Turli qiymatlardan foydalangan holda keyingi buyruqni bir necha marta takrorlashni xohlashingiz mumkin:

<pre class="language-sql"><code class="lang-sql"><strong>mysql> INSERT INTO example_database.todo_list (content) VALUES ("My first important item");
</strong></code></pre>

Ma'lumotlar jadvalingizga muvaffaqiyatli saqlanganligini tasdiqlash uchun quyidagilarni bajaring:

```sql
mysql> SELECT * FROM example_database.todo_list;
```

Siz quyidagi chiqishni ko'rasiz:

> ```sql
> Output+---------+--------------------------+
> | item_id | content                  |
> +---------+--------------------------+
> |       1 | My first important item  |
> |       2 | My second important item |
> |       3 | My third important item  |
> |       4 | and this one more thing  |
> +---------+--------------------------+
> 4 rows in set (0.000 sec)
> ```
>
> <br>

Sinov jadvalida to'g'ri ma'lumotlar mavjudligini tasdiqlaganingizdan so'ng, MySQL konsolidan chiqishingiz mumkin:

```sql
mysql> exit
```

Endi siz MySQL-ga ulanadigan PHP skriptini yaratishingiz va tarkibingizga so'rov yuborishingiz mumkin. O'zingiz yoqtirgan muharrir yordamida maxsus veb-ildiz katalogingizda yangi PHP fayl yarating. Buning uchun biz foydalanamiz `nano`:

```bash
$ nano /var/www/your_domain/todo_list.php
```

Quyidagi PHP skripti MySQL ma'lumotlar bazasiga ulanadi va natijalar ro'yxatda ko'rsatiladigan **todo\_list** jadvalining mazmuni uchun so'rovlar. Agar ma'lumotlar bazasiga ulanishda muammo bo'lsa, u istisno qiladi. `todo_list.php`Ushbu tarkibni skriptingizga nusxalang :

> ```php
> <?php
> $user = "example_user";
> $password = "password";
> $database = "example_database";
> $table = "todo_list";
>
> try {
>   $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
>   echo "<h2>TODO</h2><ol>"; 
>   foreach($db->query("SELECT content FROM $table") as $row) {
>     echo "<li>" . $row['content'] . "</li>";
>   }
>   echo "</ol>";
> } catch (PDOException $e) {
>     print "Error!: " . $e->getMessage() . "<br/>";
>     die();
> }
> ```

Tahrirlash tugagach, faylni saqlang va yoping.

Endi veb-brauzeringizdagi ushbu sahifaga veb-saytingiz uchun sozlangan domen nomi yoki umumiy IP-manzilga tashrif buyurib, undan keyin kirishingiz mumkin `/todo_list.php`:

```http
http://your_domain_or_IP/todo_list.php
```

Siz test jadvalingizga kiritgan tarkibni ko'rsatadigan shunday sahifani ko'rishingiz kerak:

<figure><img src="/files/4BFlvzD9wmRmL7WfPLAk" alt=""><figcaption></figcaption></figure>

Bu sizning PHP muhitingiz MySQL serveringizga ulanish va o'zaro ishlashga tayyorligini bildiradi.

### Xulosa <a href="#conclusion" id="conclusion"></a>

Ushbu qo'llanmada biz PHP veb-saytlari va ilovalarini tashrif buyuruvchilaringizga xizmat ko'rsatish uchun moslashuvchan asos yaratdik, Apache-dan veb-server sifatida va MySQL-dan ma'lumotlar bazasi tizimi sifatida foydalanish.

Keyingi qadam sifatida siz HTTPS orqali veb-serveringizga ulanishlar xavfsizligini ta'minlashingiz kerak. Buni amalga oshirish uchun saytingizni bepul TLS/SSL sertifikati bilan himoyalash uchun [Let's Encrypt -dan foydalanishingiz mumkin.](https://otabek-ismoilov.gitbook.io/blog/server-sozlamalari/ubuntu-20.04-da-lets-encrypt-yordamida-apache-ni-qanday-himoyalash-mumkin)
