從Python到Apache再到CGI

三天學完Python的我,沒有想到一個CGI讓我研究了兩天,沒有大牛帶路的日子,我是要記錄一下自己成長的過程了。也最終明白了一個道理,堅持很重要。。。。雖然我是前端,可是知識沒有邊界。。。。

目錄


  • 一、Apache安裝和啓動
  • 二、CGI啓動

內容


一、Apache安裝和啓動(windowS)

  1. 下載地址:Apache

  2. 根據自己的電腦系統安裝相應的版本,如圖:


  3. 修改配置文件httpd.conf,具體地址,在apache安裝目錄裏面如下圖:

    • 修改默認目錄,將SRVROOT默認的c:/Apache24,修改爲apache24的安裝目錄,以我自己的安裝爲例:

      地址應該是:D:/httpd-2.4.41-win64-VS16/Apache24寫法如下:
    • 修改端口號如下圖:



  4. 啓動服務,找到bin目錄下的ApacheMonitor.exe,雙擊,如圖:

  5. 打開瀏覽器,如果顯示如下效果,證明服務啓動成功,效果如圖:


自己的測試文件應該如何啓動:
文件存放位置爲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日誌,第二就是,多嘗試。第三就是遇到問題,要耐心解決,能解決問題比沒有遇到任何問題更能增加我們對新知識的理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章