由于本人没学过php,此次文章仅用于记录我此次实验如何一步步搭建php,访问数据库并实现公网访问,如果和我一样是新手的可以按照下面教程,应该不会出错。(如果有错,可以指出来讨论一下,谢谢!)
目录
11.2 第八步连接问题PHP Fatal error: Call to undefined function mysqli_connect()
1、安装httpd
下载安装
yum install -y httpd
启动服务(注意:这里一定要开启服务,否则后面可能就会出错)
//开启服务
systemctl start httpd.service
//查看服务状态
service httpd status
2、安装php
在安装之前,我们可以查看是否已经安装php了
在命令行输入
php -v
如果提示命令不存在,则表示没有安装,否则,我们先卸载掉php,然后在重新安装(以免出错)
yum remove -y php
然后再下载php
yum install -y php
然后就进行测试,编辑php首页
cd /var/www/html
vi index.php
按下键盘字母【i】进行编辑,在文件里输入下面内容
<?php
phpinfo();
?>
然后保存文件,通过curl 命令达到浏览器访问的效果(如果成功返回的会是页面的html代码),或者直接在浏览器上输入自己的公网ip地址(注:这里省略的端口号为80,且httpd服务一定要记得打开,否则就会提示拒绝访问)
curl localhost
如果是执行命令的话,只要出现一大长串的html代码,且里面包括php的,一般就是成功了,如果是浏览器访问,出现下面页面表示成功
3、安装nginx
添加资源库(新建文件)
vi /etc/yum.repos.d/nginx.repo
在文件内输入下面内容
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
下载安装
yum install -y nginx
由于nginx的端口号默认为80,为了避免冲突,所以这里需要修改一下nginx的端口
先查看nginx的配置文件
nginx -t
查看/etc/nginx/nginx.conf文件,发现里面没有端口信息,但是却包含了另一个配置文件目录/etc/nginx/conf.d/,故执行
cd /etc/nginx/conf.d/
ls
编辑文件
vi default.conf
原来下面的listen是80,我改成了88(根据自己需要改变端口,只要不会和其他的冲突就行)
开启服务
service nginx start
测试是否成功
curl localhost:88
或者浏览器输入公网ip:88,显示下面页面
注:如果不可以,看看是不是防火墙的问题,详情请看第10步。
4、安装php-fpm
何为php-fpm ?
php-fpm即php-Fastcgi Process Manager。
php-fpm是 FastCGI 的实现,并提供了进程管理的功能。
进程包含 master 进程和 worker 进程两种进程。
master 进程只有一个,负责监听端口,接收来自 Web Server的请求,
而 worker 进程则一般有多个(具体数量根据实际需要配置), 每个进程内部都嵌入了一个 PHP 解释器,是 PHP代码真正执行的地方。
也就是说想要执行PHP文件,必须下载这个工具
查看自己是否安装了php-fpm
php-fpm -v
出现上面这样子代表已安装,可以先卸载在安装(以免出错,我就是在这一步,由于前一次安装后似乎改了什么,导致后面数据库访问出错,然后重新卸载安装一次就好了)
卸载
yum remove -y php-fpm
下载安装
yum install -y php-fpm.x86_64
开启服务
service php-fpm start
5、让nginx可以执行php
修改配置
vi /etc/nginx/conf.d/default.conf
将下面location前面的注释去掉,并修改root的路径(修改前)
修改后
注:需要保证root 和fastcgi_parm 的路径一样。root 指能被外网访问的php 文件的存放路径。
使用nginx -t 命令可以查看nginx 的配置文件是否有错误:
nginx -t
无误后重启服务
service nginx restart
测试公网访问php
cd /usr/share/nginx/html/
新建文件
vi test.php
添加文件内容
<?php
phpinfo();
?>
执行命令
curl localhost:88/test.php
或者浏览器输入公网ip:88/test.php
出现上面的结果就代表成功了
6、创建数据库
这里用的是mysql数据库
详情请看链接:Linux配置MySql数据库
7、安装php-mysql
这个的作用就有点类似于java里面的mysql-connector-java.jar 包,让php与mysql进行连接
下载安装
yum -y install php-mysql
启动服务
systemctl restart php-fpm
8、PHP连接mysql数据库
在nginx 的php 目录下新建一个php 文件:
vi /usr/share/nginx/html/mysqlTest.php
在文件内添加内容
<?php
header("Content-type: text/html;charset=utf-8");
$servername = "127.0.0.1"; //这里我输入localhost或者公网ip都会出错,原因暂时不详
$username = "root"; //用户名
$password = "123456"; //密码
$dbname = "test"; //数据库名
$conn = mysqli_connect($servername, $username, $password, $dbname);
if(!$conn){
die("Connection failed: " . mysqli_connect_error());
}
$conn->query("set character set 'utf8'");
$sql = "select * from test"; //表名
$result = $conn->query($sql);
if($result == false){
die("query error!");
}
if($result->num_rows > 0){
while($row = mysqli_fetch_array($result)){
echo "通过php读取数据库:" . $row["name"] ; //列名,那个【.】表示连接两个字符串
}
}
else{
echo "no message!";
}
$conn->close();
?>
保存退出
进行连接测试
curl localhost:88/mysqlTest.php
输出正确就成功了,注:如果没输出,可以看看是不是没有开启php-fpm服务,详情请看第七步
或者在浏览器输入公网ip:88/mysqlTest.php,运行结果如下
成功!!!
9、错误日志文件
nginx 的错误日志文件:/var/log/nginx/error.log
mysql 的错误日志文件: /var/log/mariadb/mariadb.log
php-fpm 的错误日志文件:/var/log/php-fpm/www-error.log
apache 的错误日志文件: /var/log/httpd/error_log
若在环境配置过程中出现什么差错,可以查看以上日志文件进行错误检查。
10、添加开机自启动
我们在用的过程中,难免会遇到由于某些原因或不可抗因素将服务器关机/被迫关机,这个时候再次开机,就得重新打开上面的httpd、nginx以及php-fpm,比较麻烦,所以设置一下开机自启动,就会方便多了。
相关命令(以httpd为例)
1.查看所有系统服务(即开机服务)systemctl list-units --all --type=service
2.查询服务状态systemctl status httpd.service
3.查询服务是否为开机启动systemctl is-enabled httpd.service
enabled是 disabled否4.设置服务为开机启动状态
systemctl enable httpd.service
然后就会自动创建一个系统链接(系统提示如下)Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
5.设置服务为开机不启动状态
systemctl disable httpd.service
然后就会自动移除系统链接(系统提示如下)
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
所以就可以将上面三个服务设置开机自启动,命令如下:
systemctl enable httpd.service
systemctl enable nginx.service
systemctl enable php-fpm.service
然后重启一下服务器就行了。
11、需要注意的一些点
11.1 防火墙问题
在上面的一整些过程,要么就把防火墙关闭,要么就把需要用到的端口添加到防火墙
关闭防火墙:
systemctl stop firewalld
查看防火墙中是否已经开放xx 端口(以8080端口为例):
firewall-cmd --query-port=8080/tcp
如果8080端口没有开放则,输入以下命令
firewall-cmd --permanent --add-port=8080/tcp
//重启防火墙,使修改生效
firewall-cmd --reload
11.2 第八步连接问题PHP Fatal error: Call to undefined function mysqli_connect()
我在运行第八步,访问php文件的时候,啥都没输出,查看日志文件/var/log/php-fpm/www-error.log,发现了下面的问题
PHP Fatal error: Call to undefined function mysqli_connect() in /usr/share/nginx/html/mysqltest.php on line 8
最后发现,重新安装一下php-fpm就可以了,详情请看第4步。
参考链接:参考链接1