學習使用apache的cgi問題

2021-09-30 06:48:50 字數 1159 閱讀 6003

cgi是實現前後臺互動的乙個很簡單的方法,前台通過瀏覽器輸入一段「http://webserver/cginame.cgi?parameter」的字串,後台伺服器部署apache之後,在後台實現cgi程式響應前台的服務請求。

這段時間需要使用cgi去完成乙個簡單的請求服務功能,前台通過vbs指令碼輸入字串給後台,其中str為cgi字串。伺服器接收到字串之後

對字串進行解析,然後完成後台服務,再將處理的結果printf給前台。

本來是乙個很簡單的cgi程式,但是在實現之後卻遇到了**煩。問題是實現的cgi程式之後,gdb除錯沒問題,前台呼叫指令碼執行也沒問題。但是執行幾次問題就來了。前台指令碼執行沒有結果,在瀏覽器中輸入cgi字串,返回的是500錯誤。檢視apache錯誤日誌,發現報錯「premature end of script headers」。這個問題一般是因為後台找不到正確的路徑報錯。而我程式裡的操作檔案都是根據絕對路徑進行操作的,這確實很奇怪。有經驗的同事講在cgi中使用fopen函式一般使用相對路徑。改為相對路徑之後,果然在前台可以繼續使用cgi了。但是好景不長,執行幾次還是出現開始的問題。看來由絕對路徑改為相對路徑並沒有解決根本問題。難道是我在程式中開啟檔案的次數過多,導致檔案控制代碼太多造成。對程式再次檢查之後發現有一處開啟檔案之後,操作完沒有使用fclose關掉。於是竊喜,以為發現問題了。然後網上有人講apache錯誤「premature end of script headers」一般是因為在輸出之前沒有輸出回車換行導致的,於是在正式輸出之前先輸出「/r/n」重編後執行,目前還沒有出現之前的問題。後續還得繼續觀察一段時間。

由此總結了幾個問題:

1. 為什麼cgi訪問一會可以一會報錯?(難道是之前忘fclose乙個檔案,導致執行幾次cgi後檔案操作故障?不解。。。)

2. 為什麼在伺服器端執行cgi程式沒問題,前台執行就報500錯誤? 不解,有朋友說是打屏的時候應該先輸出「/r/n」

,但是我的head裡面已經先輸出「/r/n」了。

結論是:有經驗的同事告訴我,最好還是少用些檔案操作,目前修改的程式先跑著吧,要是出問題了(千萬別出問題呀) 就把檔案操作精簡下,能用字串在記憶體中操作的,堅決不用輸出檔案。   

配置Apache對CGI的支援

在http.conf或 etc apache2 mods enable cgi.load 檔案裡,我的是在目錄 usr local apache2 conf 下面的http.conf 加入cgi支援 loadmodule cgi module usr lib apache2 modules mod ...

CGI在Apache上的配置

想寫個前台頁面傳送ajax請求到後台用c語言編寫的cgi程式,並成功返回結果。原始碼都很簡單,都有,結果在除錯配置時遇到了乙個又乙個問題。特記錄之。過程參考 1 先貼 ajaxtest1.htm suggest instruction cgi main.c include include inclu...

Apache 上的 CGI 配置與測試

平台與工具 windows xp,apache 2.0.59,activeperl 5.6.1.628 mswin32 x86 multi thread.msi,vc 6.0,turboc 2.0 scriptalias cgi bin f php code cgi bin allowoverrid...