開啓apache服務,結果報錯:
在Windows用下面的命令查看關於443的所有服務
如果是Linux環境的話,就用 netstat –tunl | grep 443
找到端口是443的服務,最後一個數字表示pid
看一下pid爲2440的是什麼服務
殺掉佔用443端口的進程
可以開啓apache服務了,輸入localhost,顯示It works的頁面,說明apache啓動成功了。
輸入部署的項目的IP和端口,網頁上提示錯誤“you don’t have permission to access the server”。上網查資料,得知原來httpd.conf上有如下的參數:
這是apache的項目目錄,由於我們訪問的並不是該目錄,於是apache就禁止我們訪問該目錄以外的內容。我們的部署的項目在httpd-vhosts.conf中也有DocumentRoot這一參數,因此httpd.conf中的這個就用不上了,可以註釋掉。
配置文件httpd.conf中的這幾行也是要註釋掉的。
下面還有一個<Directory>標籤,註釋有點長,爲了方便閱讀,我這裏把註釋刪掉。將原來的語句:
<Directory ${ServerRoot}/htdocs>
Options Indexes FollowSymLinks
AllowOverride None
#Require all granted
</Directory>
修改爲:
<Directory />
Options Indexes FollowSymLinks
AllowOverride None
</Directory>
這個’/’表示根目錄。
我們的項目是配置在httpd-vhosts.conf中的,要使得該配置生效,需要httpd.conf中去掉下面的註釋:
同時<Directory>標籤中要有Options Indexes FollowSymlinks,表示使用httpd-vhosts.conf中的配置
接下來,把php和apache配合起來,需要在apache的httpd.conf中加載關於php的模塊。
上網查詢,發現需要php7apache2_4.dll。並且由名字可知,php7是跟apache2.4配合。
在PHP的文件夾中找了半天沒有找到php7apache2_4.dll,上網一查,發現non thread safe版本的php沒有這個dll文件,thread safe版本的php裏面纔有,所以要上php官網重新下載一個thread safe版本的php。
按要求全部配好,apache服務卻啓動失敗,顯示”Cannot Load php7apache2_4.dll into server”
上網查,有網友說可能是因爲php和apache2_4.dll的版本不匹配
Apache是x86,而php7.2.14是x64,版本不匹配。
除了需要兩者版本都要是x86或x64外,還要求電腦本地已經安裝了相應的VC環境。我這裏php7.2至少需要vc15,而我電腦本身已經安裝了VC17,所以不用額外再裝,否則還要從微軟官網下載對應的vc環境。
下載了新的php後,又要把之前的操作進行一次,心累。(說明:相信不少人都是跟我一樣,先是用php練習語法,後來寫網頁時才下載apache,然後在apache服務開啓失敗才通過找文章發現版本不匹配)
還有常規的操作,就是把php.ini-development改名爲php.ini,打開找到extension_dir,去掉註釋,並把自己電腦上的php的安裝路徑填上。
不幸的是,項目的頁面上還是顯示PHP源代碼,說明根本PHP沒有解釋到網頁上的代碼。這時首先要檢查php-cgi(Windows)或者php-fpm(Linux)是否開啓。但是我的模塊的確是已經開啓了,上網查資料,發現原來需要在httpd.conf補充下面的:
這句讓apache運行的php和html文件可以解釋文件中的php代碼
如果是使用PHP的框架例如thinkphp、laravel等,並且需要用到URL的重寫的話,需要給apache開啓下面的模塊,在httpd.conf中加上下面的語句:
修改了配置文件記得重啓apache服務,不然運行的還是修改前的配置內容。
重啓完畢後再次輸入項目的ip和監聽端口,終於看到項目的首頁了。
心得:
配置這個apache花了我將近2天,期間找了不少博客文章並綜合起來,踩了不少坑。對於剛剛上手php的,重點是學會使用php代碼寫業務邏輯,可以用那些一鍵安裝包。但是真正要了解項目,首先就要會搭建項目開發環境,這時最好不要再用那些一鍵安裝包,因爲其中隱含了很多操作細節。這兩天的搭建環境讓我對apache的參數有了更進一步的理解。其實以httpd.conf爲例的配置文件裏,每個參數都有說明,甚至有網頁鏈接讓你可以細緻地瞭解該參數的含義,畢竟官方文檔的解釋纔是最權威的。