亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁(yè) 后端開發(fā) php教程 如何使用純 PHP 創(chuàng)建 API?

如何使用純 PHP 創(chuàng)建 API?

Nov 04, 2024 am 06:11 AM

Como criar API com PHP Puro?

在這個(gè)項(xiàng)目中,我們將在任何框架中僅使用 PHP 創(chuàng)建一個(gè)簡(jiǎn)單的 API。我們所需要的只是:

  • PHP - 必備
  • 作曲家 - 必備
  • 編輯器/IDE,如 VScode 或 PHPStorm
  • Docker - 首選但不是必需
  • 郵遞員 - 首選,但不是必需

讓我們首先為數(shù)據(jù)庫(kù)配置定義 docker-compose.yml 文件。如果您不想使用 Docker 在容器中創(chuàng)建數(shù)據(jù)庫(kù),解決方案是在您的計(jì)算機(jī)上安裝數(shù)據(jù)庫(kù)。在本教程中,我們將使用 MySQL。

設(shè)置

創(chuàng)建應(yīng)用程序所在的文件夾后,我們首先配置 docker-compose.yaml:

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

讓我們將此文件分成幾部分進(jìn)行解釋:

services:
  mysql:

在此文件中,我們定義將使用的服務(wù)。
我將此服務(wù)命名為 mysql。 注意,該服務(wù)的名稱將用于作為主機(jī)連接到數(shù)據(jù)庫(kù)

image: mysql:9.1.0

接下來(lái)我定義將使用哪個(gè)圖像來(lái)創(chuàng)建我們的數(shù)據(jù)庫(kù),對(duì)于這個(gè)項(xiàng)目,我使用 mysql9.1.0 版本。
您可以在 Docker Hub 上找到此版本和其他版本。

ports:
      - '3306:3306'

端口正在設(shè)置為3306。這是默認(rèn)的mysql端口!

你可以注意到端口就像3306:3306,這個(gè):意味著我們想要在本地機(jī)器上監(jiān)聽這個(gè)端口,而不僅僅是在docker容器上,這樣我們就可以直接在我們的機(jī)器上訪問(wèn)它。

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

作為一個(gè)環(huán)境,我們必須定義 mysql 服務(wù)的憑據(jù)。
因此,我們使用環(huán)境變量定義用戶、密碼和數(shù)據(jù)庫(kù)名稱:

MYSQL_USER: api_user // <--- Este é nosso usuário
MYSQL_PASSWORD: api_password // <--- Este é nosso password
MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados
MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root

要啟動(dòng)我們的容器,只需進(jìn)入 docker-compose.yaml 文件所在的文件夾并在終端中輸入以下命令:

docker compose up -d

這將初始化我們?nèi)萜髦械?mysql 服務(wù)。
如果你想在終端內(nèi)訪問(wèn)mysql,可以使用這個(gè)命令:

docker exec -it <nome do container> bash

輸入此命令并按 Enter 鍵后,您將進(jìn)入運(yùn)行 mysql 鏡像的容器。

容器名稱由文件夾名-主機(jī)名-數(shù)字組成
在這種情況下,如果我們的應(yīng)用程序是在“create-api-php”目錄中創(chuàng)建的,則容器的名稱將為:create-api-php-mysql-1。

我們還將創(chuàng)建一個(gè)composer.json文件,該文件將作為安裝項(xiàng)目中使用的外部庫(kù)的基礎(chǔ)。在這個(gè)項(xiàng)目中我們將只使用Dotenv。

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

在這一行中,我們添加了 php 中最常用的 dotenv 庫(kù)。
您可以在以下位置找到此庫(kù)的存儲(chǔ)庫(kù):Github Vlucas Repository

services:
  mysql:

在下面的行中,我們基本上是說(shuō)我們將在 PSR-4 的默認(rèn)配置中使用自動(dòng)加載。目前最常用的 PSR 是 PSR-12 和 PSR-4,其中 12 是迄今為止最常用的。但現(xiàn)在我們將繼續(xù)使用 PSR-4。

image: mysql:9.1.0

創(chuàng)建這兩個(gè)文件后,我們可以發(fā)出命令

ports:
      - '3306:3306'

它將安裝 Dotenv 庫(kù)并配置所需 PSR 的設(shè)置。
執(zhí)行此命令后,將在我們的環(huán)境中創(chuàng)建composer.lock.

文件

對(duì)于來(lái)自 JavaScript 世界的人來(lái)說(shuō),這些文件可以與 package.jsonpackage-lock.json.

進(jìn)行比較

您還會(huì)看到一個(gè)名為供應(yīng)商的文件夾已添加到您的目錄中,它包含我們的 Dotenv 庫(kù)以及一個(gè)非常重要的文件:autoload.php。
我們不需要觸摸或更改此文件中的任何內(nèi)容,因?yàn)樗鼘⒇?fù)責(zé)在我們的其他文件之間處理 Dotenv 信息。

我們還將創(chuàng)建一個(gè)名為 bootstrap.php 的文件,該文件負(fù)責(zé)初始化我們的應(yīng)用程序并連接一些重要參數(shù),以便一切按預(yù)期工作:

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

然后我們可以創(chuàng)建 .env 文件來(lái)添加負(fù)責(zé)連接到我們的 mysql 數(shù)據(jù)庫(kù)的環(huán)境變量。
然后我們添加:

MYSQL_USER: api_user // <--- Este é nosso usuário

我們還將創(chuàng)建一個(gè) .env.example 文件,其中將保存此信息的副本,以防有人想要克隆我們的存儲(chǔ)庫(kù),甚至將來(lái)如果我們想繼續(xù)我們的項(xiàng)目,這樣我們就可以了解我們需要定義什么以及不需要什么的必要信息。

MYSQL_PASSWORD: api_password // <--- Este é nosso password

我們之所以要?jiǎng)?chuàng)建這兩個(gè)文件,一個(gè)包含所有信息,另一個(gè)僅包含部分信息,是因?yàn)?.env 文件不應(yīng)該上傳到存儲(chǔ)庫(kù),因?yàn)樗瑱C(jī)密信息。假設(shè)將來(lái)我們要使用第三方 API,需要添加 token 進(jìn)行訪問(wèn),然后我們會(huì)將這些信息存儲(chǔ)在 .env 文件中。

為了防止 .env 文件上傳到我們的存儲(chǔ)庫(kù),我們將創(chuàng)建一個(gè)名為 .gitignore 的文件并添加以下信息:

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados

這樣我們就定義了 .env 文件和供應(yīng)商文件夾的全部?jī)?nèi)容將不會(huì)被提交。

至此,我們已經(jīng)完成了項(xiàng)目配置,可以繼續(xù)編碼了。

編纂

我們將創(chuàng)建以下目錄 src/System 并在系統(tǒng)內(nèi)創(chuàng)建文件 DatabaseConnector.php

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

這里我們?yōu)榇宋募x一個(gè)命名空間,以便我們將來(lái)可以在其他文件中使用它。

services:
  mysql:

我們將創(chuàng)建與文件同名的類,并創(chuàng)建一個(gè)名為 $dbConnection 并傳遞 null 值的私有變量。
該變量將負(fù)責(zé)此類的新實(shí)例并將我們與數(shù)據(jù)庫(kù)連接起來(lái)。
稍后當(dāng)我們實(shí)現(xiàn) try-catch.
時(shí)我們會(huì)看到更多

image: mysql:9.1.0

在構(gòu)造函數(shù)中,我們將創(chuàng)建以下變量并使用 Dotenv 檢查從 .env 文件捕獲的值。

ports:
      - '3306:3306'

仍在構(gòu)造函數(shù)內(nèi),我們將執(zhí)行 try-catch 來(lái)驗(yàn)證我們要執(zhí)行的操作:

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

在此嘗試中,我們嘗試創(chuàng)建類的新實(shí)例并將其傳遞到 $dbConnection 變量中。我們?yōu)榇耸褂?PDO 模塊,它接收參數(shù)

  • DSN - 數(shù)據(jù)源名稱或 URI
  • - mysql:作為我們正在使用的服務(wù)/銀行。
  • - 主機(jī)=$主機(jī); 我們的主人
  • - 端口=$端口; 我們的門
  • - 字符集=utf8mb4; 數(shù)據(jù)庫(kù)的utf8字符集的定義
  • - dbname=$db 我們數(shù)據(jù)庫(kù)的名稱
  • USER - 登錄數(shù)據(jù)庫(kù)的用戶
  • PASS - 登錄數(shù)據(jù)庫(kù)的密碼

錯(cuò)誤案例:

MYSQL_USER: api_user // <--- Este é nosso usuário

我們將觸發(fā) PDO 異常并返回錯(cuò)誤消息。
顯然,這只是我們應(yīng)該如何在開發(fā)環(huán)境中呈現(xiàn)錯(cuò)誤的示例。對(duì)于生產(chǎn)環(huán)境,最好呈現(xiàn)更簡(jiǎn)潔的錯(cuò)誤,幫助我們更清楚地理解問(wèn)題。

在構(gòu)造函數(shù)之外但在我們的類內(nèi)部,我們將創(chuàng)建以下函數(shù):

MYSQL_PASSWORD: api_password // <--- Este é nosso password

負(fù)責(zé)調(diào)用包含連接實(shí)例的變量。

還記得我們的 bootstrap.php 文件嗎?讓我們添加以下幾行代碼:

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados

看起來(lái)像這樣:

MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root

在文件夾src中,我們將創(chuàng)建另一個(gè)名為Database的目錄,并在其中創(chuàng)建文件database_seed.php。
這個(gè)文件將負(fù)責(zé)第一次填充我們的數(shù)據(jù)庫(kù),所以如果我們想與某人共享這個(gè)項(xiàng)目,它不會(huì)以空數(shù)據(jù)庫(kù)結(jié)束。

在此文件中,我們將添加以下代碼:

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

我們導(dǎo)入 require 'bootstrap.php';因?yàn)樵谖覀兊囊龑?dǎo)文件中,我們已經(jīng)導(dǎo)入了負(fù)責(zé)實(shí)例化數(shù)據(jù)庫(kù)的變量。

services:
  mysql:

我們創(chuàng)建一個(gè)名為 $statement 的變量,其值為 Heredoc

image: mysql:9.1.0

在此Heredoc中,我們將添加一些查詢

ports:
      - '3306:3306'

這里我選擇刪除表刪除整個(gè)基礎(chǔ),然后開始一個(gè)新的,但是如果你愿意,你可以刪除這行代碼。

下面的代碼行指定該表將用于執(zhí)行事務(wù),并且表之間將建立連接。如果你想了解更多關(guān)于這個(gè)mysql聲明:innoDb文檔

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

在同一個(gè)Heredoc中,我們將添加另一個(gè)查詢

MYSQL_USER: api_user // <--- Este é nosso usuário

這里我們將一些數(shù)據(jù)插入到 person 表中。

我們?cè)谖募┪矂?chuàng)建一個(gè) try-catch,嘗試初始化查詢,如果出現(xiàn)錯(cuò)誤,我們會(huì)返回一條錯(cuò)誤消息,就像我們?cè)谏厦娲a中的數(shù)據(jù)處理中所做的那樣.

MYSQL_PASSWORD: api_password // <--- Este é nosso password

src 中,我們將創(chuàng)建另一個(gè)名為 TableGateways 的目錄,并在其中創(chuàng)建文件:PersonGateway.php。

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados

此文件夾中的文件將負(fù)責(zé)與我們的數(shù)據(jù)庫(kù)交互,幾乎就像存儲(chǔ)庫(kù)。

在我們的 PersonGateway 類中,我們將添加以下構(gòu)造函數(shù):

MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root

我們將添加這個(gè)構(gòu)造函數(shù),因?yàn)槲覀兊念悓⒃谄渌募斜徽{(diào)用,以便我們可以觸發(fā)我們類的一些方法。

請(qǐng)參閱以下方法:

負(fù)責(zé)列出表中所有用戶的方法

docker compose up -d

負(fù)責(zé)列出表中單個(gè)用戶的方法

docker exec -it <nome do container> bash

將用戶插入到我們的表中的可靠方法

{
  "require": {
      "vlucas/phpdotenv": "^2.4"
  },
  "autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }
}

負(fù)責(zé)更新表中用戶信息的方法

"require": {
      "vlucas/phpdotenv": "^2.4"
},

負(fù)責(zé)從表中刪除用戶的方法

"autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }

我們將在 src 中創(chuàng)建一個(gè)名為 Controller 的目錄,并在其中創(chuàng)建文件:PersonController.php。
該目錄中的文件負(fù)責(zé)與我們的應(yīng)用程序路由交互。在這里,我們直接與銀行交互,但我們可以使用服務(wù)層并將所有邏輯和業(yè)務(wù)規(guī)則限制在該層。
如果你想創(chuàng)建服務(wù)層,那就像這樣:

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

但是,我們的目的不是深入研究這種類型的架構(gòu),現(xiàn)在我們將繼續(xù)控制器文件:

services:
  mysql:

在我們的 PersonController 類中,我們將添加:

image: mysql:9.1.0

這樣我們就可以保證與數(shù)據(jù)庫(kù)的新實(shí)例進(jìn)行交互。

我們還創(chuàng)建了一個(gè)方法來(lái)處理我們的請(qǐng)求:

ports:
      - '3306:3306'

這個(gè)標(biāo)頭負(fù)責(zé)傳輸狀態(tài)代碼,如果創(chuàng)建了一個(gè)正文,它會(huì)返回相同的正文以供查看。

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

我們還創(chuàng)建了與路線交互的方法:

負(fù)責(zé)與用戶的列表路由交互的方法

MYSQL_USER: api_user // <--- Este é nosso usuário

負(fù)責(zé)與用戶的創(chuàng)建路由交互的方法

MYSQL_PASSWORD: api_password // <--- Este é nosso password

負(fù)責(zé)與用戶更新路由交互的方法

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados

負(fù)責(zé)與用戶刪除路由交互的方法

MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root

負(fù)責(zé)驗(yàn)證的方法

docker compose up -d
docker exec -it <nome do container> bash
{
  "require": {
      "vlucas/phpdotenv": "^2.4"
  },
  "autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }
}

最后,我們將在文件夾 src 之外創(chuàng)建一個(gè)名為 Public 的目錄。
該文件夾負(fù)責(zé)包含 php 顯示文件。
我們將在其中創(chuàng)建文件:index.php
我們將添加以下代碼:

"require": {
      "vlucas/phpdotenv": "^2.4"
},

此文件負(fù)責(zé)設(shè)置標(biāo)頭并檢查對(duì) url 的訪問(wèn)。如果訪問(wèn)成功則返回內(nèi)容,否則返回錯(cuò)誤。

要訪問(wèn)您的應(yīng)用程序,只需使用內(nèi)部 PHP 服務(wù)器上傳服務(wù)器即可:

"autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }

如果您還沒(méi)有初始化容器,請(qǐng)?jiān)诮K端中輸入以下命令:

composer install

現(xiàn)在只需使用郵遞員或任何其他可以幫助您與網(wǎng)址交互的應(yīng)用程序即可。

我的社交網(wǎng)絡(luò):
Github Linkedin

以上是如何使用純 PHP 創(chuàng)建 API?的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
PHP變量范圍解釋了 PHP變量范圍解釋了 Jul 17, 2025 am 04:16 AM

PHP變量作用域常見問(wèn)題及解決方法包括:1.函數(shù)內(nèi)部無(wú)法訪問(wèn)全局變量,需使用global關(guān)鍵字或參數(shù)傳入;2.靜態(tài)變量用static聲明,只初始化一次并在多次調(diào)用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過(guò)濾;4.匿名函數(shù)需通過(guò)use關(guān)鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規(guī)則有助于避免錯(cuò)誤并提升代碼穩(wěn)定性。

如何在PHP中牢固地處理文件上傳? 如何在PHP中牢固地處理文件上傳? Jul 08, 2025 am 02:37 AM

要安全處理PHP文件上傳需驗(yàn)證來(lái)源與類型、控制文件名與路徑、設(shè)置服務(wù)器限制并二次處理媒體文件。1.驗(yàn)證上傳來(lái)源通過(guò)token防止CSRF并通過(guò)finfo_file檢測(cè)真實(shí)MIME類型使用白名單控制;2.重命名文件為隨機(jī)字符串并根據(jù)檢測(cè)類型決定擴(kuò)展名存儲(chǔ)至非Web目錄;3.PHP配置限制上傳大小及臨時(shí)目錄Nginx/Apache禁止訪問(wèn)上傳目錄;4.GD庫(kù)重新保存圖片清除潛在惡意數(shù)據(jù)。

在PHP中評(píng)論代碼 在PHP中評(píng)論代碼 Jul 18, 2025 am 04:57 AM

PHP注釋代碼常用方法有三種:1.單行注釋用//或#屏蔽一行代碼,推薦使用//;2.多行注釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧注釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時(shí)需注意閉合符號(hào)和避免嵌套。

發(fā)電機(jī)如何在PHP中工作? 發(fā)電機(jī)如何在PHP中工作? Jul 11, 2025 am 03:12 AM

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

撰寫PHP評(píng)論的提示 撰寫PHP評(píng)論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP注釋的關(guān)鍵在于明確目的與規(guī)范,注釋應(yīng)解釋“為什么”而非“做了什么”,避免冗余或過(guò)于簡(jiǎn)單。1.使用統(tǒng)一格式,如docblock(/*/)用于類、方法說(shuō)明,提升可讀性與工具兼容性;2.強(qiáng)調(diào)邏輯背后的原因,如說(shuō)明為何需手動(dòng)輸出JS跳轉(zhuǎn);3.在復(fù)雜代碼前添加總覽性說(shuō)明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標(biāo)記待辦事項(xiàng)與問(wèn)題,便于后續(xù)追蹤與協(xié)作。好的注釋能降低溝通成本,提升代碼維護(hù)效率。

如何通過(guò)php中的索引訪問(wèn)字符串中的字符 如何通過(guò)php中的索引訪問(wèn)字符串中的字符 Jul 12, 2025 am 03:15 AM

在PHP中獲取字符串特定索引字符可用方括號(hào)或花括號(hào),但推薦方括號(hào);索引從0開始,超出范圍訪問(wèn)返回空值,不可賦值;處理多字節(jié)字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結(jié)果;實(shí)際應(yīng)用中循環(huán)訪問(wèn)前應(yīng)檢查字符串長(zhǎng)度,動(dòng)態(tài)字符串需驗(yàn)證有效性,多語(yǔ)言項(xiàng)目建議統(tǒng)一使用多字節(jié)安全函數(shù)。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

學(xué)習(xí)PHP:初學(xué)者指南 學(xué)習(xí)PHP:初學(xué)者指南 Jul 18, 2025 am 04:54 AM

易于效率,啟動(dòng)啟動(dòng)tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

See all articles