前些天發(fā)現(xiàn)了一個(gè)人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,最重要的屌圖甚多,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站。
如何在 Ubuntu 22.04 上安裝 Linux、Apache、MySQL、PHP (LAMP) 堆棧
介紹
“LAMP”堆棧是一組開源軟件,通常安裝在一起,以使服務(wù)器能夠托管用 PHP 編寫的動(dòng)態(tài)網(wǎng)站和 Web 應(yīng)用程序。該術(shù)語(yǔ)是一個(gè)縮寫詞,代表帶有A pache Web 服務(wù)器的****Linux操作系統(tǒng)。站點(diǎn)數(shù)據(jù)存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中,動(dòng)態(tài)內(nèi)容由****PHP處理。
在文中,我們將在 Ubuntu 22.04 服務(wù)器上設(shè)置 LAMP 堆棧。
先決條件
為了完成本教程,我們需要有一個(gè) Ubuntu 22.04 服務(wù)器,該服務(wù)器具有sudo
權(quán)限的非 root用戶帳戶和基本防火墻。這可以參考Ubuntu 20.04 初始服務(wù)器設(shè)置指南進(jìn)行配置。
第 1 步 — 安裝 Apache 并更新防火墻
Apache Web 服務(wù)器是世界上最流行的 Web 服務(wù)器之一。它有完善的文檔,擁有活躍的用戶社區(qū),并且在網(wǎng)絡(luò)歷史的大部分時(shí)間里都被廣泛使用,這使得它成為托管網(wǎng)站的絕佳選擇。
首先更新包管理器緩存。如果這是我們第一次在sudo
會(huì)話中使用,系統(tǒng)將提示我們提供用戶密碼,以確認(rèn)我們擁有管理系統(tǒng)軟件包apt
的正確權(quán)限:
sudo apt update
然后,使用以下命令安裝 Apache:
sudo apt install apache2
系統(tǒng)將提示我們確認(rèn) Apache 的安裝。按 確認(rèn)Y
,然后按ENTER
。
安裝完成后,我們需要調(diào)整防火墻設(shè)置以允許 HTTP 流量。Ubuntu 的默認(rèn)防火墻配置工具稱為簡(jiǎn)單防火墻 (UFW)。它具有可供我們利用的不同應(yīng)用程序配置文件。要列出所有當(dāng)前可用的 UFW 應(yīng)用程序配置文件,請(qǐng)執(zhí)行以下命令:
sudo ufw app list
Output
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
以下是每個(gè)配置文件的含義:
-
Apache:此配置文件僅打開端口
80
(正常、未加密的 Web 流量)。 -
Apache Full:此配置文件打開端口
80
(正常、未加密的 Web 流量)和端口443
(TLS/SSL 加密流量)。 -
Apache Secure:此配置文件僅打開端口
443
(TLS/SSL 加密流量)。
目前,最好僅允許 port 上的連接80
,因?yàn)檫@是全新的 Apache 安裝,并且我們尚未配置 TLS/SSL 證書以允許服務(wù)器上的 HTTPS 流量。
要僅允許端口80
上的流量,請(qǐng)使用Apache
配置文件:
sudo ufw allow in "Apache"
通過(guò)以下方式驗(yàn)證更改:
sudo ufw status
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
現(xiàn)在允許80
端口上的流量通過(guò)防火墻。
我們可以立即進(jìn)行抽查,通過(guò)在網(wǎng)絡(luò)瀏覽器中訪問(wèn)服務(wù)器的公共 IP 地址來(lái)驗(yàn)證一切是否按計(jì)劃進(jìn)行:
http://your_server_ip
默認(rèn)的 Ubuntu 22.04 Apache 網(wǎng)頁(yè)用于提供信息和測(cè)試目的。以下是 Apache 默認(rèn)網(wǎng)頁(yè)的示例:
如果我們可以查看此頁(yè)面,則表明我們的 Web 服務(wù)器已正確安裝并且可以通過(guò)防火墻進(jìn)行訪問(wèn)。
如何查找服務(wù)器的公共 IP 地址
如果我們不知道服務(wù)器的公共 IP 地址是什么,可以通過(guò)多種方法找到它。通常,這是我們用于通過(guò) SSH 連接到服務(wù)器的地址。
有幾種不同的方法可以從命令行執(zhí)行此操作。首先,我們可以使用iproute2
工具通過(guò)輸入以下內(nèi)容來(lái)獲取我們的 IP 地址:
ip addr show ens3 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
這將為我們返回兩到三行。它們都是正確的地址,但我們的計(jì)算機(jī)可能只能使用其中之一,因此只能一個(gè)一個(gè)試。
另一種方法是使用curl
實(shí)用程序聯(lián)系外部方,告訴我們它如何看待我們的服務(wù)器。這是通過(guò)詢問(wèn)特定服務(wù)器我們的 IP 地址是什么來(lái)完成的:
curl http://icanhazip.com
無(wú)論我們選擇哪種方法,都需要在網(wǎng)絡(luò)瀏覽器中輸入我們的 IP 地址以驗(yàn)證我們的服務(wù)器是否正在運(yùn)行。
第 2 步 — 安裝 MySQL
上一步我們已經(jīng)啟動(dòng)并運(yùn)行了 Web 服務(wù)器,現(xiàn)在需要安裝數(shù)據(jù)庫(kù)系統(tǒng)才能存儲(chǔ)和管理站點(diǎn)的數(shù)據(jù)。MySQL 是 PHP 環(huán)境中使用的流行數(shù)據(jù)庫(kù)管理系統(tǒng)。
使用apt
獲取并安裝該軟件:
sudo apt install mysql-server
出現(xiàn)提示時(shí),通過(guò)按Y
確認(rèn)安裝,然后按ENTER
。
安裝完成后,建議我們運(yùn)行 MySQL 預(yù)裝的安全腳本mysql_secure_installation
。該腳本將刪除一些不安全的默認(rèn)設(shè)置并鎖定對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的訪問(wèn)。
警告:自 2022 年 7 月起,如果我們?cè)跊](méi)有進(jìn)一步配置的情況下運(yùn)行腳本,將會(huì)發(fā)生錯(cuò)誤。原因是該腳本將嘗試為安裝的MySQL 帳戶設(shè)置root 密碼,但默認(rèn)情況下,在 Ubuntu 安裝上,該帳戶未配置為使用密碼進(jìn)行連接。
在 2022 年 7 月之前,此腳本在嘗試設(shè)置root帳戶密碼并繼續(xù)執(zhí)行其余提示后會(huì)默默失敗。在我們輸入并確認(rèn)密碼后,腳本將返回以下錯(cuò)誤:
Output ...
Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.
New password:
這將導(dǎo)致腳本進(jìn)入遞歸循環(huán),只能通過(guò)關(guān)閉終端窗口來(lái)退出該循環(huán)。
但是由于mysql_secure_installation
腳本執(zhí)行許多其他操作對(duì)于確保 MySQL 安裝安全非常有用,因此仍然建議在開始使用 MySQL 管理數(shù)據(jù)之前運(yùn)行它。不過(guò),為了避免進(jìn)入此遞歸循環(huán),我們需要首先調(diào)整MySQLroot用戶的身份驗(yàn)證方式。
首先,打開MySQL提示符:
sudo mysql
然后運(yùn)行以下命令將root用戶的身份驗(yàn)證方法更改為使用密碼的身份驗(yàn)證方法。以下示例將身份驗(yàn)證方法更改為:mysql_native_password
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
進(jìn)行此更改后,退出 MySQL 提示符:
exit
之后,我們可以mysql_secure_installation
毫無(wú)問(wèn)題地運(yùn)行腳本。
通過(guò)運(yùn)行以下命令啟動(dòng)交互式腳本:
sudo mysql_secure_installation
這將詢問(wèn)我們是否要配置VALIDATE PASSWORD PLUGIN
.
**注意:**啟用此功能需要進(jìn)行判斷。如果啟用,不符合指定條件的密碼將被 MySQL 拒絕并顯示錯(cuò)誤。禁用驗(yàn)證是安全的,但我們應(yīng)該始終對(duì)數(shù)據(jù)庫(kù)憑據(jù)使用強(qiáng)且唯一的密碼。
回答Y
“是”,或者選擇其他任何選項(xiàng)以繼續(xù)而不啟用。
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:
如果我們回答“是”,系統(tǒng)會(huì)要求我們選擇密碼驗(yàn)證級(jí)別。請(qǐng)注意,如果我們?cè)O(shè)置任何不包含數(shù)字、大小寫字母和特殊字符的密碼時(shí),我們將收到錯(cuò)誤消息:
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
無(wú)論我們是否選擇設(shè)置,我們的服務(wù)器接下來(lái)都會(huì)要求我們選擇并確認(rèn) MySQL root用戶的密碼。不要將其與system root混淆。數(shù)據(jù)庫(kù)root用戶是對(duì)數(shù)據(jù)庫(kù)系統(tǒng)擁有完全權(quán)限的管理用戶。
如果我們啟用了密碼驗(yàn)證,我們將看到剛剛輸入的 root 密碼的密碼強(qiáng)度,并且我們的服務(wù)器將詢問(wèn)我們是否要繼續(xù)使用該密碼。如果我們對(duì)當(dāng)前密碼感到滿意,請(qǐng)?jiān)谔崾緯r(shí)輸入“yes”:
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
對(duì)于其余問(wèn)題,請(qǐng)?jiān)诿總€(gè)提示時(shí)按下Y
并擊鍵ENTER
。這將刪除一些匿名用戶和測(cè)試數(shù)據(jù)庫(kù),禁用遠(yuǎn)程 root 登錄,并加載這些新規(guī)則,以便 MySQL 立即尊重我們所做的更改。
完成后,輸入以下命令測(cè)試是否能夠登錄 MySQL 控制臺(tái):
sudo mysql
這將以管理數(shù)據(jù)庫(kù)用戶root的身份連接到 MySQL 服務(wù)器,這是通過(guò)sudo
運(yùn)行此命令時(shí)使用推斷的。下面是一個(gè)示例輸出:
Output
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
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 控制臺(tái),請(qǐng)輸入:
exit
請(qǐng)注意,即使我們?cè)谶\(yùn)行腳本時(shí)定義了密碼,也無(wú)需提供密碼即可以使用root用戶身份進(jìn)行連接。這是因?yàn)楣芾?MySQL 用戶的默認(rèn)身份驗(yàn)證方法為unix_socket
不是password
(一個(gè)實(shí)際的的例子就是忘記了root密碼,但仍然可以使用數(shù)據(jù)庫(kù)來(lái)重置它)。盡管這看起來(lái)像是一個(gè)安全問(wèn)題,但它使數(shù)據(jù)庫(kù)服務(wù)器更加安全,因?yàn)槲ㄒ辉试S以root MySQL 用戶身份登錄的用戶是具有 sudo 權(quán)限的系統(tǒng)用戶,這些系統(tǒng)用戶從控制臺(tái)或通過(guò)以相同權(quán)限運(yùn)行的應(yīng)用程序連接。實(shí)際上,這意味著我們將無(wú)法使用管理數(shù)據(jù)庫(kù)root用戶從 PHP 應(yīng)用程序進(jìn)行連接。為root MySQL 帳戶設(shè)置密碼可以起到保護(hù)作用,以防默認(rèn)身份驗(yàn)證方法從unix_socket
更改為password
。
為了提高安全性,最好為每個(gè)數(shù)據(jù)庫(kù)設(shè)置專用的用戶帳戶,并設(shè)置較少的權(quán)限,特別是如果我們計(jì)劃在服務(wù)器上托管多個(gè)數(shù)據(jù)庫(kù)。
**注意:**有一些舊版本的 PHP不支持 MySQL 8 的默認(rèn)身份驗(yàn)證方法mysql_native_password
。因此,在 MySQL 8 上為 PHP 應(yīng)用程序創(chuàng)建數(shù)據(jù)庫(kù)用戶時(shí),我們可能需要配置應(yīng)用程序以使用mysql_native_password
插件,第6步會(huì)說(shuō)這個(gè)。
第 3 步 — 安裝 PHP
我們安裝了 Apache 來(lái)提供我們的內(nèi)容,并安裝了 MySQL 來(lái)存儲(chǔ)和管理我們的數(shù)據(jù)。PHP 是我們?cè)O(shè)置的組件,它將處理代碼以向最終用戶顯示動(dòng)態(tài)內(nèi)容。除了該php
軟件包之外,我們還需要一個(gè) PHP 模塊php-mysql
,該模塊允許 PHP 與基于 MySQL 的數(shù)據(jù)庫(kù)進(jìn)行通信。我們還需要libapache2-mod-php
啟用 Apache 來(lái)處理 PHP 文件。核心 PHP 包將作為依賴項(xiàng)自動(dòng)安裝。
要安裝這些軟件包,請(qǐng)運(yùn)行以下命令:
sudo apt install php libapache2-mod-php php-mysql
安裝完成后,運(yùn)行以下命令來(lái)確認(rèn)我們的 PHP 版本:
php -v
Output
PHP 8.1.2 (cli) (built: Mar 4 2022 18:13:46) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies
此時(shí),我們的 LAMP 堆棧已完全運(yùn)行,但在使用 PHP 腳本測(cè)試我們的設(shè)置之前,最好設(shè)置一個(gè)適當(dāng)?shù)腁pache 虛擬主機(jī)來(lái)保存網(wǎng)站的文件和文件夾。
第 4 步 — 為我們的網(wǎng)站創(chuàng)建虛擬主機(jī)
使用 Apache Web 服務(wù)器時(shí),我們可以創(chuàng)建虛擬主機(jī)(類似于 Nginx 中的服務(wù)器塊)來(lái)封裝配置詳細(xì)信息并從一臺(tái)服務(wù)器托管多個(gè)域。在本文中,我們將設(shè)置一個(gè)名為your_domain的域。
Ubuntu 22.04 上的 Apache 默認(rèn)啟用一臺(tái)虛擬主機(jī),該虛擬主機(jī)配置為提供/var/www/html
目錄中的文檔。雖然這對(duì)于單個(gè)站點(diǎn)來(lái)說(shuō)效果很好,但如果我們托管多個(gè)站點(diǎn),它可能會(huì)變得笨拙。下來(lái)就要為your_domain站點(diǎn)創(chuàng)建一個(gè)/var/www/html
目錄結(jié)構(gòu),如果客戶端請(qǐng)求與任何其他站點(diǎn)不匹配,則將其保留為要提供服務(wù)的默認(rèn)目錄。
如下所示:
sudo mkdir /var/www/your_domain
接下來(lái),使用環(huán)境變量分配目錄的所有權(quán)$USER
,該變量將引用我們當(dāng)前的系統(tǒng)用戶:
sudo chown -R $USER:$USER /var/www/your_domain
然后,使用nano
編輯器在 Apache 目錄中打開一個(gè)新的配置文件。
sudo nano /etc/apache2/sites-available/your_domain.conf
這將創(chuàng)建一個(gè)新的空白文件。使用我們自己的域名添加以下基本配置:
/etc/apache2/sites-available/your_domain.conf
<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>
完成后保存并關(guān)閉文件。按CTRL+X
,然后按Y
和按ENTER
。
現(xiàn)在,使用a2ensite
啟用新的虛擬主機(jī):
sudo a2ensite your_domain
如果想要禁用隨 Apache 安裝的默認(rèn)網(wǎng)站:
sudo a2dissite 000-default
檢查配置文件是否有語(yǔ)法錯(cuò)誤,請(qǐng)運(yùn)行以下命令:
sudo apache2ctl configtest
最后,重新加載 Apache 以使這些更改生效:
sudo systemctl reload apache2
現(xiàn)在新網(wǎng)站現(xiàn)已激活,但網(wǎng)站根目錄仍為空。創(chuàng)建一個(gè)文件以測(cè)試虛擬主機(jī)是否按預(yù)期工作:
nano /var/www/your_domain/index.html
在此文件中包含以下內(nèi)容:
/var/www/your_domain/index.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>
保存并關(guān)閉文件,然后轉(zhuǎn)到瀏覽器并訪問(wèn)服務(wù)器的域名或IP地址:
http://server_domain_or_IP
網(wǎng)頁(yè)應(yīng)展示我們剛剛編輯的文件中的內(nèi)容:
我們可以保留此文件作為應(yīng)用程序的臨時(shí)登錄頁(yè)面,直到我們?cè)O(shè)置index.php
文件來(lái)替換它。執(zhí)行此操作后,請(qǐng)記住從文檔根目錄中刪除或重命名該文件,因?yàn)槟J(rèn)情況下index.php
將優(yōu)先于index.html
文件。
在下一步中,我們將創(chuàng)建一個(gè) PHP 腳本來(lái)測(cè)試 PHP 是否已在我們的服務(wù)器上正確安裝和配置。
第 5 步 — 在 Web 服務(wù)器上測(cè)試 PHP 處理
現(xiàn)在我們已經(jīng)有了一個(gè)自定義位置來(lái)托管網(wǎng)站的文件和文件夾,請(qǐng)創(chuàng)建一個(gè) PHP 測(cè)試腳本來(lái)確認(rèn) Apache 能夠處理和處理對(duì) PHP 文件的請(qǐng)求。
在自定義 Web 根文件夾中創(chuàng)建一個(gè)名為info.php
的新文件:
nano /var/www/your_domain/info.php
這將打開一個(gè)空白文件。在文件內(nèi)添加以下文本(這是有效的 PHP 代碼):
/var/www/your_domain/info.php
<?php
phpinfo();
完成后,保存并關(guān)閉文件。
要測(cè)試此腳本,請(qǐng)轉(zhuǎn)到 Web 瀏覽器并訪問(wèn)服務(wù)器的域名或 IP 地址,后跟腳本名稱,在本例中為info.php
:
http://server_domain_or_IP/info.php
以下是默認(rèn) PHP 網(wǎng)頁(yè)的示例:
此頁(yè)面從 PHP 的角度提供有關(guān)我們的服務(wù)器的信息。它對(duì)于調(diào)試和確保正確應(yīng)用我們的設(shè)置很有用。
如果我們?cè)跒g覽器中看到此頁(yè)面,則說(shuō)明我們的 PHP 安裝正常。
通過(guò)該頁(yè)面檢查有關(guān) PHP 服務(wù)器的相關(guān)信息后,最好刪除我們創(chuàng)建的文件,因?yàn)樗嘘P(guān) PHP 環(huán)境和 Ubuntu 服務(wù)器的敏感信息:
sudo rm /var/www/your_domain/info.php
如果我們稍后需要再次訪問(wèn)該信息,我們可以隨時(shí)重新創(chuàng)建此頁(yè)面。
第 6 步 — 從 PHP 測(cè)試數(shù)據(jù)庫(kù)連接(可選)
如果我們想測(cè)試 PHP 是否能夠連接到 MySQL 并執(zhí)行數(shù)據(jù)庫(kù)查詢,我們可以創(chuàng)建一個(gè)包含測(cè)試數(shù)據(jù)的測(cè)試表,并從 PHP 腳本查詢其內(nèi)容。在此之前,我們需要?jiǎng)?chuàng)建一個(gè)測(cè)試數(shù)據(jù)庫(kù)和一個(gè)正確配置為訪問(wèn)該數(shù)據(jù)庫(kù)的新 MySQL 用戶。
創(chuàng)建名為example_database的數(shù)據(jù)庫(kù)和名為example_user 的用戶。我們可以將這些名稱替換為不同的值。
首先,使用root帳戶連接到 MySQL 控制臺(tái):
sudo mysql
要?jiǎng)?chuàng)建新數(shù)據(jù)庫(kù),請(qǐng)從 MySQL 控制臺(tái)運(yùn)行以下命令:
CREATE DATABASE example_database;
現(xiàn)在創(chuàng)建一個(gè)新用戶并授予他們對(duì)我們剛剛創(chuàng)建的自定義數(shù)據(jù)庫(kù)的完全權(quán)限。
以下命令創(chuàng)建一個(gè)名為example_user
的新用戶,該用戶使用該caching_sha2_password
方法進(jìn)行身份驗(yàn)證。我們將此用戶的密碼定義為password
:
CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';
注意:前面的ALTER USER
語(yǔ)句設(shè)置root MySQL 用戶以使用caching_sha2_password
插件進(jìn)行身份驗(yàn)證。根據(jù) MySQL 官方文檔,caching_sha2_password
是 MySQL 的首選身份驗(yàn)證插件.
但是,某些版本的 PHP 不能兼容caching_sha2_password
. PHP 報(bào)告說(shuō),這個(gè)問(wèn)題在 PHP 7.4 中已得到修復(fù),下來(lái)如果我們嘗試登錄 phpMyAdmin 時(shí)遇到錯(cuò)誤,可能需要設(shè)置root來(lái)進(jìn)行mysql_native_password
身份驗(yàn)證:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
現(xiàn)在授予該用戶對(duì)example_database
數(shù)據(jù)庫(kù)的權(quán)限:
GRANT ALL ON example_database.* TO 'example_user'@'%';
這將賦予example_user用戶對(duì)example_database數(shù)據(jù)庫(kù)的完全權(quán)限,同時(shí)防止該用戶在我們的服務(wù)器上創(chuàng)建或修改其他數(shù)據(jù)庫(kù)。
現(xiàn)在退出 MySQL shell:
exit
通過(guò)再次登錄 MySQL 控制臺(tái)(這次使用自定義用戶憑據(jù))來(lái)測(cè)試新用戶是否具有適當(dāng)?shù)臋?quán)限:
mysql -u example_user -p
請(qǐng)注意此命令中的標(biāo)志,它將提示我們輸入創(chuàng)建example_user-p
用戶時(shí)使用的密碼。登錄MySQL控制臺(tái)后,確認(rèn)我們有權(quán)訪問(wèn)example_database數(shù)據(jù)庫(kù):
SHOW DATABASES;
這將為我們提供以下輸出:
Output
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)
接下來(lái),創(chuàng)建一個(gè)名為todo_list的測(cè)試表。從 MySQL 控制臺(tái)運(yùn)行以下語(yǔ)句:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);
在測(cè)試表中插入幾行內(nèi)容。使用不同的值重復(fù)下一個(gè)命令幾次以填充測(cè)試表:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");
要確認(rèn)數(shù)據(jù)已成功保存到表中,請(qǐng)運(yùn)行:
SELECT * FROM example_database.todo_list;
以下是輸出:
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)
確認(rèn)測(cè)試表中有有效數(shù)據(jù)后,退出 MySQL 控制臺(tái):
exit
現(xiàn)在我們可以創(chuàng)建連接到 MySQL 并查詢內(nèi)容的 PHP 腳本。在自定義 Web 根目錄中創(chuàng)建一個(gè)新的 PHP 文件:
nano /var/www/your_domain/todo_list.php
以下 PHP 腳本連接到 MySQL 數(shù)據(jù)庫(kù)并查詢todo_list表的內(nèi)容,并在列表中顯示結(jié)果。如果數(shù)據(jù)庫(kù)連接出現(xiàn)問(wèn)題,就會(huì)拋出異常。
/var/www/your_domain/todo_list.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();
}
完成編輯后保存并關(guān)閉文件。
現(xiàn)在,我們可以通過(guò)訪問(wèn)為我們的網(wǎng)站配置的域名或公共 IP 地址,然后在 Web 瀏覽器中訪問(wèn)此頁(yè)面/todo_list.php
:
http://your_domain_or_IP/todo_list.php
此網(wǎng)頁(yè)應(yīng)向訪問(wèn)者顯示我們?cè)跍y(cè)試表中插入的內(nèi)容:
這說(shuō)明我們的 PHP 環(huán)境已準(zhǔn)備好與 MySQL 服務(wù)器連接并交互。
結(jié)論
在本文中,我們使用 Apache 作為 Web 服務(wù)器,使用 MySQL 作為數(shù)據(jù)庫(kù)系統(tǒng),為向訪問(wèn)者提供 PHP 網(wǎng)站和應(yīng)用程序服務(wù)奠定了靈活的基礎(chǔ)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-818055.html
下一步,我們應(yīng)該通過(guò) HTTPS 提供服務(wù),確保與 Web 服務(wù)器的連接是安全的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-818055.html
到了這里,關(guān)于如何在 Ubuntu 22.04 上安裝 Linux、Apache、MySQL、PHP (LAMP) 堆棧的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!