三天學完Python的我,沒有想到一個CGI讓我研究了兩天,沒有大牛帶路的日子,我是要記錄一下自己成長的過程了。也最終明白了一個道理,堅持很重要。。。。雖然我是前端,可是知識沒有邊界。。。。
目錄
- 一、Apache安裝和啓動
- 二、CGI啓動
內容
一、Apache安裝和啓動(windowS)
下載地址:Apache
-
根據自己的電腦系統安裝相應的版本,如圖:
-
修改配置文件
httpd.conf
,具體地址,在apache
安裝目錄裏面如下圖:
- 修改默認目錄,將
SRVROOT
默認的c:/Apache24
,修改爲apache24
的安裝目錄,以我自己的安裝爲例:
地址應該是:D:/httpd-2.4.41-win64-VS16/Apache24
寫法如下:
-
修改端口號如下圖:
- 修改默認目錄,將
-
啓動服務,找到
bin
目錄下的ApacheMonitor.exe
,雙擊,如圖:
-
打開瀏覽器,如果顯示如下效果,證明服務啓動成功,效果如圖:
自己的測試文件應該如何啓動:
文件存放位置爲htdocs
,建立自己的測試文件hello.py
,如下圖:
至此,
apache
安裝並啓動成功。
二、CGI啓動
CGI
的文件存放目錄爲 apache24
下面的cgi-bin
,如圖所示:
在此目錄下,我新建了dyx.cgi
測試文件,文件內容如下:
之後我們按照配置的路徑,在瀏覽器打開文件,效果如下:
然後我們去查看一下log日誌:目錄爲apache24
下面的logs
文件夾,如圖:
提示如下圖:
然後經過研究,得出:
該錯誤的原因是cgi
文件寫的內容有缺失,之後在文件頭部增加一行代碼,來告訴服務用什麼來解析文件,也就是要把python.exe
的安裝路徑寫進去,路徑查找如下圖:
代碼如下:
#!C:/Users/v_yanxdai/AppData/Local/Programs/Python/Python37
print("Content-type:text/html\r\n\r\n")
print('')
print('<b>Hello--我是CGI 文件</b>')
然後瀏覽器打開頁面依然報錯,查看log日誌,報錯如下:
之後,查看了很多文檔,畢竟身邊都是前端,也沒法找人探討,只能自己摸索,查看了幾種解決方案,大致如下:
- 方案1:增加文件編碼代碼:
# -*- coding: utf8 -*-
- 方案2:引入
gci
import cgi import cgitb;cgitb.enable()
- 方案3:修改
httpd.conf
配置文件# Options Indexes FollowSymLinks Options +Indexes +FollowSymLinks +Multiviews # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # # AllowOverride None AllowOverride all
然而這些方案還是沒有解決我的問題,極盡放棄的邊緣,又堅持看了一些文檔,把第一行的代碼#!C:/Users/v_yanxdai/AppData/Local/Programs/Python/Python37
修改爲:#!C:/Users/v_yanxdai/AppData/Local/Programs/Python/Python37/python.exe
,打開瀏覽器頁面顯示如下:
原因:
我們腳本中的第一行文本有點兒神祕。它看起來應該是一條註釋,因爲它起始於一個符號,但是它看起來太有意義,以至於不僅僅是註釋。事實上,這個是被用來告訴操作系統將執行此腳本所用的解釋器的名字。 每個腳本都應該把這一文本行作爲它的第一行。
至此,
CGI
啓動成功。
注意:
如果CGI返回的內容是html頁面,有可能會出現頁面亂碼的情況,效果如下:
增加如下代碼即可
import codecs, sys
# CGI處理模塊
import cgi, cgitb
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer)
效果如下:
至此2天的時間已經耗完,好在問題得到了解決,總結經驗就是,第一要學會看Log日誌,第二就是,多嘗試。第三就是遇到問題,要耐心解決,能解決問題比沒有遇到任何問題更能增加我們對新知識的理解。