LAMP架构介绍
LAMP是 linux Apache MySQL PHP的简写,即把Apache MySQL PHP 安装在linux系统上,组成一个环境来运行PHP网站。这里的Apache是httpd服务。这些可以安装在一个机器上,也可以安装在多台机器上,但是httpd和PHP安装在一台机器上(php作为httpd的一个模块存在的。 他们两者必须要在一起,才能实现效果)
Q:httpd和php为什么需要组合在一起,不能分开部署在不同的节点使用网络来进行数据协同吗?
A:因为我们使用的方式是,php作为httpd的一个模块存在的。 他们两者必须要在一起,才能实现效果。当然,如果你把php做成以fastcgi的形式,这样httpd可以在另外的机器上调用它,这样用就跟lnmp类似了。
MySQL_MariaDB介绍
文字版:
MySQL是一个关系型数据库,由mysql ab公司开发,mysql在2008年被sun公司收购(10亿刀),2009年sun公司被oracle公司收购(74亿刀)
MySQL官网https://www.mysql.com 最新版本5.7GA/8.0DMR
MySQL5.6变化比较大,5.7性能上有很大提升
Mariadb为MySQL的一个分支,官网https://mariadb.com/最新版本10.2
MariaDB主要由SkySQL公司(现更名为MariaDB公司)维护,SkySQL公司由MySQL原作者带领大部分原班人马创立.
Mariadb5.5版本对应MySQL的5.5,10.0对应MySQL5.6
(Community 社区版本,Enterprise 企业版,GA(Generally Available)指通用版本,在生产环境中用的,DMR(Development Milestone Release)开发里程碑发布版,RC(Release Candidate)发行候选版本,Beta开放测试版本,Alpha内部测试版本)
MySQL安装
MySQL的几个常用安装包:rpm、源码、二进制免编译
追求性能可以自己编译,否则可以使用二进制免编译
下载地址可到r.aminglinux.com下查找
下载MySQL到指定目录下(/usr/local/src).
[root@linux7-128 ~]# cd /usr/local/src/
查看目录下有哪些文件
[root@linux7-128 src]# ls
httpd-2.4.33 httpd-2.4.33.tar.gz
查看自己系统是多少位的,X86_64代表是64位
[root@linux7-128 src]# uname -a
Linux linux7-128 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
下载MySQL5.6版本64位的
[root@linux7-128 src]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
--2018-09-07 22:11:05-- http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
正在解析主机 mirrors.163.com (mirrors.163.com)... 59.111.0.251
正在连接 mirrors.163.com (mirrors.163.com)|59.111.0.251|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:328882304 (314M) [application/octet-stream]
正在保存至: “mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz”
100%[===============================================================================>] 328,882,304 891KB/s 用时 4m 52s
2018-09-07 22:15:57 (1.08 MB/s) - 已保存 “mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz” [328882304/328882304])
解压
[root@linux7-128 src]# tar zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
目录改名为mysql
[root@linux7-128 src]# mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql
进入到mysql目录下
[root@linux7-128 src]# cd /usr/local/mysql/
创建一个新用户mysql,并且新建一个data目录用于存放数据,如果data已存在可以省略
[root@linux7-128 mysql]# useradd mysql
[root@linux7-128 mysql]# mkdir /data/
mkdir: 无法创建目录"/data/": 文件已存在
[root@linux7-128 mysql]# ls
bin COPYING data docs include lib man mysql-test README scripts share sql-bench support-files
初始化,生成/data/mysql目录,如果mysql想要启动必须要有一个自带的库mysql
[root@linux7-128 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
Data::Dumper --提示少了一个模块Dumper
搜索含有此模块的包
[root@linux7-128 mysql]# yum list |grep perl |grep -i dumper
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
perl-Data-Dumper.x86_64 2.145-3.el7 base
perl-Data-Dumper-Concise.noarch 2.020-6.el7 epel
perl-Data-Dumper-Names.noarch 0.03-17.el7 epel
perl-XML-Dumper.noarch 0.81-17.el7 base
依次安装后尝试初始化,如果不行,继续安装下一个包
[root@linux7-128 mysql]# yum install -y perl-Data-Dumper.x86_64
[root@linux7-128 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
没有报错,初始化完成。
[root@linux7-128 mysql]# echo $?
0 --echo $? 是检测上一条命令是否执行成功
此步骤可以省略
拷贝配置文件到/etc/目录下并改名为my.cnf,如果不放到etc目录下那么启动时要做一个指定
[root@linux7-128 mysql]# cp support-files/my-default.cnf /etc/my.cnf
其实/etc下默认已经有了一个my.cnf
[root@linux7-128 mysql]# ls /etc/my.cnf
/etc/my.cnf
查看是由哪个包生成的my.cnf文件
[root@linux7-128 mysql]# rpm -qf /etc/my.cnf
mariadb-libs-5.5.56-2.el7.x86_64
--centos7可能默认安装了此包
自带的/etc/my.cnf也可以使用,前提是要更改下文件设置
[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
#!includedir /etc/my.cnf.d
- 将
datadir
位置修改为/data/mysql
- 将
socke
位置修改为/tmp/mysql.sock
- 注释掉
log-error=/var/log/mariadb/mariadb.log
- 注释掉
pid-file=/var/run/mariadb/mariadb.pid
- 注释掉
!includedir /etc/my.cnf.d
复制启动脚本到/etc/init.d
下并命名为mysqld
[root@linux7-128 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
修改配置文件/etc/init.d/mysqld
- 指定程序目录
basedir=/usr/local/mysql
- 指定数据目录
datadir=/data/mysql
查看文件权限,如果不是755修改为755
[root@linux7-128 mysql]# ls -l /etc/init.d/mysqld
-rwxr-xr-x 1 root root 10592 9月 7 23:16 /etc/init.d/mysqld
设置脚本文件为开机启动
[root@linux7-128 mysql]# chkconfig --add mysqld
[root@linux7-128 mysql]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
mysqld 0:关 1:关 2:开 3:开 4:开 5:开 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:关 4:开 5:开 6:关
也可以手动启动
[root@linux7-128 mysql]# service mysqld start
Starting MySQL.Logging to '/data/mysql/linux7-128.err'.
. SUCCESS!
查看进程
[root@linux7-128 mysql]# ps aux |grep mysql
root 2349 0.0 0.1 11816 1624 pts/0 S 23:20 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/linux7-128.pid
mysql 2488 3.3 44.6 1304804 449804 pts/0 Sl 23:20 0:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=linux7-128.err --pid-file=/data/mysql/linux7-128.pid --socket=/tmp/mysql.sock
root 2521 0.0 0.0 112720 984 pts/0 S+ 23:21 0:00 grep --color=auto mysql
查看监听端口,为3306
[root@linux7-128 mysql]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1220/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1012/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1011/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1123/master
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 1012/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1011/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1123/master
tcp6 0 0 :::3306 :::* LISTEN 2488/mysqld
如果没有把脚本放到/etc/init.d下,或者根本没有这样的启动脚本模板去拷贝,可以用/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql
来启动,并且在最后可以加上&放到后台
[root@linux7-128 mysql]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &
[1] 2662
[root@linux7-128 mysql]# 180907 23:29:31 mysqld_safe Logging to '/data/mysql/linux7-128.err'.
180907 23:29:31 mysqld_safe Starting mysqld daemon with databases from /data/mysql
[root@linux7-128 mysql]# !ps
ps aux |grep mysql
root 2662 0.0 0.1 113304 1616 pts/0 S 23:29 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql
mysql 2796 3.2 44.6 1304804 449800 pts/0 Sl 23:29 0:00 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=linux7-128.err --pid-file=linux7-128.pid --socket=/tmp/mysql.sock
root 2834 0.0 0.0 112720 984 pts/0 S+ 23:29 0:00 grep --color=auto mysql
可以看到也是启动成功了的,进程里就是刚才启动的命令
注意:–defaults-file=/etc/my.cnf zhid 指定配置文件路径
关闭进程
[root@linux7-128 mysql]# killall mysqld
[root@linux7-128 mysql]# 180907 23:34:01 mysqld_safe mysqld from pid file /data/mysql/linux7-128.pid ended
[1]+ 完成 /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql
一般不要用kill,使用killall相对安全一下
killall会先停止读写操作,把已有的写完后,就杀死MySQL服务。
而kill -9 pid 会啥都不管,直接杀掉进程。这样做很可能导致数据的丢失甚至损坏表
MySQL有两个引擎:innodb (小), myisam(大)
MariaDB安装
安装方法和MySQL基本类似,相同步骤参考上面,不多赘述。
1.进入/usr/local/src/
目录下
[root@linux7-128 ~]# cd /usr/local/src/
2.下载MariaDB包,包很大,耐心等待,可以通过-b选项放到后台下载
[root@linux7-128 src]# wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
3.解压
[root@linux7-128 src]# tar zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
4.移动并改名为mariadb
[root@iz2zef1im6qv29viqhtk3qz src]# mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb
5.进入/usr/local/mariadb下
cd /usr/local/mariadb/
6.初始化
[root@iz2zef1im6qv29viqhtk3qz mariadb]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mariadb
Installing MariaDB/MySQL system tables in '/data/mariadb' ...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:
'./bin/mysqladmin' -u root password 'new-password'
'./bin/mysqladmin' -u root -h iz2zef1im6qv29viqhtk3qz password 'new-password'
Alternatively you can run:
'./bin/mysql_secure_installation'
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.
You can start the MariaDB daemon with:
cd '.' ; ./bin/mysqld_safe --datadir='/data/mariadb'
You can test the MariaDB daemon with mysql-test-run.pl
cd './mysql-test' ; perl mysql-test-run.pl
Please report any problems at http://mariadb.org/jira
The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/
[root@iz2zef1im6qv29viqhtk3qz mariadb]# echo $?
0
7.拷贝配置文件
配置文件在support-files/里,不同的配置文件代表着里面的数值大小不一样。根据内存大小选择
cp support-files/my-small.cnf /usr/local/mariadb/my.cnf
8.拷贝启动脚本
[root@iz2zef1im6qv29viqhtk3qz mariadb]# cp support-files/mysql.server /etc/init.d/mariadb
9.编辑配置文件vim /usr/local/mariadb/my.cnf
更改配置着重看[mysqld]部分,基本上不需要更改。
10.编辑启动脚本vim /etc/init.d/mariadb
- 更改
basedir=/etc/local/mariadb
- 更改
datadir=/data/mariadb
- 下面新增配置文件路径
conf=$basedir/my.cnf
- start配置里新增变量
--defaults-file="$conf"
basedir=/usr/local/mariadb
datadir=/data/mariadb
conf=$basedir/my.cnf
case "$mode" in
'start')
# Start daemon
# Safeguard (relative paths, core dumps..)
cd $basedir
echo $echo_n "Starting MySQL"
if test -x $bindir/mysqld_safe
then
# Give extra arguments to mysqld with the my.cnf file. This script
# may be overwritten at next upgrade.
$bindir/mysqld_safe 此处加上括号内变量(--defaults-file="$conf") --datadir="$datadir" --pid-file="$mysqld_pid_file_path" "$@" &
wait_for_ready; return_value=$?
# Make lock for RedHat / SuSE
if test -w "$lockdir"
then
touch "$lock_file_path"
fi
11.启动
启动前要先关闭掉mysqld服务,两者监听端口一样,避免冲突。
/etc/init.d/mariadb start
查看端口
[root@iz2zef1im6qv29viqhtk3qz mariadb]# netstat -ltnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 948/sshd
tcp6 0 0 :::3306 :::* LISTEN 11450/mysqld
知识点
假如一台机器上,即安装了mysql,又安装了mariadb。就需要定义其中一个的启动脚本,不能都使用/etc/init.d/my.cnf,如果只安装一种,不会出现这种问题。
查看mariadb进程时,会出现/data/mysql就是因为调用了/etc/init.d/my.cnf,因为我们本身指定的/usr/local/mariadb/my.cnf没有定义–datadir参数,所以它还会去/etc/init.d/my.cnf里找,可以注释掉来解决。
正确的做法:编辑本身指定的配置文件/usr/local/mariadb/my.cnf没,添加datadir参数
datadir =/usr/local/mariadb/data/mariadb
注意添加到[mysqld]下
重启服务查看进程。
细节:阿里云上安装要指定全路径,不然会指定到别的地方去,还要注意权限问题。
Apache安装(hppd)
Apache是一个基金会的名字,httpd才是我们要安装的软件包,早期它的名字就叫apache
Apache官网www.apache.org
apr和apr-util是一个通用函数库,他能让httpd不去关心底层的操作系统平台,可以很方便的移植(linux到Windows)
1.下载版本httpd2.4
三个包都得下载(下载到/usr/local/src)
wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.34.tar.gz
wget http://mirrors.cnnic.cn/apache/apr/apr-1.6.3.tar.gz
wget http://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.gz
yum 下载的apr和我们的httpd2.4版本是不匹配,所以要安装源码包
2.解压
tar zxvf httpd-2.4.34.tar.gz
tar zxvf apr-1.6.3.tar.gz
tar zxvf apr-util-1.6.1.tar.gz
3.先安装apr
# cd apr-1.6.3
# ./configure --prefix=/usr/local/apr
# echo $?
0
# make && make install
# echo $?
0
# ls /usr/local/apr/
bin build-1 include lib
4.安装apr-util
# cd /usr/local/src/apr-util-1.6.1
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# echo $?
0
# make && make install
提示:fatal error: expat.h: No such file or directory #include <expat.h>
解决办法:yum install expat-devel -y
# ls /usr/local/apr-util/
bin include lib
Apache和PHP都会支持以一个模块的形式存在。模块实际上是一个文件,是一个后缀名为.so的文件,PHP以Apache的一个模块存在。Apache算是一个进程,他可以通过配置文件指定路径的方式调用模块。
5.安装httpd
# cd /usr/local/src/httpd-2.4.34
# ./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most
释义:要加上两个依赖包apr和apr-util, --enable-so(能动态扩展模块),--enable-mods-shared=most(指定模块为大多数)
报错:configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
解决方法:
[root@iz2zef1im6qv29viqhtk3qz httpd-2.4.34]# yum list |grep pcre
pcre.x86_64 8.32-17.el7 @anaconda
ghc-pcre-light.x86_64 0.4-13.el7 epel
ghc-pcre-light-devel.x86_64 0.4-13.el7 epel
mingw32-pcre.noarch 8.38-1.el7 epel
mingw32-pcre-static.noarch 8.38-1.el7 epel
mingw64-pcre.noarch 8.38-1.el7 epel
mingw64-pcre-static.noarch 8.38-1.el7 epel
pcre.i686 8.32-17.el7 base
pcre-devel.i686 8.32-17.el7 base
pcre-devel.x86_64 8.32-17.el7 base
pcre-static.i686 8.32-17.el7 base
pcre-static.x86_64 8.32-17.el7 base
pcre-tools.x86_64 8.32-17.el7 base
pcre2.i686 10.23-2.el7 base
pcre2.x86_64 10.23-2.el7 base
pcre2-devel.i686 10.23-2.el7 base
pcre2-devel.x86_64 10.23-2.el7 base
pcre2-static.i686 10.23-2.el7 base
pcre2-static.x86_64 10.23-2.el7 base
pcre2-tools.x86_64 10.23-2.el7 base
pcre2-utf16.i686 10.23-2.el7 base
pcre2-utf16.x86_64 10.23-2.el7 base
pcre2-utf32.i686 10.23-2.el7 base
pcre2-utf32.x86_64 10.23-2.el7 base
一般我们安装都是 包名-devel\lib的包
安装# yum install -y pcre-devel
然后重新编译安装
# ./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most
# echo $?
0
# make && make install
报错:collect2: error: ld returned 1 exit status
make[2]: *** [htpasswd] Error 1
make[2]: Leaving directory `/usr/local/src/httpd-2.4.34/support'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/httpd-2.4.34/support'
make: *** [all-recursive] Error 1
解决办法:
重新编译安装apr-util,然后在重新编译安装httpd,编译安装之前先make clean一下。
# ./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most
# echo $?
0
# make && make install
# echo $?
0
# cd /usr/local/apache2.4/
# ls
bin build cgi-bin conf error htdocs icons include logs man manual modules
查看Apache加载的模块
[root@iz2zef1im6qv29viqhtk3qz apache2.4]# /usr/local/apache2.4/bin/httpd -M
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.153.149. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
mpm_event_module (static)
authn_file_module (shared)
authn_core_module (shared)
authz_host_module (shared)
authz_groupfile_module (shared)
authz_user_module (shared)
authz_core_module (shared)
access_compat_module (shared)
auth_basic_module (shared)
reqtimeout_module (shared)
filter_module (shared)
mime_module (shared)
log_config_module (shared)
env_module (shared)
headers_module (shared)
setenvif_module (shared)
version_module (shared)
unixd_module (shared)
status_module (shared)
autoindex_module (shared)
dir_module (shared)
alias_module (shared)
(/usr/local/apache2.4/bin/apachectl -M 也是能查看到加载的模块,其实这里的apachectl就是调用httpd这个文件)
启动
/usr/local/apache2.4/bin/apachectl start
查看是否安装成功
# ps aux |grep httpd
root 20337 0.0 0.2 95476 2500 ? Ss 15:33 0:00 /usr/local/apache2.4/bin/httpd -k start
daemon 20338 0.0 0.2 382304 2372 ? Sl 15:33 0:00 /usr/local/apache2.4/bin/httpd -k start
daemon 20339 0.0 0.2 382304 2372 ? Sl 15:33 0:00 /usr/local/apache2.4/bin/httpd -k start
daemon 20340 0.0 0.2 382304 2372 ? Sl 15:33 0:00 /usr/local/apache2.4/bin/httpd -k start
root 20425 0.0 0.0 112660 968 pts/1 R+ 15:34 0:00 grep --color=auto httpd
# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 20337/httpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 948/sshd
tcp6 0 0 :::3306 :::* LISTEN 13248/mysqld
安装PHP5
PHP官网:www.php.net
当前主流版本为5.6/7.1
目前很多的企业仍然是使用PHP5甚至更老的版本,很多老程序不支持PHP7。
1.进入目录/usr/local/src
# cd /usr/local/src
2.下载源码包,解压
# wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2
# tar -jxvf php-5.6.32.tar.bz2
3.进入目录编译
# cd /usr/local/src/php-5.6.32
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
- apxs2:apache的工具,自动的把扩展模块放到apache目录,且自动修改配置文件
报错及解决
出现报错信息1:configure: error: xml2-config not found. Please check your libxml2 installation.
解决方法:
安装xml2库
# yum list |grep xml2
libxml2.x86_64 2.9.1-6.el7_2.3 @anaconda
libxml2.i686 2.9.1-6.el7_2.3 base
libxml2-devel.i686 2.9.1-6.el7_2.3 base
libxml2-devel.x86_64 2.9.1-6.el7_2.3 base
libxml2-python.x86_64 2.9.1-6.el7_2.3 base
libxml2-static.i686 2.9.1-6.el7_2.3 base
libxml2-static.x86_64 2.9.1-6.el7_2.3 base
mingw32-libxml2.noarch 2.9.3-1.el7 epel
mingw32-libxml2-static.noarch 2.9.3-1.el7 epel
mingw64-libxml2.noarch 2.9.3-1.el7 epel
mingw64-libxml2-static.noarch 2.9.3-1.el7 epel
python-xml2rfc.noarch 2.5.2-2.el7 epel
tinyxml2.x86_64 2.1.0-2.20140406git6ee53e7.el7
tinyxml2-devel.x86_64 2.1.0-2.20140406git6ee53e7.el7
xml2.x86_64 0.5-7.el7 epel
# yum install -y libxml2-devel
继续编译
出现报错信息2:configure: error: Cannot find OpenSSL's <evp.h>
解决方法:
安装OpenSSL库
# yum install -y openssl-devel
继续编译
出现报错信息3:configure: error: Please reinstall the BZip2 distribution
解决方法:
安装Bzip2
# yum install -y bzip2-devel
继续编译
出现报错信息4:configure: error: jpeglib.h not found.
解决方法:
安装jpeglib.h
# yum install -y libjpeg-devel
出现报错信息5:configure: error: png.h not found.
解决方法:
安装png.h
# yum install -y libpng-devel
出现报错信息6:configure: error: freetype-config not found.
解决方法:
安装freetype-config
# yum install -y freetype-devel
出现报错信息7:configure: error: mcrypt.h not found. Please reinstall libmcrypt.
解决方法:
安装mcrypt
# yum install -y libmcrypt-devel
安装成功
# echo $?
0
4.make
# make
# echo $?
0
5.make install
# make install
# echo $?
0
6.查看目录
# cd /usr/local/php/
# ls
bin etc include lib php
查看核心二进制文件大小
# du -sh /usr/local/php/bin/php
36M /usr/local/php/bin/php
查看他和Apache结合所用到的模块的大小
# du -sh /usr/local/apache2.4/modules/libphp5.so
36M /usr/local/apache2.4/modules/libphp5.so
这时候即使删掉PHP目录也没关系,他要的仅仅是下面的模块libphp5.so
查看PHP所加载的模块
# /usr/local/php/bin/php -m
[PHP Modules]
bz2
Core
ctype
date
dom
ereg
exif
fileinfo
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
mysql
mysqli
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib
[Zend Modules]
和httpd -M功能类似,这些模块全部都是静态的,也能够扩展模块。
php安装完后不需启动
他是作为httpd的一个扩展模块形式存在的
# /usr/local/apache2.4/bin/httpd -M
省略..
php5_module (shared)
查看Apache的配置文件
/usr/local/apache2.4/conf/httpd.conf
这里可以找到一行
LoadModule php5_module modules/libphp5.so
上面用#
号注释掉的都不会显示出来,不会被加载,如果想用哪个模块就把#
号去掉。
安装后:把php的参考配置文件复制到我们定义的php配置文件路径
# cd /usr/local/src/php-5.6.32
# cp php.ini-production /usr/local/php/etc/php.ini
/usr/local/php/etc
,这个是在执行.configure时就定义了配置文件路径
使用命令/usr/local/php/bin/php -i |less
加-i可以查看到PHP文件的信息
- php.ini-production :适应在生产环境中使用(我选用这个)
- php.ini-development:适应在开发环境中使用
安装PHP7
1.进入到 /usr/local/src目录
# cd /usr/local/src
2.下载PHP7包
# wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
3.解压
# tar jxvf php-7.1.6.tar.bz2
4.编译安装
# cd /usr/local/src/php-7.1.6
# ./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
# echo $?
0
# make
# echo $?
0
# make install
# echo $?
0
apache2.4下现在有两个PHP模块
# ls /usr/local/apache2.4/modules/libphp*
/usr/local/apache2.4/modules/libphp5.so /usr/local/apache2.4/modules/libphp7.so
# du -sh /usr/local/apache2.4/modules/libphp7.so
37M /usr/local/apache2.4/modules/libphp7.so
查看apache2.4加载了多少个PHP
# /usr/local/apache2.4/bin/apachectl -M
省略...
php5_module (shared)
php7_module (shared)
复制配置文件到定义的路径
# cd /usr/local/src/php-7.1.6
# cp php.ini-production /usr/local/php7/etc/php.ini
根据自己的需求使用哪个版本的PHP(5或7,前提是两个都安装有)?
答:修改配置文件
vim /usr/local/apache2.4/conf/httpd.conf
不想用哪个把哪个注释掉
LoadModule php5_module modules/libphp5.so
LoadModule php7_module modules/libphp7.so
Apache和PHP结合
修改apache配置文件
httpd主配置文件/usr/local/apache2.4/conf/httpd.conf
1.修改ServerName,把前面注释的#
取消
在启动httpd的时候,会提示要定义一个ServerName,若定义了则在启动时就不会再提示
2.如果安装了PHP5和PHP7,要注释掉一个,避免冲突
这时在Windows浏览器中访问Linux的IP地址会访问不了
首先检查网络原因
第一步:打开cmd,ping linuxIP地址;
第二步:检查80端口是否打开 telnet linuxIP地址 80
(若无telnet工具,则在 控制面板–>程序–>启动或关闭window功能->选中telnet客户端)
如果访问不了80端口,那么需要在Linux中添加80端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
这时,就可以在浏览器中打开了
3.修改Require (不修改的话,在浏览器访问时会出现403错误)
将此位置的denied改为granted
前面之所以能够访问LinuxIP地址是因为
下面的
DocumentRoot "/usr/local/apache2.4/htdocs"
<Directory "/usr/local/apache2.4/htdocs">
省略...
#
# Controls who can get stuff from this server.
#
Require all granted
如果将此处的Require all granted
修改为 Require all denied
,然后重新加载配置文件,那么就不允许浏览器访问了。
知识点:检查配置文件语法是否对
# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
重新加载配置文件# /usr/local/apache2.4/bin/apachectl graceful
这时候浏览器访问会出现提示
所以要恢复原样,将配置文件里都设置为Require all granted
,为了防止在打开虚拟主机配置文件时显示403。
4.添加一行和php相关的内容(不添加php无法解析)
AddType application/x-httpd-php .php
5.修改一行索引页语句(加上了index.php时在访问地址时。可以省略地址栏的index.php)
DirectoryIndex index.html index.php
测试配置文件是否正确,然后重新加载
# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
# /usr/local/apache2.4/bin/apachectl graceful
测试php是否能正常解析
创建一个php测试文本:vi /usr/local/apache2.4/htdocs/1.php
输入如下内容
<?php
phpinfo();
?>
证明支持解析
不能正确解析解决方法
第一步: 查看php5模块是否加载
/usr/local/apache2.4/bin/apachectl -M
第二步:查看是否有libphp5.so文件:
ls /usr/local/apache2.4/modules/libphp5.so
第三步:配置文件是否加了
AddType application/x-httpd-php .php
(.php前面有个空格)
第四步:DirectoryIndex index.html index.php
是否填写正确
/usr/local/apache2.4/bin/apachectl -t
(在修改完配置文件后,执行 /usr/local/apache2.4/bin/apachectl -t
判断配置文件是否修改正确)
重启php服务: /usr/local/apache2.4/bin/apachectl restart
扩展
mysql5.5源码编译安装 http://www.aminglinux.com/bbs/thread-1059-1-1.html
mysql5.7二进制包安装(变化较大) http://www.apelearn.com/bbs/thread-10105-1-1.html
apache dso https://yq.aliyun.com/articles/6298
apache apxs https://wizardforcel.gitbooks.io/apache-doc/content/51.html
apache工作模式 http://www.cnblogs.com/fnng/archive/2012/11/20/2779977.html
php中mysql,mysqli,mysqlnd,pdo到底是什么 http://blog.csdn.net/u013785951/article/details/60876816
查看编译参数 http://ask.apelearn.com/question/1295