PHP 环境搭建(LAMP+WAMP)

邱秋 • 2019年11月09日 • 阅读:210 • php

PHP 有集成环境 ,在windows 环境有 wampserver(Windows+Apache+Mysql+PHP) ,Linux 有lampserver(Linux+Apache+Mysql+PHP)。

也可以自己搭建。

安装PHP

For Windows

下载地址:https://windows.php.net/download

因为是以Apache作为服务器环境,所以选择Thread Safe(线程安全)版本,下载最新的ZIP包。解压到相对的目录即可

For Linux /Mac

查看原软体仓库

在 CentOS 8 系统中通过以下命令可以查看 dnf 上的 PHP 版本:

dnf module list php

会发现 预设 AppStream 软体仓库(repo,repository)提供的 PHP 版本为 7.3:

CentOS-8 - AppStream
Name   Stream         Profiles                    Summary                
php    7.2 [d]        common [d], devel, minimal  PHP scripting language 
php    7.3            common [d], devel, minimal  PHP scripting language 

提示:其中的 [d] 表示预设,[e] 表示已启用,[x] 表示已停用,[i] 表示已安装 而查看 PHP 官网会发现最新版是 8.0,所以我们需要更换其他软体仓库来安装 PHP 8.0。

更换软体仓库并安装最新版 PHP

运行以下命令,启用 Remi 软体仓库:

dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm

再次运行 dnf module list php,会发现 Remi 软体仓库中的 PHP 版本信息:

CentOS-8 - AppStream
Name   Stream         Profiles                    Summary                
php    7.2 [d]        common [d], devel, minimal  PHP scripting language 
php    7.3            common [d], devel, minimal  PHP scripting language 

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name   Stream         Profiles                    Summary                
php    remi-7.2       common [d], devel, minimal  PHP scripting language 
php    remi-7.3       common [d], devel, minimal  PHP scripting language 
php    remi-7.4       common [d], devel, minimal  PHP scripting language 
php    remi-8.0 [e]   common [d], devel, minimal  PHP scripting language

运行以下命令,启用 8.0 版本的 PHP:

dnf module enable php:remi-8.0

运行以下命令,安装 PHP:

dnf install php

安装过程会提示需要导入 GPG key,直接输入 y 同意即可:

yum install -y php # centos
dnf install -y php # centos8
apt-get install php # ubuntu
brew install php # for mac

常用命令及配置文件路径

# for linux 
# 查看状态
systemctl status php-fpm
# 启动
systemctl start php-fpm
# 停止
systemctl stop php-fpm
# 重启
systemctl restart php-fpm
# 平滑重启
systemctl reload php-fpm
# 查看是否已开机启动
systemctl is-enabled php-fpm
# 设置开机后自动启动
systemctl enable php-fpm
# 关闭开机后自动启动
systemctl disable php-fpm

# for mac 启动|停止|重启
brew services start|stop|restart php

php-fpm.confphp.ini 的完整路径为

/etc/php-fpm.conf

/etc/php.ini

php-fpm.conf 中还引入了 www.conf,其完整路径为

/etc/php-fpm.d/www.conf

dnf 默认将 PHP 的扩展配置相关文件都放在了如下目录:

/etc/php.d

PHP + Nginx

Nginx 安装和使用

适配 Nginx

如果 Web 服务器使用 Nginx,则需要修改 php-fpm 的相关配置以支持 Nginx。

编辑 /etc/php-fpm.d/www.conf,替换以下相关配置:

user = nginx
group = nginx
listen = /run/php-fpm/www.sock
;listen = 9000 ;这里可以是端口
listen.allowed_clients = /run/php-fpm/www.sock
listen.owner = nginx 
listen.group = nginx
listen.mode = 0660

如果使用 ACL 控制系统的文件权限,则将需要打开以下配置,否则将以下配置注释即可:

;listen.acl_users = nginx
;listen.acl_groups = nginx

listen.acl_users 会覆盖 listen.owner,listen.acl_groups 会覆盖 listen.group。

然后运行以下命令,重启 php-fpm 使配置生效:

systemctl reload php-fpm

接下来配置nginx 相关配置

$ vi  /etc/nginx/conf.d/test.conf

示例

server {
  server_name xxx.com;
  location ~ .*\.php$ {
    fastcgi_pass   127.0.0.1:9000; #注意这里和php 配置对应
    #fastcgi_pass  unix:/run/php-fpm/www.sock 
    fastcgi_index  index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO                $fastcgi_script_name; 
    include        fastcgi_params;    
    include fastcgi.conf;            
  } 

fastcgi_pass 对应 /etc/php-fpm.d/www.conflisten

PHP + Apache

安装Apache

For Windows

下载地址:https://www.apachelounge.com/download/

下载 对应的zip包 如 httpd-2.4.54-win64-VS16.zip解压到相应的目录即可。

进入安装目录下的bin目录,在bin目录下执行安装命令httpd -k install 安装apache 服务

管理员身份运行命令:

# 安装apache服务
httpd -k install
# 卸载apache服务
httpd -k uninstall

安装成功会看到

Installing the 'Apache2.4' service
The 'Apache2.4' service is successfully installed.

启动服务,Apache2.4就是服务的名字,默认。

#启动apache服务
net start Apache2.4

#停止apache服务
net stop Apache2.4

也可以用他自带的界面 服务管理管理器启动服务,效果是一样

打开Apache bin目录下的 ApacheMonitor.exe,点击 Start

在浏览器中输入localhost,看到 It works! 代表安装成功

通常情况你会看到 403

修改安装目录下conf/httpd.conf 找到 Define SRVROOT ,在37行 修改成你的安装目录如:

Define SRVROOT "d:/Programs/Apache24"

关联PHP模块 ,加入以下内容

LoadModule php7_module d:/Programs/php8/php7apache2_4.dll # for php7.x
# or 
LoadModule php_module d:/Programs/php8/php8apache2_4.dll # for php8.x
PHPIniDir d:/Programs/php8 #PHP 安装目录

解析模块指令

<!-- <IfModule php7_module>  for php7 -->
<IfModule php_module>
    DirectoryIndex index.html default.php index.php
    AddHandler application/x-httpd-php .php
</IfModule>

然后重启即可。

如果重启失败,预计是vc 库没有安装, 可以安装下 微软VC++运行库合集

For Linux/Mac

yum install -y httpd # centos
dnf install -y httpd # centos8
apt-get install httpd # ubuntu
brew install httpd # for mac

常用命令

# for linux 
# 查看状态
systemctl status httpd
# 启动
systemctl start httpd
# 停止
systemctl stop httpd
# 重启
systemctl restart httpd
# 平滑重启
systemctl reload httpd
# 查看是否已开机启动
systemctl is-enabled httpd
# 设置开机后自动启动
systemctl enable httpd
# 关闭开机后自动启动
systemctl disable httpd

# for mac 启动|停止|重启
brew services start|stop|restart httpd

关联PHP模块 修改/etc/httpd/conf/httpd.conf 加入

- LoadModule php7_module "/usr/lib/apache2/modules/libphp7.4.so"
+ LoadModule php_module "/usr/lib/apache2/modules/libphp8.0.so"
- <IfModule php7_module>
+ <IfModule php_module>
    DirectoryIndex index.html default.php index.php
    AddHandler application/x-httpd-php .php
</IfModule>

Apache多站点配置

有2个项目对应2个路径和2个不同域名如下:

# linux
A项目(www.testa.com) /home/user/www/testA
B项目(www.testb.com) /home/user/www/testB
# windows
A项目(www.testa.com) d:/Projects/test/a
B项目(www.testb.com) d:/Projects/test/b

配置文件位置:

Windows: 安装目录下的 conf/httpd.conf

Linux/Mac :/etc/httpd/conf/httpd.conf

For Windows

修改 httpd.conf 找到 mod_vhost_alias.sohttpd-vhosts.conf 去掉前面的井号 ,启用模块

LoadModule vhost_alias_module modules/mod_vhost_alias.so #(183行)
Include conf/extra/httpd-vhosts.conf  #(510行)

conf/extra/httpd-vhosts.conf 加入一下配置

<VirtualHost *:80>
    ServerAdmin admin@mytesta.com
    DocumentRoot "d:/Projects/test/a"
    ServerName mytesta.com
    ServerAlias www.mytesta.com
    ErrorLog "logs/mytesta.com-error.log"
    CustomLog "logs/mytesta.com-access.log" common
    <Directory "d:/Projects/test/a">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        ErrorDocument 404 https://www.mytesta.com/404.html
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin admin@mytestb.com
    DocumentRoot "d:/Projects/test/b"
    ServerName mytestb.com
    ServerAlias www.mytestb.com
    ErrorLog "logs/mytestb-error.log"
    CustomLog "logs/mytestb-access.log" common
    <Directory "d:/Projects/test/b">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        ErrorDocument 404 https://www.mytestb.com/404.html
    </Directory>
</VirtualHost>

配置解释

  • DocumentRoot:网站目录
  • ServerName:网站域名
  • Directory节点:定义目录属性
  • Options Indexes FollowSymLinks:开启目录访问,显示目录结构,并允许在此目录中使用符号连接
  • AllowOverride All:允许定义.htaccess文件
  • AllowOverride None:忽略.htaccess文件
  • Require all granted:允许所有请求
  • ErrorDocument 404 https://www.mytestb.com/404.html:路径匹配时跳转的404界面

重启服务之后,通过不同的域名就可以访问对应的站点

For Linux/Mac

/etc/httpd/conf.d 新建 test.conf ,配置和Windows 一样,修改对应目录

<VirtualHost *:80>
    ServerAdmin admin@mytesta.com
    DocumentRoot "/home/user/www/testA"
    ServerName mytesta.com
    ServerAlias www.mytesta.com
    ErrorLog "logs/mytesta.com-error.log"
    CustomLog "logs/mytesta.com-access.log" common
    <Directory "/home/user/www/testA">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        ErrorDocument 404 https://www.mytesta.com/404.html
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin admin@mytestb.com
    DocumentRoot "/home/user/www/testB"
    ServerName mytestb.com
    ServerAlias www.mytestb.com
    ErrorLog "logs/mytestb-error.log"
    CustomLog "logs/mytestb-access.log" common
    <Directory "/home/user/www/testB">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        ErrorDocument 404 https://www.mytestb.com/404.html
    </Directory>
</VirtualHost>

然后重启服务即可。

Apache开启HTTPS

<VirtualHost _default_:443>
    DocumentRoot "/var/www/html"
    ServerName www.chuchur.com
    SSLEngine on
    SSLCertificateFile /etc/ssl/www.chuchur.com.crt
  SSLCertificateKeyFile /etc/ssl/www.chuchur.com.key
  SSLCertificateChainFile /etc/ssl/www.chuchur.com.crt
    <Directory "/var/www/html">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        ErrorDocument 404 https://www.www.chuchur.com/404.html
    </Directory>
</VirtualHost>
  • SSLEngine on:开启SSL
  • SSLCertificateFile:指定证书公钥文件
  • SSLCertificateKeyFile:指定证书私钥文件
  • SSLCertificateChainFile:指定证书链文件

Apache反向代理(端口转发)

<VirtualHost _default_:443>
    ServerName api.chuchur.com
    SSLEngine on
    SSLCertificateFile /etc/ssl/api/www.chuchur.com.crt
    SSLCertificateKeyFile /etc/ssl/www.chuchur.com.key
    SSLCertificateChainFile /etc/ssl/www.chuchur.com.crt

    ProxyPreserveHost On
    ProxyRequests Off 

    ProxyPass /v2 http://localhost:92/
    ProxyPass /v1 http://localhost:91/
    ProxyPass / http://localhost:90/

    ProxyPassReverse /v2 http://localhost:92/
    ProxyPassReverse /v1 http://localhost:91/
    ProxyPassReverse / http://localhost:90/

</VirtualHost>
  • ProxyPreserveHost On:开启反向代理
  • ProxyRequests Off:关闭正向代理
  • ProxyPass:设置反向代理路径
  • ProxyPassReverse:使Apache自动处理反向代理中的从定向响应,一般和ProxyPass一起用

Apache http重定向到https

<VirtualHost *:80>
    ServerName testa.com
    #redirect
    RewriteEngine on
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)?$ https://%{SERVER_NAME}$1 [L,R]
</VirtualHost>
  • RewriteEngine on:开启从定向功能
  • RewriteCond %{SERVER_PORT} !^443$:从定向条件,端口不是443时重定向,^为开头,$为结束
  • RewriteRule:重定向规则,L:表明当前规则是最后一条规则,停止分析以后规则的重写;R:强制外部重定向

PHP + Mysql

Mysql 安装

For Windows

在PHP的解压目录中找到php.ini-development直接复制,然后改名为php.ini

修改 php.ini 文件

去掉前面分号,启用模块

extension=bz2
extension=curl
extension=fileinfo
extension=gd
extension=gettext
extension=gmp
extension=intl
extension=mbstring
extension=exif
extension=mysqli
extension=openssl
extension=pdo_firebird
extension=pdo_mysql

;修改成 你的路径
extension_dir = "d:/Programs/php8/ext"
;设置时区
date.timezone = Asia/Shanghai

测试 test.php

<?php
    # phpinfo()
    $conn=mysqli_connect("localhost","root","123456",'testdb');
    if($conn){
        echo"ok";
    }else{
        echo"error";    
    }
?>

输出OK 即表明配置成功。

我,秦始皇,打钱!