Centos7配置Apache+Mysql+PHP(含mysqli和pdo_mysql)
不得不说,肝疼 =。=
安装Apache
首先说一下我用的Apache的版本:httpd-2.4.33,不是用yum一键安装的,是用安装包+命令行一步一步装的。下面进入安装正题:
- 下载安装包:
wget http://archive.apache.org/dist/httpd/httpd-2.4.33.tar.gz
成功后,应该是下载到了/root路径下,我把它移动到了/usr/local/路径下,方便解压安装。
- 到/usr/local/路径下,解压文件:
tar -xzf httpd-2.4.33.tar.gz
并跳转目录
cd httpd-2.4.33.tar.gz
- 安装依赖:
yum install openssl-devel
还要安装gcc等,./configure时会报错,则说明缺少这些工具,自行搜索用yum安装即可。
- 安装:
./configure --prefix=/usr/local/apache --disable-proxy --enable-ssl --with-ssl --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
make
make install
我装过n次Apache,第一次没有报缺少apr、apr-util、pcre的错,后面几乎都报错来着,,,这个需要自行安装这三个东西:下载安装包,解压,./configure,make,make install就好了,要注意的是要安装pcre,装了pcre2会出错。
- 启动:
/usr/local/apache/bin/apachectl start
如果报错:
解决:编辑/usr/local/apache/conf/目录下的httpd.conf文件,搜索#ServerName,添加:
ServerName localhost:80
再重启即可
/usr/local/apache/bin/apachectl restart
如果使用curl+域名的命令可以得到index.html的源码则说明安装启动成功:
在浏览器输入地址,也可以看到“It works!”的字样。
安装Mysql
我用的Mysql的版本:mysql-8.0.18。下面进入安装正题:
- 下载安装包:
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
- 将安装包加入到本地:
yum localinstall mysql80-community-release-el7-1.noarch.rpm
- 安装mysql:
yum install mysql-community-server
- 权限设置:
chown mysql:mysql -R /var/lib/mysql
- 初始化mysql:
mysqld --initialize
- 开启mysql:
systemctl start mysqld
- 查看默认密码,然后登录数据库,修改密码:
查看默认密码:
cat /var/log/mysqld.log | grep password;
用默认密码登录:
mysql -u root -p
修改密码,输入新密码
"root"@"localhost" IDENTIFIED BY "1234";
要注意mysql中输入的命令要加分号;哦=。=
安装PHP
Emmmm,我用的PHP的版本:PHP-7.2.6。下面进入安装正题:
- 安装依赖:
yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel
这酸爽=。=
- 下载安装包,解压文件:
下载:
wget http://am1.php.net/distributions/php-7.2.6.tar.gz
我也把安装包放到了/usr/local/目录下。
解压:
tar -xzf php-7.2.6.tar.gz
进入目录:
cd /usr/local/php-7.2.6
- 安装:
./configure --prefix=/usr/local/php7 --exec-prefix=/usr/local/php7 --bindir=/usr/local/php7/bin --sbindir=/usr/local/php7/sbin --libdir=/usr/local/php7/lib/php --mandir=/usr/local/php7/php/man --with-config-file-path=/usr/local/php7/etc --with-mysql-sock=/var/lib/mysql/mysql.sock --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-curl=/usr/bin/curl --with-openssl --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-pcntl --enable-sockets --enable-soap --enable-session --enable-opcache --enable-fpm --with-fpm-user=apache --with-fpm-group=apache --without-gdbm --with-apxs2=/usr/local/apache/bin/apxs --disable-fileinfo
make
make install
- 配置Apache:
修改/usr/local/apache/conf/目录下的httpd.conf文件,找到LoadModule php7_module modules/libphp7.so,添加以下三行信息:
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
再找到DirectoryIndex index.html,将index.html改为index.php,保存即可。
至此,在/usr/local/apache/htdocs/目录下添加index.php文件,文件内容为:
<?
php phpinfo();
?>
重启apache:
/usr/local/apache/bin/apachectl restart
在浏览器输入地址,就可以看到PHP的配置信息了,PHP安装运行成功。
安装pdo_mysql
以为到这里就结束了吗!NoNoNo,Emmmm,最最肝疼的来了。由于php代码中用连接mysql数据库,所以还要安装mysqli和pdo_mysql这两个扩展包。
可以使用命令:
php -m
来查看目前都装了哪些扩展包,如果没有我说的这俩,那就往下看吧。
- 进入php源代码扩展包的目录:
cd /usr/local/php-7.2.6/ext
- 先来说pdo_mysql:
进入pdo_mysql的目录
cd pdo_mysql
phpize一下:
/usr/local/php/bin/phpize
编译:
./configure --with-php-config=/usr/local/php7/bin/php-config --with-pdo-mysql=/usr/local/mysql
安装:
make
make install
成功后会生成一个pdo_mysql.so的类似路径:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
把pdo_mysql.so加入php.ini,如果与我上述安装步骤一致,php.ini在/usr/local/php7/etc目录下,添加:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/pdo_mysql.so
并找到extension=pdo_mysql这一句,将前面的;分号去掉,保存。
重启一下apache,在用php -m的命令应该会出现pdo_mysql。
- 先来说mysqli:
与pdo_mysql的安装类似,进入mysqli的目录
cd /usr/local/php-7.2.6/ext/mysqli
phpize一下:
/usr/local/php/bin/phpize
为了提前避免失败,装一下这个:
yum install mysql-devel
然后编译:
./configure --with-php-config=/usr/local/php7/bin/php-config --with-mysqli=/usr/bin/mysql_config
安装:
make
make install
成功后会生成一个mysqli.so的类似路径:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
把mysqli.so加入php.ini,php.ini在/usr/local/php7/etc目录下,添加:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/mysqli.so
并找到extension=mysqli这一句,将前面的;分号去掉,保存。
重启一下apache,在用php -m的命令应该会出现mysqli。
PS:如果安装好了mysqli和pdo_mysql的话,在浏览器上显示的phpinfo中会有:
祝你成功(。・_・。)
其他
又以为结束了吗!此处附上一些我踩的坑ε=(´ο`*)))
- php安装make出现“collect2:error:ldreturned1exitstatus”
错误提示:
collect2: error: ld returned 1 exit status
解决办法:
在php-7.2.6这个源码目录下找到 Makefile文件,打开找到 EXTRA_LIBS这一行,在行末添加 ‘ -llber ‘ 保存退出再次make
EXTRA_LIBS 行:
EXTRA_LIBS = -lcrypt -lz -lexslt -lcrypt -lrt -lmysqlclient -lmcrypt -lldap -liconv
-lfreetype -lpng -lz -ljpeg -lcurl -lz -lrt -lm -ldl -lnsl -lxml2 -lz -lm -ldl -lssl
-lcrypto -lcurl -lxml2 -lz -lm -ldl -lssl -lcrypto -lxml2 -lz -lm -ldl -lxml2 -lz -
lm -ldl -lcrypt -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lxml2 -
lz -lm -ldl -lxslt -lxml2 -lz -ldl -lm -lcrypt -llber
make之前!
一定要先使用一下make clean命令,不然还是会报错=。=
- PHP连接mysql8.0出错“SQLSTATE[HY000] [2054] The server requested authentication method unknow…
这可能是mysql默认使用 caching_sha2_password
作为默认的身份验证插件,而不再是 mysql_native_password
,但是客户端暂时不支持这个插件导致的。
解决:
在打开/etc路径下的my.cnf文件,在 [mysqld]
中添加下边的代码
default_authentication_plugin=mysql_native_password
然后重启mysql
service mysqld restart
- phpinfo中显示的php.ini路径不对:
Configuration File(php.ini)Path 是apache默认的php.ini路径,
Loaded Configuration File是实际php.ini的路径。我之前出现了这一行为空的情况。
解决:
在/usr/local/apache/conf路径下,打开httpd.conf文件,在最后添加一行:
PHPIniDir /usr/local/php7/etc/php.ini
重启apache,phpinfo显示的路径就会正确了。
- 以为还没结束吗!我写不下去了。。。装这东西装了好久,中途报错无数,记不清了=。=如果以后还有幸(咳咳)再配一遍,我再来完善。
上一篇: php 获取远程网页内容的函数
下一篇: 你知道经期能喝黑芝麻糊吗