Apache+Python+Windows進行CGI編程新手上路時的各種坑

題外提醒:
1、本人有強迫症,且死要面子。所以不到完全迫不得已,不會“騷擾”身邊的大佬,這讓我在這破事上浪費了三四天,雖然最終對其理解更爲深刻,但投入和產出嚴重不成比例,希望大家不要學我。臉皮厚一點,啥都解決了。
*但這種獨自解決問題的暢快,別人又怎能理解呢? :p

2、暫不想寫的太詳細,網上相關的文章也很多,我也會給大家貼鏈接的,如果有詳細的需求,請在下面留言區留言。若需求較多,再考慮寫一個詳細版的。

3、由於這次安裝是幾個巧合湊一塊了,並且網上的內容很多是過時的,(而且用的是Windows不是Linux和Unix也很煩)所以異常艱辛,我算是踩過坑了,不想讓後來者再踩,寫出來希望能給大家一點幫助!

4、請結合文中鏈接閱讀本文


**

正文:

**
1、下載Python我就不說了,我用的是Python27
2、Apache當然是在官網上下載啦。下載教程:http://jingyan.baidu.com/album/29697b912f6539ab20de3cf8.html?picindex=2
我在下載時發現
這裏寫圖片描述
貌似是2.2系列的已經到最後一版了(end-of-life),爲了以後的需求,我選擇了2.4的版本,這也爲我之後的一個坑埋下了伏筆。
3、像安裝一般軟件一樣一路點下去就安好了Apache,打開Apache的文件夾後應該是這樣的這裏寫圖片描述
這裏的各個文件夾代表什麼呢?我挑幾個重要的講一下:

  • bin:命令行操作文件夾,使用cmd使要在此文件夾路徑下發出命令
  • cgi-bin:一般CGI文件就放在這裏
  • conf:配置、參數文件夾
  • htdos:二級目錄,其他css,JavaScript等文件放在這裏
  • logs:日誌,其中error.log文件很重要,這是你進行不下去時,找到下一線索的重要途徑

別的就請大家自己探索了,和本文關聯不大

4、配置httpd. conf
給大家幾個相關的鏈接,我就不用再複述了
http://www.cnblogs.com/biyuting/p/5986287.html
http://jingyan.baidu.com/article/0eb457e53c019f03f1a905c7.html

請注意幾點:
5、Define SRVROOT “/Apache24”這一行:
最近版本的Apache好像是不用再改SRVROOT就可以了,但我沒有試,不能確定,這裏暫不討論。我就按需要改的來。我的改法是:Define SRVROOT “D:/Apache24” 。改法很多,很多網上教程把這一句註釋掉或刪掉,然後把文件中所有的${SRVROOT}都改成自己電腦的絕對路徑了,其實沒那麼麻煩,全改還容易錯,並且如果以後要更改${SRVROOT},就會很麻煩。這是沒有理解語法造成的。第一句是定義SRVROOT,所以以後的${SRVROOT}都等同於”D:/Apache24”,所以完全不必改動。

6、我在更改listen端口時,發生了件很詭異的事:我已經把80改爲了8081,但是當我用瀏覽器訪問時,不僅localhost:8081進入了頁面,localhost也可以進入頁面!連接兩天都這樣,直到第三天才突然發現localhost無法進入頁面了。我現在還沒琢磨清楚爲什麼,怎麼會在端口只有一個8081的情況下,同時這兩個都可以訪問?歡迎各位討論!

7、配置Directory時有個大坑:你在別人的教程中可能會看到這兩行代碼:

Order allow,deny  
Allow from all  

這是訪問控制語句,但可惜的是,只有2.2版本的支持這樣的語句,到2.4版本就變了,具體請詳見http://blog.csdn.net/pzqingchong/article/details/52702575

8、使用cmd要以管理員身份打開

9、寫下你的第一段CGI代碼:(來自菜鳥教程)

#!/usr/bin/python3

print ("Content-type:text/html")
print ()                             # 空行,告訴服務器結束頭部
print ('<html>')
print ('<head>')
print ('<meta charset="utf-8">')
print ('<title>Hello Word - 我的第一個 CGI 程序!</title>')
print ('</head>')
print ('<body>')
print ('<h2>Hello Word! 我是來自菜鳥教程的第一CGI程序</h2>')
print ('</body>')
print ('</html>')

10、將你的xxxx.py文件放到cgi-bin文件夾後要給它755權限,而在Windows環境下,我們只需右鍵,找到屬性,在安全中選中“完全控制”即可。詳見http://blog.csdn.net/a1083595345/article/details/52371677

11、當你把這一切都搞定,可能獲得的仍是500錯誤頁面。你查看error.log,發現有如下錯誤: 系統找不到文件 [client ::1:52335] couldn’t create child process: 720002: first.py [client ::1:51592] AH01223: couldn’t spawn child process: D:/Apache24/cgi-bin/first.py 這時我們回顧9中的那段代碼
第一行:

#!/usr/bin/python3

或許你剛開始學Python,就有人或書告誡你務必在每段代碼的開頭都加上一句這個,但是很可惜地告訴你,這是在Linux/Unix環境下的代碼,Windows環境下的代碼應該爲:(我一直找到了這個才恍然大悟https://stackoverflow.com/questions/6611311/running-a-py-file-in-browser 該樓主和我遇到了同樣的問題,還好有好心人幫助了他,也幫助了我)

#!C:\Python27\python.exe

這裏寫圖片描述

12、現在你應該可以用瀏覽器順利打開你的CGI啦!:)


其他:

請一定利用好error.log,由於篇幅有限,我沒有一一列舉我遇到的問題時的log日誌報錯內容,但請你一定關注它,並積極利用網絡尋找線索和答案!

祝各位有所收穫,歡迎各位討論!
謝謝!

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