Windows PHP 运行环境安装说明

Windows + Apache HTTP Server + MySQL + PostgreSQL + PHP + Node.js 运行环境安装说明

作者

mayingbiao89@qq.com

安装依赖

请安装 Microsoft Visual C++ 2015-2019 Redistributable (x64)

配置系统环境变量

  • D:\wampp\httpd-2.4.55\Apache24\bin

  • D:\wampp\mysql-8.0.32\bin

  • D:\wampp\postgresql-15.2-1\pgsql\bin

  • D:\wampp\php-8.1.16

  • D:\wampp\composer

  • D:\wampp\composer\vendor\bin

安装 Apache HTTP Server

Windows 版本下载地址:www.apachehaus.com/cgi-bin/downloa...

httpd.conf 配置

位置:wampp\httpd-2.4.55\Apache24\conf


...

Define HTTP_PORT 80

Define SRVROOT "D:\wampp\httpd-2.4.55\Apache24"

ServerRoot "${SRVROOT}"

...

Define ENABLE_TLS13 "Yes"

# 隐藏版本号

ServerTokens Prod

ServerSignature off

...

Listen ${HTTP_PORT}

...

LoadModule rewrite_module modules/mod_rewrite.so

...

# 加载 php 模块

LoadModule php_module "${SRVROOT}/../../php-8.1.16/php8apache2_4.dll"

#

# AddHandler application/x-httpd-php .php 配置将使 PHP 处理任何具有 .php 后缀的文件,

# 即使该文件还有其它的文件后缀。例如一个名为 example.php.txt 的文件将被作为 PHP 文件运行。

# 所以我们要确保只有以 .php 结尾的文件才被执行。

#

<FilesMatch \.php$>

    SetHandler application/x-httpd-php

</FilesMatch>

# 配置 php.ini 的路径

PHPIniDir "${SRVROOT}/../php-8.1.16"

...

ServerName localhost:80

...

#

# DirectoryIndex: sets the file that Apache will serve if a directory

# is requested.

#

<IfModule dir_module>

    DirectoryIndex index.html index.php

</IfModule>

...

Include conf/extra/httpd-vhosts.conf

...

httpd-vhosts.conf 配置

位置:wampp\httpd-2.4.55\Apache24\conf\extra


# 示例:监听 19090 端口

# Listen 19090

# <VirtualHost *:80 *:19090>

#     ServerName www.example.com

#     Define deployment_path "${SRVROOT}/../../wwwroot/www.example.com/public"

#     DocumentRoot ${deployment_path}

#     <Directory ${deployment_path}>

#         Options +Indexes +Includes +FollowSymLinks +MultiViews

#         AllowOverride All

#         Require all granted

#     </Directory>

# </VirtualHost>

# 永久重定向到指定地址

# <VirtualHost *:80>

#     RewriteEngine On

#     RewriteRule ^(.*) https://www.example.com$1 [R=301,L]

# </VirtualHost>

# localhost

Listen 19090

<VirtualHost *:80 *:19090>

    ServerName localhost

    Define deployment_path "${SRVROOT}/../../wwwroot/localhost"

    DocumentRoot ${deployment_path}

    <Directory ${deployment_path}>

        Options +Indexes +Includes +FollowSymLinks +MultiViews

        AllowOverride All

        Require all granted

    </Directory>

</VirtualHost>

httpd-ahssl.conf 配置

位置:wampp\httpd-2.4.55\Apache24\conf\extra


Listen 443 https

##

##  SSL Global Context

##

##  All SSL configuration in this context applies both to

##  the main server and all SSL-enabled virtual hosts.

##

#   SSL Protocols:

#   List the protocols that the client is permitted to negotiate.

#   See the mod_ssl documentation for a complete list.

#   SSL Cipher Suite:

#   List the ciphers that the client is permitted to negotiate.

#   See the mod_ssl documentation for a complete list.

<IfDefine ENABLE_TLS13>

  SSLProtocol -all +TLSv1.2 +TLSv1.3

  SSLCipherSuite SSL ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:!RC4:!LOW:!MD5:!aNULL:!eNULL:!3DES:!EXP:!PSK:!SRP:!DSS

  SSLCipherSuite TLSv1.3 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256

</IfDefine>

<IfDefine !ENABLE_TLS13>

SSLProtocol -all +TLSv1.1 +TLSv1.2

SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:!RC4:!LOW:!MD5:!aNULL:!eNULL:!3DES:!EXP:!PSK:!SRP:!DSS

SSLProxyCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:!RC4:!LOW:!MD5:!aNULL:!eNULL:!3DES:!EXP:!PSK:!SRP:!DSS

</IfDefine>

#   SSL Honer Cipher Suite Order:

#   Forces the order of allowed cipher suites to the order above.

#   See the mod_ssl documentation for a complete list.

SSLHonorCipherOrder On

#   Pass Phrase Dialog:

#   Configure the pass phrase gathering process.

#   The filtering dialog program (`builtin' is a internal

#   terminal dialog) has to provide the pass phrase on stdout.

SSLPassPhraseDialog  builtin

#   Inter-Process Session Cache:

#   Configure the SSL Session Cache: First the mechanism

#   to use and second the expiring timeout (in seconds).

#SSLSessionCache         "dbm:${SRVROOT}/logs/ssl_scache"

SSLSessionCache        "shmcb:${SRVROOT}/logs/ssl_scache(512000)"

SSLSessionCacheTimeout  300

#

#   Some MIME-types for downloading Certificates and CRLs

#

AddType application/x-x509-ca-cert .crt

AddType application/x-pkcs7-crl    .crl

#   SSL Engine Options:

#   Set various options for the SSL engine.

#   o FakeBasicAuth:

#     Translate the client X.509 into a Basic Authorisation.  This means that

#     the standard Auth/DBMAuth methods can be used for access control.  The

#     user name is the `one line' version of the client's X.509 certificate.

#     Note that no password is obtained from the user. Every entry in the user

#     file needs this password: `xxj31ZMTZzkVA'.

#   o ExportCertData:

#     This exports two additional environment variables: SSL_CLIENT_CERT and

#     SSL_SERVER_CERT. These contain the PEM-encoded certificates of the

#     server (always existing) and the client (only existing when client

#     authentication is used). This can be used to import the certificates

#     into CGI scripts.

#   o StdEnvVars:

#     This exports the standard SSL/TLS related `SSL_*' environment variables.

#     Per default this exportation is switched off for performance reasons,

#     because the extraction step is an expensive operation and is usually

#     useless for serving static content. So one usually enables the

#     exportation for CGI and SSI requests only.

#   o StrictRequire:

#     This denies access when "SSLRequireSSL" or "SSLRequire" applied even

#     under a "Satisfy any" situation, i.e. when it applies access is denied

#     and no other module can change it.

#   o OptRenegotiate:

#     This enables optimized SSL connection renegotiation handling when SSL

#     directives are used in per-directory context.

#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

<FilesMatch "\.(cgi|shtml|phtml|php)$">

    SSLOptions +StdEnvVars

</FilesMatch>

<Directory "${SRVROOT}/cgi-bin">

    SSLOptions +StdEnvVars

</Directory>

#   SSL Protocol Adjustments:

#   The safe and default but still SSL/TLS standard compliant shutdown

#   approach is that mod_ssl sends the close notify alert but doesn't wait for

#   the close notify alert from client. When you need a different shutdown

#   approach you can use one of the following variables:

#   o ssl-unclean-shutdown:

#     This forces an unclean shutdown when the connection is closed, i.e. no

#     SSL close notify alert is sent or allowed to be received.  This violates

#     the SSL/TLS standard but is needed for some brain-dead browsers. Use

#     this when you receive I/O errors because of the standard approach where

#     mod_ssl sends the close notify alert.

#   o ssl-accurate-shutdown:

#     This forces an accurate shutdown when the connection is closed, i.e. a

#     SSL close notify alert is send and mod_ssl waits for the close notify

#     alert of the client. This is 100% SSL/TLS standard compliant, but in

#     practice often causes hanging connections with brain-dead browsers. Use

#     this only for browsers where you know that their SSL implementation

#     works correctly.

#   Notice: Most problems of broken clients are also related to the HTTP

#   keep-alive facility, so you usually additionally want to disable

#   keep-alive for those clients, too. Use variable "nokeepalive" for this.

#   Similarly, one has to force some clients to use HTTP/1.0 to workaround

#   their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and

#   "force-response-1.0" for this.

BrowserMatch "MSIE [2-5]"

         nokeepalive ssl-unclean-shutdown

         downgrade-1.0 force-response-1.0

#   Per-Server Logging:

#   The home of a custom SSL log file. Use this when you want a

#   compact non-error SSL logfile on a virtual host basis.

CustomLog "${SRVROOT}/logs/ssl_request.log"

          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" env=HTTPS

##

## SSL Virtual Host Context

##

# 示例

; <VirtualHost www.example.com:443>

;     ServerName www.example.com

;     Define deployment_path "${SRVROOT}/../../wwwroot/www.example.com/public"

;     SSLEngine on

;     SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

;     SSLCertificateFile "${SRVROOT}/certs/www.example.com.cer"

;     SSLCertificateKeyFile "${SRVROOT}/certs/www.example.com.key"

;     DocumentRoot ${deployment_path}

;     <Directory ${deployment_path}>

;         Options +Indexes +Includes +FollowSymLinks +MultiViews

;         AllowOverride All

;         Require all granted

;     </Directory>

; </VirtualHost>

安装服务

以管理员身份运行


httpd.exe -k install -n httpd

有如下提示表示 Apache 服务安装成功


Installing the 'httpd' service

The 'httpd' service is successfully installed.

Testing httpd.conf....

Errors reported here must be corrected before the service can be started.

启动 Apache 服务

以管理员身份运行


sc start httpd

或者


net start httpd

删除 Apache 服务

首先要停止 Apache 服务

以管理员身份运行


sc stop httpd

或者


net stop httpd

然后再删除 Apache 服务

以管理员身份运行


sc delete httpd

或者


httpd.exe -k uninstall -n httpd

安装 MySQL

MySQL 配置文件的读取顺序如下:


- C:\Windows\my.ini

- C:\Windows\my.cnf

- C:\my.ini

- C:\my.cnf

- wampp\mysql-8.0.32\my.ini

- wampp\mysql-8.0.32\my.cnf

my.ini 配置

首先要在 wampp\mysql-8.0.32\ 目录下新建 my.ini 文件,内容如下:


[mysqld]

port=3306

basedir="D:/wampp/mysql-8.0.32"

datadir="D:/wampp/mysql-8.0.32/data"

pid-file = mysql.pid

character-set-server=utf8mb4

collation-server = utf8mb4_0900_ai_ci

init_connect = 'SET collation_connection=utf8mb4_0900_ai_ci'

init_connect = 'SET NAMES utf8mb4_0900_ai_ci'

;default_authentication_plugin=mysql_native_password

default_authentication_plugin=caching_sha2_password

default-storage-engine=INNODB

sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

log-output=FILE

general-log=0

general_log_file="mysql.log"

slow-query-log=1

slow_query_log_file="mysql-slow.log"

;慢查询记录

;建议根据您的环境将 long_query_time 调短

;通常建议设为 1-5;这里设置超过 10 秒的查询才被记录为慢查询

long_query_time=10

log-error=mysql.err

log-bin=mysql-bin

relay_log=mysql-relay-bin

server-id=1

初始化 MySQL

使用 mysqld --verbose --help 命令可查看 mysqld 支持的所有选项

--initialize-insecure 可执行无密码初始化

以管理员身份运行


mysqld.exe --initialize-insecure

执行后将在 D:\wampp\mysql-8.0.32 目录下生成 data 目录

安装 MySQL 服务

以管理员身份运行


mysqld.exe --install mysql --defaults-file=D:\wampp\mysql-8.0.32\my.ini

启动 MySQL 服务

以管理员身份运行


sc start mysql

或者


net start mysql

删除 MySQL 服务

首先要停止 MySQL 服务

以管理员身份运行


sc stop mysql

或者


net stop mysql

然后再删除 MySQL 服务

以管理员身份运行


sc delete mysql

或者


mysqld.exe --remove mysql

设置 MySQL root 用户密码为 123456

要确保 MySQL 服务启动


mysqladmin -u root -p password 123456

执行上面命令后需要我们输入旧密码


Enter password:

由于之前我们是无密码初始化的数据库

所以不需要我们输入旧密码

直接回车即可

回车后会有下面的警告


mysqladmin: [Warning] Using a password on the command line interface can be insecure.

Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

翻译过来大致意思如下


mysqladmin: [警告]在命令行界面上使用密码可能不安全。

警告:由于密码将以明文形式发送到服务器,请使用ssl连接来确保密码安全。

忽略即可

密码理论上时立即生效的

稳妥起见建议重启一下 MySQL 服务

安装 PostgreSQL 数据库

将 postgresql-15.2-1-windows-x64-binaries.zip 解压到 D:\wampp\postgresql-15.2-1\pgsql

初始化


initdb -D "D:\wampp\postgresql-15.2-1\pgsql\data" -A password -U postgres -W -E UTF8 --locale=C

属于此数据库系统的文件宿主为用户 "admin1".

此用户也必须为服务器进程的宿主.

数据库簇将使用本地化语言 "C"进行初始化.

缺省的文本搜索配置将会被设置到"english"

禁止为数据页生成校验和.

输入新的超级用户口令:123456

再输入一遍:123456

创建目录 D:/wampp/postgresql-15.2-1/pgsql/data ... 成功

正在创建子目录 ... 成功

选择动态共享内存实现 ......windows

选择默认最大联接数 (max_connections) ... 100

选择默认共享缓冲区大小 (shared_buffers) ... 128MB

选择默认时区 ... Asia/Shanghai

创建配置文件 ... 成功

正在运行自举脚本 ...成功

正在执行自举后初始化 ...成功

同步数据到磁盘...成功

成功。您现在可以用下面的命令开启数据库服务器:

    ^"D^:^\wampp^\postgresql^-15^.2^-1^\pgsql^\bin^\pg^_ctl^" -D ^"D^:^\wampp^\postgresql^-15^.2^-1^\pgsql^\data^" -l 日志文件 start

initdb –help


-D, –pgdata=DATADIR 当前数据库簇的位置

-U, –username=NAME 数据库超级用户名

-W, –pwprompt 对于新的超级用户提示输入口令

-E, –encoding=ENCODING 为新数据库设置默认编码

–locale=C 为新数据库设置默认语言环境

--------------------------------------------------------------------------------

initdb 初始化一个 PostgreSQL 数据库簇.

使用方法:

  initdb [选项]... [DATADIR]

选项:

  -A, --auth=METHOD         本地连接的默认认证方法

      --auth-host=METHOD    本地的TCP/IP连接的默认认证方法

      --auth-local=METHOD   本地socket连接的默认认证方法

  -D, --pgdata=DATADIR      当前数据库簇的位置

  -E, --encoding=ENCODING   为新数据库设置默认编码

  -g, --allow-group-access  允许组对数据目录进行读/执行

      --icu-locale=LOCALE   set ICU locale ID for new databases

  -k, --data-checksums      使用数据页产生效验和

      --locale=LOCALE       为新数据库设置默认语言环境

  --lc-collate, --lc-ctype, --lc-messages=LOCALE

  --lc-monetary, --lc-numeric, --lc-time=LOCALE

                            为新的数据库簇在各自的目录中分别

                            设定缺省语言环境(默认使用环境变量)

      --no-locale           等同于 --locale=C

      --locale-provider={libc|icu}

                            set default locale provider for new databases

      --pwfile=FILE         对于新的超级用户从文件读取口令

  -T, --text-search-config=CFG

                            缺省的文本搜索配置

  -U, --username=NAME       数据库超级用户名

  -W, --pwprompt            对于新的超级用户提示输入口令

  -X, --waldir=WALDIR       预写日志目录的位置

      --wal-segsize=SIZE    WAL段的大小(兆字节)

非普通使用选项:

  -d, --debug               产生大量的除错信息

      --discard-caches      设置debug_discard_caches=1

  -L DIRECTORY              输入文件的位置

  -n, --no-clean            出错后不清理

  -N, --no-sync             不用等待变化安全写入磁盘

      --no-instructions     不要打印后续步骤的说明

  -s, --show                显示内部设置

  -S, --sync-only           only sync database files to disk, then exit

其它选项:

  -V, --version             输出版本信息, 然后退出

  -?, --help                显示此帮助, 然后退出

如果没有指定数据目录, 将使用环境变量 PGDATA

臭虫报告至<pgsql-bugs@lists.postgresql.org>.

PostgreSQL 主页: <https://www.postgresql.org/>

启动、停止、重启


# 启动

pg_ctl -D "D:\wampp\postgresql-15.2-1\pgsql\data" -l "D:\wampp\postgresql-15.2-1\pgsql\data\postgresql-15.2-1.log" start

# 停止

pg_ctl -D "D:\wampp\postgresql-15.2-1\pgsql\data" -l "D:\wampp\postgresql-15.2-1\pgsql\data\postgresql-15.2-1.log" stop

# 重启

pg_ctl -D "D:\wampp\postgresql-15.2-1\pgsql\data" -l "D:\wampp\postgresql-15.2-1\pgsql\data\postgresql-15.2-1.log" restart

配置服务

如果通过命令行启动了服务,请先关闭服务。

安装服务,以管理员身份运行命令行:


pg_ctl register -D "D:\wampp\postgresql-15.2-1\pgsql\data" -N "postgresql"

删除服务,以管理员身份运行命令行:


pg_ctl unregister -N "postgresql"

简单的命令行操作


psql -U postgres

用户 postgres 的口令:123456

psql (15.2)

输入 "help" 来获取帮助信息.

postgres=#

postgres=# help

您正在使用psql, 这是一种用于访问PostgreSQL的命令行界面.

键入: \copyright 显示发行条款

       \h 显示 SQL 命令的说明

       \? 显示 pgsql 命令的说明

       \g 或者以分号(;)结尾以执行查询

       \q 退出

postgres=#

postgres=# \l

                                                数据库列表

   名称    |  拥有者  | 字元编码 | 校对规则 | Ctype | ICU Locale | Locale Provider |       存取权限

-----------+----------+----------+----------+-------+------------+-----------------+-----------------------

 postgres  | postgres | UTF8     | C        | C     |            | libc            |

 template0 | postgres | UTF8     | C        | C     |            | libc            | =c/postgres          +

           |          |          |          |       |            |                 | postgres=CTc/postgres

 template1 | postgres | UTF8     | C        | C     |            | libc            | =c/postgres          +

           |          |          |          |       |            |                 | postgres=CTc/postgres

(3 行记录)

postgres=#

postgres=# \q

PostgreSQL 数据库管理工具


D:\wampp\postgresql-15.2-1\pgsql\pgAdmin 4\bin\pgAdmin4.exe

安装 PHP

复制一个 php-8.1.16\php.ini-production 并改名为 php.ini。

curl.se/ca/cacert.pem 下载 cacert.pem 文件放到 D:\wampp 目录下,详情点击 curl.se/docs/caextract.html 查看。

php.ini 配置


...

; 确定是否向外界公开服务器上安装了 PHP,在 HTTP 标头中包含 PHP 版本号(例如:X-Powered-By: PHP/5.3.7)。

expose_php = Off

...

; 这设置了脚本被解析器中止之前允许的最大执行时间,单位秒。这有助于防止写得不好的脚本占尽服务器资源。

; 默认设置为 30。从命令行运行 PHP 时,默认设置为 0; 在非 Windows 系统上,最大执行时间不会影响系统调用和系统操作等。更多细节参见 set_time_limit(); set_time_limit()函数和配置指令max_execution_time只影响脚本本身执行的时间。任何发生在诸如使用system()的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中,当该脚本已运行。在测量时间是实值的Windows中,情况就不是如此了。

; 你的 web 服务器也可以有其他超时设置,也有可能中断 PHP 的执行。Apache 有一个 Timeout 指令,IIS 有一个 CGI 超时功能。他们默认都是 300 秒。更多具体信息参见你的 web 服务器的文档。

max_execution_time = 0

...

; 脚本解析输入数据(类似 POSTGET)允许的最大时间,单位是秒。它从接收所有数据到开始执行脚本进行测量的。默认设置为 -1,意味着使用 max_execution_time 的值做为默认值,如果不想限制,请设置为 0。

max_input_time = 0

...

; 设置了允许脚本分配的最大内存量,以字节为单位。这有助于防止写得不好的脚本吃掉服务器上所有可用的内存。请注意,如果不需要内存限制,请将此指令设置为 -1。

memory_limit = 2048M

...

; 设置允许 post 数据的最大大小。此设置也会影响文件上传。要上传大文件,此值必须大于 upload_max_filesize。 一般来说,memory_limit 应该大于 post_max_size。

post_max_size = 1024M

...

; PHP 寻找可动态加载扩展的目录。建议指定绝对路径。

extension_dir = "ext"

...

; 上传文件的最大大小。

; post_max_size 必须大于此值。

upload_max_filesize = 512M

; 允许同时上传的最大文件数。提交时留空的上传字段不计入此限制。

max_file_uploads = 10

...

extension=bz2

...

extension=curl

extension=ffi

extension=ftp

extension=fileinfo

extension=gd

extension=gettext

extension=gmp

extension=intl

extension=imap

extension=mbstring

extension=exif      ; Must be after mbstring as it depends on it

extension=mysqli

...

extension=odbc

extension=openssl

...

extension=pdo_mysql

...

extension=pdo_pgsql

extension=pdo_sqlite

extension=pgsql

extension=shmop

...

extension=soap

extension=sockets

extension=sodium

extension=sqlite3

extension=tidy

extension=xsl

zend_extension=opcache

...

; 所有日期/时间函数使用的默认时区。

date.timezone = Asia/Shanghai

...

[curl]

; A default value for the CURLOPT_CAINFO option. This is required to be an

; absolute path.

curl.cainfo = "D:/wampp/cacert.pem"

...

[redis]

extension=redis

[event]

extension=event

[sqlsrv]

extension=sqlsrv

[pdo_sqlsrv]

extension=pdo_sqlsrv

[xdebug]

zend_extension=xdebug

安装 PHP Composer

在 wampp\composer 目录中新建 composer.bat 文件,并填入如下内容:


@php "%~dp0composer.phar" %*

在 wampp\composer 目录中新建 composer 文件,并填入如下内容:


#!/bin/sh

dir=$(cd "${0%[/\\]*}" > /dev/null; pwd)

if [ -d /proc/cygdrive ]; then

    case $(which php) in

        $(readlink -n /proc/cygdrive)/*)

            # We are in Cygwin using Windows php, so the path must be translated

            dir=$(cygpath -m "$dir");

            ;;

    esac

fi

php "${dir}/composer.phar" "$@"

设置 PHP Composer 的 bin-dir


composer config -g bin-dir D:\wampp\composer\vendor\bin

设置 PHP Composer 国内镜像


composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

更新 PHP Composer


composer selfupdate

安装 Node.js

安装 node-v18.14.2-x64.msi

设置 npm 国内镜像源


npm config set registry https://registry.npmmirror.com

查看 npm 是否配置成功


npm config get registry

安装 Git

安装 Git-2.39.2-64-bit.exe

配置 Git


git config --global user.email "你的邮箱地址"

git config --global user.name "你的名字"
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!