十周二次课php
11.14/11.15Apache和PHP结合html
11.16/11.17Apache默认虚拟主机mysql
11.14/11.15Apache和PHP结合linux
<?php echo 123; ?>web
1.在运行/usr/local/apache2.4/bin/apachectl start 会跳出警告信息sql
[root@tianqi-01 php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf //ctrtl+z退出下apache
[1]+ 已中止 vim /usr/local/apache2.4/conf/httpd.confvim
[root@tianqi-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl restart //会看到警告信息windows
AH00557: httpd: apr_sockaddr_info_get() failed for hanfeng浏览器
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
[root@tianqi-01 php-7.1.6]# fg //回到刚暂停的任务中——>vim /usr/local/apache2.4/conf/httpd.conf
在文件中搜索 /ServerName
而后将 # ServerName www.example.com:80 前的# 去除掉保存退出便可
2.在去除# 号以后,运行apache,会提示79行错误
[root@tianqi-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl restart
httpd not running, trying to start
/usr/local/apache2.4/bin/apachectl: line 79: 1341 Segmentation fault $HTTPD -k $ARGV
3.在注释掉一个PHP后,就会发现不提示警告信息了
[root@tianqi-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl start
[root@tianqi-01 php-7.1.6]#
4.查看httpd进程
[root@tianqi-01 php-7.1.6]# ps aux |grep httpd
root 1407 0.0 0.8 253576 8900 ? Ss 11:59 0:00 /usr/local/apache2.4/bin/httpd -k restart
daemon 1408 0.0 0.8 540404 8980 ? Sl 11:59 0:00 /usr/local/apache2.4/bin/httpd -k restart
daemon 1409 0.0 0.8 540404 8980 ? Sl 11:59 0:00 /usr/local/apache2.4/bin/httpd -k restart
daemon 1410 0.0 0.8 540404 8980 ? Sl 11:59 0:00 /usr/local/apache2.4/bin/httpd -k restart
root 6919 0.0 0.0 112660 980 pts/0 R+ 13:51 0:00 grep --color=auto httpd
[root@tianqi-01 php-7.1.6]#
5.由于在打开了ServerName,就不在提示警告信息了
1.首先,咱们能够用浏览器访问本身虚拟机的IP,会发现没法访问
2.遇到这种问题,排查方法
3.先查看IP是不是通的,用物理机去ping 虚拟机的 IP
4.若IP是通的,再去判断80端口是不是通的——>用物理机去ping80端口
5.由于windows 并无打开telnet 客户端,因此会提示并无这个命令
6.打开telnet客户端——>注意:不要打开Telnet服务端,不然会监听23端口,不安全
7.如果能够运行 telnet 命令,那出来的则是一个结果,显示80并不通
8.在虚拟机上,使用iptables -nvL 命令,会查看到80端口并无打开
[root@tianqi-01 php-7.1.6]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
6747 16M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 60 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
1 52 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
128 16576 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 6465 packets, 2119K bytes)
pkts bytes target prot opt in out source destination
[root@tianqi-01 php-7.1.6]#
显示80端口并无打开
9.若想要windows机器去访问它,还须要加上一个操做
[root@tianqi-01 php-7.1.6]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@tianqi-01 php-7.1.6]#
10.这时再用物理机去访问虚拟机IP,则会显示 It works!
11.以前不能正常访问,就是因为防火墙的规则,没有加上80端口,不能正常访问
12.这时打开windows来查看80端口,这样的界面表示80端口通了
13.在物理机中按 ctrl+] 退出来,而后在按 quit 字符退出
14.这时删除以前加的那条规则,再来物理机查看虚拟机的80端口,会发现不通了
[root@tianqi-01 php-7.1.6]# iptables -D INPUT -p tcp --dport 80 -j ACCEPT
[root@tianqi-01 php-7.1.6]#
15.这时在把规则添加上,会发现又能够正常访问了
16.有时浏览器去访问虚拟机的IP,会显示 403Forbidden 错误界面
17.打开/usr/local/apache2.4/conf/httpd.conf配置文件
[root@tianqi-01 php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
而后搜索 /denied ,会看到
<Directory />
AllowOverride none
Require all denied
</Directory>
把 denied 改为 granted
18.以前能够在浏览器正常访问虚拟机ip,是由于
[root@tianqi-01 php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
是由于DocumentRoot指定了Directory,即以下:
DocumentRoot "/usr/local/apache2.4/htdocs"
<Directory "/usr/local/apache2.4/htdocs">
还有后面的
Require all granted
</Directory>
如果将这里的Require all granted改为Require all denied ,从新加载以后,那确定没法浏览。
19.在更改完配置文件,须要从新加载配置
[root@tianqi-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@tianqi-01 php-7.1.6]#
从新加载配置文件
[root@tianqi-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful
[root@tianqi-01 php-7.1.6]#
20.在配置文件中的,两处位置都应该改为granted,这是为了防止你在打开虚拟主机配置文件的时候,显示403Forbidden(403是它的状态码,正常状况下,状态码都是200)
[root@tianqi-01 php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
搜索 /AddType,而后
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
在这两行下面,增长php一行
AddType application/x-httpd-php .php
[root@tianqi-01 ~]# vim /usr/local/apache2.4/conf/httpd.conf
搜索 /Index ,找到
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
在index.html后加 index.php
显示为
<IfModule dir_module> DirectoryIndex index.html index.php
</IfModule>
[root@tianqi-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@tianqi-01 php-7.1.6]#
[root@tianqi-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful
[root@tianqi-01 php-7.1.6]#
1.验证
[root@tianqi-01 php-7.1.6]# vim /usr/local/apache2.4/htdocs/1.php
[root@tianqi-01 php-7.1.6]#
在文件中写入
<?php
phpinfo();
?>
保存退出
2.而后在浏览器访问虚拟机ip地址并添加页面地址(IP/index.php),而后会看到显示出内容——>增长一个文件是不须要重启php的
192.168.11.136/1.php
3.当看到php正常显示,如上图,那说明php支持支持解析
4.若是php不支持解析(以上四步骤错误一处),那么刷新页面显示出来的则是源代码(就是 1.php 文件中的代码)
5.若是遇到php没法解析,则去检查Apache的配置文件
第一项,查看是否加载php5模块,使用/usr/local/apache2.4/bin/apachectl -M命令
[root@tianqi-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl -M
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)
php5_module (shared)
[root@tianqi-01 php-7.1.6]#
[root@tianqi-01 php-7.1.6]# ls /usr/local/apache2.4/modules/libphp5.so
/usr/local/apache2.4/modules/libphp5.so
[root@tianqi-01 php-7.1.6]#
第二项,若是有文件,但没有显示php模块,那么就要去看apache的配置文件中有没有加载 libphp5 这一行配置,在文件中搜索/libphp5 ,若是没有这一行配置,那么确定也是没法解析的
[root@tianqi-01 php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
在文件中搜索/libphp5,看是否加载了这一行配置
LoadModule php5_module modules/libphp5.so
第三项,检查配置文件中是否加载了 AddType application/x-httpd-php .php 这一行 -
在 .php 前面有一行空格,须要注意下!不能遗忘!!!——>使用 /usr/local/apache2.4/bin/apachectl -t 能够检查出配置写错了
第四项,检查是否加了 index.php
在访问一个网站的时候,好比访问www.baidu.com的时候,并不用是www.baidu.com/index.php访问,会发现,两个访问出的页面是相同的,就是由于这里有索引页(或者叫作index页),它默认能跳转到这个页面下去。包括直接输入虚拟机ip的时候,也会访问到 It works!这是访问到的是 index.html ,就是由于咱们定义了一个index。
[root@tianqi-01 php-7.1.6]# ls /usr/local/apache2.4/htdocs/
1.php index.html
[root@tianqi-01 php-7.1.6]#
1.在配置文件中,注释掉php5,打开php7
[root@tianqi-01 php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
在文件中搜索 /libphp7.so,而后注释掉php5打开php7
# LoadModule php5_module modules/libphp5.so
LoadModule php7_module modules/libphp7.so
2.快捷键 ctrl+r ,能够快速执行命令历史中所用过的一些命令
3.而后检查配置文件是否存在语法错误,并从新加载配置文件
[root@tianqi-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@tianqi-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful
[root@tianqi-01 php-7.1.6]#
4.会看到更换了php7以后,用物理机访问虚拟机的ip,也会正常显示
5.在浏览器打开看到的phpinfo,和/usr/local/php7/bin/php -i |less看到的结果基本是一致的,只不过一个是文本形式,一个是图形化,图形化看起来更加直观,清晰明了
[root@tianqi-01 php-7.1.6]# /usr/local/php7/bin/php -i |less
phpinfo()
PHP Version => 7.1.6
System => Linux tianqi-01 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
Build Date => Feb 28 2018 10:09:13
Configure Command => './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'
Server API => Command Line Interface
Virtual Directory Support => enabled
Configuration File (php.ini) Path => /usr/local/php7/etc
Loaded Configuration File => (none)
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)
内容太多,上面只是截取了一部分
11.16/11.17Apache默认虚拟主机
</VirtualHost> <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com </VirtualHost> - /usr/local/apache2/bin/apachectl –t - /usr/local/apache2/bin/apachectl graceful
默认虚拟主机 - 默认虚拟主机,能够理解成Apache(也就是httpd),一个服务下面跑多了多个网站,跑了多个域名。例子,假如在服务器上,它既能访问百度,又能访问谷歌,这是两个不一样的网站,但同时都在一台服务器运行着,就用了一个httpd的服务,这个就是一个网站多个域名,每个域名对着一个虚拟主机 。1.更改hosts
在windows下去写hosts 1. hostsl路径地址,这个和linux下的hosts相似
打开物理机C盘 ——而后选择Windows——再选择System32 ——选择dirvers ——选择etc——选择hosts,右键属性
2.能够在这个里面定义一个IP,定义一个域名,而后让这个域名指向到这个IP上去
3.打开方式选择 记事本
4.打开文件,会看到windows下的hosts
5.而后在hosts文件中,任何一处位置加入一行,而后保存!
格式:先IP,而后空格,加域名——>域名能够写多个,一行里面能够有多个域名
192.168.11.136 www.abc.com www.123.com
6.而后物理机去ping 网址,能看到都能ping通
7.正常状况下,不写hosts,去ping——>将hosts中添加的一行注释掉
#192.168.11.136 www.abc.com www.123.com
8.而后再去物理机去ping www.abc.com,会看到IP是公网IP
9.这个就是hosts的做用,它的目的就是让你临时访问到一个服务器上去
10.这时候在将hosts中加入的那一行# 去掉
192.168.11.136 www.abc.com www.123.com
11.而后用物理机中的浏览器去访问www.abc.com或www.123.com,会看到正常访问
12.浏览器去访问www.123.com/1.php,会看到正常访问
13.或许会有一个疑问,123.com和abc.com,包括这个IP并无在httpd的配置文件中去定义它,在配置文件中仅仅定义了 www.example.com这个域名,这个叫作Apache的默认主机 。也就是说,任何一个域名,指向到这个 IP,它都会访问到这个站点,这个站点就叫作默认虚拟主机——>注意:是虚拟主机。
14.打开虚拟主机,在/usr/local/apache2.4/conf/httpd.conf 配置文件中
[root@tianqi-01 php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
搜索/extra 关键词,下面一行就作虚拟主机
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
把#Include conf/extra/httpd-vhosts.conf前面的 #号去掉
显示为:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
15.由于配置文件仅仅能定义一个ServerName,因此如今打开一个二级配置文件
[root@tianqi-01 php-7.1.6]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
打开配置文件,会发现有两个<VirtualHost *:80> ,每个<VirtualHost >都是一对出现的,每个<VirtualHost >都表明着一个主机,一个主机就是一个网站。
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com //定义管理员的邮箱——>可删除
DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"//定义网站的根目录在哪里
ServerName dummy-host.example.com //服务器名字
ServerAlias www.dummy-host.example.com //定义别名,别名就是一个网站能够有多个域名访问,好比能够是abc.com访问,也能够是www.abc.com访问,访问的内容是一致的
ErrorLog "logs/dummy-host.example.com-error_log" //错误日志
CustomLog "logs/dummy-host.example.com-access_log" common //访问日志
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/usr/local/apache2.4/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error_log"
CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>
16.在打开虚拟主机配置文件后,作一个更改
17.更改完配置文件,就去建立对应的目录
[root@tianqi-01 ~]# mkdir /data/wwwroot/
[root@tianqi-01 ~]# mkdir /data/wwwroot/abc.com
[root@tianqi-01 ~]# mkdir /data/wwwroot/111.com
[root@tianqi-01 ~]#
18.在对应的站点根目录下建立,定义一个php
[root@tianqi-01 ~]# vim /data/wwwroot/abc.com/index.php
在文件中写入
<?php
echo "abc.com";
并保存退出
19.而后在/data/wwwroot/111.com/index.php中也定义一个php
[root@tianqi-01 ~]# vim /data/wwwroot/111.com/index.php
在文件中写入
<?php
echo "111.com";
并保存退出
20.在定义完以后,去检查服务是否有错误
[root@tianqi-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@tianqi-01 ~]#
21.而后从新加载配置文件
[root@tianqi-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@tianqi-01 ~]#
22.定义一个网站最核心的参数就是网站的根目录在哪里,访问的域名是什么,ServerName只能写一个,而ServerAlias能够写多个域名
curl -x命令
1.好比说,如今要访问abc.com,若不去绑定hosts,那么在虚拟机中ping www.abc.com会ping到外网上去,并无在这台机器上。若想要访问abc.com在在这台机器上,能够编辑/etc/hosts文件去指定下,或者使用curl -x选项
[root@tianqi-01 ~]# curl -x192.168.11.136:80 abc.com
abc.com[root@tianqi-01 ~]# curl -x192.168.11.136:80 www.abc.com
abc.com[root@tianqi-01 ~]# curl -x192.168.11.136:80 www.abcd.com
abc.com[root@tianqi-01 ~]#
在访问abcd.com时,会发现访问的仍是abc.com,这个在以前不管把任何域名指向到192.168.11.136这台机器上,都会访问到htdocs目录下面去,但如今发生了转变,不管什么域名指向过来,它都会访问到abc.com,abc.com是咱们虚拟主机配置文件里边的第一个虚拟主机,它就是默认虚拟主机。
默认虚拟主机,就是不管访问什么域名,只要解析到192.168.11.136这个IP上,它都会访问这个网站对应的虚拟主机配置(这个默认虚拟主机就是abc.com)。
2.这时再来访问www.example.com
abc.com[root@tianqi-01 ~]# curl -x192.168.11.136:80 www.example.com
111.com[root@tianqi-01 ~]#
友情连接:阿铭Linux