十週二次課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